Я потратил все вчера на исследования и, наконец, смог загрузить 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