Я потратил все вчера на исследования и, наконец, смог загрузить Windows XP. Это должно быть чем-то похожим и для других ОС. Но операция это все, но не тривиально.
Поскольку это опасная операция, я рекомендую сделать резервную копию ваших ценных данных.
Вот шаги:
подготовка
В случае Windows XP вы должны забыть о текущих настройках буквы диска и раздела, поэтому перед переносом вам необходимо стереть все значения из ключа HKEY_LOCAL_MACHINE / MountingDevices на виртуальной машине. Ядро перестроит его при следующей перезагрузке. На виртуальных машинах Linux это означает исправление fstab после миграции.
Монтирование образа VDI
Вы не можете просто скопировать весь VDI в раздел, потому что он также содержит MBR. Вам нужно скопировать только виртуальный раздел, поэтому сначала вам нужно найти способ монтировать VDI.
Вам нужен nbdдрайвер и qemu-nbdкоманда. На Ubuntu это в qemu-kvmпакете.
Сначала загрузите драйвер nbd:
# modprobe nbd
Это должно сделать некоторые nbdустройства в /dev.
Затем смонтируйте VDI:
# qemu-nbd -c /dev/nbd0 path_to.vdi
Это должно сделать /dev/nbd0p1, /dev/nbd0p2, и /dev/nbd0p3т.д. для всех виртуальных разделов. Они могут быть установлены как любые обычные устройства.
Перенос раздела
Используйте ddдля этого, размонтируйте оба раздела перед операцией:
# dd -if=<nbd_device> -of=<real_partition>
например.:
# dd -if=/dev/nbd0p3 -of=/dev/sda4
Операция ddмолчит, это может занять несколько минут, а то и полчаса. Во время операции вы можете открыть терминал и использовать, fdisk -lчтобы увидеть, что все идет хорошо.
ОБНОВИТЬ:
По-видимому, NBD не является надежным решением. Это может вызвать ошибку ввода-вывода и привести к сбою dd. Более того, следующая попытка не удалась сразу. Вы также можете попробовать создать VMDK на сыром диске с помощью этой команды (под linux):
$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda
Вы должны быть в diskгруппе, чтобы это работало. Затем добавьте этот vmdk на виртуальную машину в качестве вторичного жесткого диска, а затем используйте Live Linux ISO ddв раздел.
Исправление загрузочного сектора раздела NTFS
Это хакерская часть.
Мы почти готовы, но Windows XP не загружается, потому что нам нужно установить количество скрытых секторов файловой системы по смещению 0x1C. Это в основном ряд секторов перед разделом NTFS. Мы можем получить этот номер из fdisk -ulкоманды. В startполе выходных данных указывается, с какого сектора начинается данный раздел, в основном это число секторов перед разделом. Так что получите число оттуда, конвертируйте его в шестнадцатеричное, например, используя gcalctool.
Откройте раздел с помощью hexedit, как это:
# hexedit /dev/sda4
Затем напишите число скрытых секторов в порядке с прямым порядком байтов по 1Cсмещению. Маленький эндиан значит: 0xABCDEFGHбудет GH EF CD AB. Если число гекса короче, чем 8 цифр, ему предшествует ноль.
Когда закончите, сохраните его и выйдите (Ctrl + X).
Настройка GRUB
Вы должны указать GRUB загружать непосредственно этот раздел, для GRUB добавьте следующий пункт меню:
title Microsoft Windows XP Professional
root (hd0,3)
savedefault
makeactive
chainloader +1
Где (hdX, Y)идентифицирует раздел. X - 0 для жесткого диска по умолчанию, 1 для /dev/sda, 2 для /dev/sdbи т. Д. Y - номер раздела. 0 для /dev/sda1, 1 для /dev/sda2и т. Д.
Это также должно быть похоже на GRUB2, но он использует немного другой синтаксис для пунктов меню.
Последние штрихи
Новый раздел NTFS готов к загрузке. Но вам все еще нужно взломать, чтобы добраться до рабочего стола Windows XP. Другие системы могут нуждаться в других взломах. Сначала нужно исправить boot.ini.
[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
Установите номер раздела соответственно. Я установил его на / dev / sda4. Таким образом, номер раздела должен быть 3.
Возможно, вам придется исправить запись MountingDevices в реестре, если Windows зависает прямо перед экраном входа в систему.
Реестр на это <path to windows>/system32/config/systemвы можете посмотреть chntpw. Это может быть проблемой, если буква вашего системного диска отличается от C. Поскольку chntpwвозможности записи в реестр весьма ограничены, вам нужно откатиться и использовать hexeditor, например, ghex2, чтобы исправить это. В моем случае вам нужно найти \DosDevices\C:и заменить букву C на другую букву F.
После этого вы сможете получить доступ к рабочему столу, теперь вам нужно искать все драйверы, но это выходит за рамки данного руководства.
источники
Перемещение Windows XP в другой раздел
Смонтировать VDI под Linux