Я потратил все вчера на исследования и, наконец, смог загрузить 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 в виртуальную машину как вторичный жесткий диск, а затем использовать Linux на ISO для dd
раздела.
Исправление загрузочного сектора раздела NTFS
Это хакерская часть.
Мы почти готовы, но Windows XP не загружается, потому что нам нужно установить число скрытых секторов файловой системы со смещением 0x1C
. Это в основном ряд секторов перед разделом NTFS. Мы можем получить этот номер из команды fdisk -ul
. В поле start
выходных данных указывается, с какого сектора начинается данный раздел, в основном это число секторов перед разделом. Так что получите число оттуда, конвертируйте его в шестнадцатеричное значение, например, используя gcalctool.
Откройте раздел с помощью hexedit
, вот так:
# hexedit /dev/sda4
Затем запишите число скрытых секторов в порядке с прямым порядком байтов со смещением 1C
. Little endiean означает: 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