Запуск гостевой системы Virtualbox с физического раздела диска

Зачастую на компьютере установлено несколько операционных систем. Например, Windows с переменным успехом дружит с разными версиями GRUB и вполне уживается с Linux в пределах одного компьютера. Но часто из системы в систему не попрыгаешь даже в текущих реалиях жизни, где сплошь и рядом SSD и молниеносные дисковые операции. Для каких-то вещей вполне хватило бы виртуалки со второй системой, но настраивать всё заново долго, а быстрые гигабайты стоят по-прежнему космических денег.

Рассмотрим использование в Virtualbox под Ubuntu установленного на соседнем разделе Windows.

Основной принцип заключается в том, чтобы подмонтировать в качестве VMDK-образа гостевой системы Virtualbox установленную на физический раздел копию Windows. Но просто так винда не стартует, ей нужен собственный загрузчик. Его нет на диске с Windows, потому что там прописан GRUB. Его можно либо каждый раз восстанавливать при запуске гостя, либо воспользоваться дополнительным, взятым из отдельного ISO-образа, монтируемого вместе с виртуальной машиной.

Дабы не следить особо за правами на чтение дисков, образов и прочего, в начале наших манипуляций дадим своему пользователю доступ до всего необходимого:

sudo adduser $(whoami) vboxusers
sudo adduser $(whoami) disk

После перезагрузки нам будет доступно использование vboxmanage без суперпользовательских привилегий.

С помощью fdisk -l находим диск и загрузочный раздел с Windows, он будет помечен звездочкой

fdisk -l

Диск /dev/sdb: 120.0 Гб, 120034123776 байт
255 головок, 63 секторов/треков, 14593 цилиндров, всего 234441648 секторов
Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 4096 байт
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Идентификатор диска: 0x44e9d489

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *        2048   104859647    52428800    7  HPFS/NTFS/exFAT
/dev/sdb2       104859648   184860671    40000512   83  Linux
/dev/sdb3       184860672   216860671    16000000   82  Linux своп / Solaris

Создаем виртуальную машину через GUI Virtualbox, указываем необходимые для работы параметры на свой вкус. На вопрос о создании жесткого диска отвечаем отрицательно.

Затем идем в папку с этой виртуальной машиной на диске (для удобства дальнейшие операции будут проводиться там) и создаем образ с загрузчиком:

cd /media/xandros/data/VirtualBox/win7
mkdir -p .iso/boot/grub 
touch .iso/boot/grub/grub.cfg

D этот файл кладём содержимое своего пункта меню Windows из файла /boot/grub/grub.cfg, предварительно указав минимальные параметры для ускорения запуска

insmod part_msdos
set default=0
set timeout=0
menuentry 'Windows 7 (loader) (на /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-chain-686CD2336CD1FBAE' {
    insmod part_msdos
    insmod ntfs
    set root='hd1,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  686CD2336CD1FBAE
    else
      search --no-floppy --fs-uuid --set=root 686CD2336CD1FBAE
    fi
    parttool ${root} hidden-
    chainloader +1
}

Создаем непосредственно ISO-файл:

grub-mkrescue --output=/media/xandros/data/VirtualBox/win7/grub2.iso /media/xandros/data/VirtualBox/win7/.iso/

xorriso 1.3.2 : RockRidge filesystem manipulator, libburnia project.

Drive current: -outdev 'stdio:/media/xandros/data/VirtualBox/win7/grub2.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 38.9g free
Added to ISO image: directory '/'='/tmp/grub.Sb4dZZ'
xorriso : UPDATE : 281 files added in 1 seconds
Added to ISO image: directory '/'='/media/xandros/data/VirtualBox/win7/.iso'
xorriso : UPDATE : 284 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 512 bytes from file '/usr/lib/grub/i386-pc/boot_hybrid.img'
xorriso : UPDATE :  100.00% done
xorriso : UPDATE :  100.00% done
ISO image produced: 2536 sectors
Written to medium : 2536 sectors at LBA 0
Writing to 'stdio:/media/xandros/data/VirtualBox/win7/grub2.iso' completed successfully.

Теперь создадим образ .vmdk, который будет ссылаться на диск /dev/sdb с разделом sdb1 в качестве целевого (здесь relativeиспользуется для относительной адресации разделов)

VBoxManage internalcommands createrawvmdk -filename /media/xandros/data/VirtualBox/win7/win7sdb1.vmdk -rawdisk /dev/sdb -partitions 1 -relative
RAW host disk access VMDK file /media/xandros/data/VirtualBox/win7/win7sdb1.vmdk created successfully.

Теперь входим в настройки нашей системы в Virtualbox, выбираем Носители — Контроллер SATA. Жмем на первую кнопку снизу «добавить» и выбираем наш VMDK образ. В контроллере IDE выбираем ISO-образ с загрузчиком.

vmdk-win

Пробуем загрузиться.

P.S. Во время работы с Windows в качестве гостевой можно монтировать любые оптические диски и образы, загрузчик будет необходим только при запуске.

Ссылки: