Как скопировать содержимое VirtualBox VDI в раздел и выполнить двойную загрузку ОС с него?

12

Я пользователь Linux, но держу сжатый ISO-образ Windows XP при себе на перьевом диске для случая, когда мне абсолютно необходима Windows, чтобы что-то сделать. Это работает в VirtualBox большую часть времени.

Но теперь я хочу поиграть в некоторые игры, поэтому я хотел бы запустить образ Windows изначально. У моего компьютера нет привода CD, поэтому я не могу просто записать ISO-образ и выполнить установку в обычном режиме.

Я пытаюсь переместить установленный образ Windows в физический раздел NTFS на моем жестком диске и настроить GRUB, чтобы я мог выполнить двойную загрузку.

Я нашел много учебников, которые касаются создания VDI на физическом диске. Но они предполагают, что я хочу перезаписать весь мой диск. Перемещение необработанного образа диска ddв раздел привело к повреждению раздела.

Я также попробовал уловку VMDK, чтобы использовать этот пустой раздел и установить Windows на нем. Хотя фаза текстового режима установки завершается без проблем, виртуальная машина не будет работать, либо аварийно завершает работу, либо перезагружается, либо просто сразу же зависает (в зависимости от того, как я создал VMDK с помощью -rawdisk /dev/sda3или -rawdisk /dev/sda -partition 3).

Calmarius
источник

Ответы:

4

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

Calmarius
источник
0

Вы можете попробовать использовать partimage и gdisk, чтобы сделать так. Возьмите gdisk или другую программу с разделами и измените размер вашего текущего диска / создайте раздел на диске где-нибудь. в идеале это будет основной раздел. Я обычно держу раздел 1 для Windows и 2+ для данных Linux.

После настройки раздела вы можете использовать gdisk или другой клон-призрак для создания резервных копий файлов или прямого образа на другом диске. можно настроить сетевое соединение с хостом, если вам нужно удалить файл таким образом, или вы можете создать img-файлы, а затем скопировать их из файла vmdk в вашу хост-систему ... затем использовать программное обеспечение образа для восстановления раздела в местоположение, которое вы создали в хост-системе

при необходимости настройте grub, чтобы добавить загрузку в этот раздел ntfs.

Кендрик
источник
Вы, вероятно, также можете установить vmdk в маннере, который позволит программному обеспечению для образа напрямую считывать его с хоста, так как это зависит от того, как работает образ.
Кендрик
Я провел все вчера с исследованиями и, наконец, смог загрузить Windows XP. Я собираюсь написать это подробно. Это не тривиально.
Кальмарий
это довольно иронично, но мне нужно будет сделать этот процесс в ближайшее время. У меня есть компьютер, который по какой-то причине не любит установку соляриса, поэтому мне нужно перенести данные с виртуальной машины на новую машину.
Кендрик