Запуск установленной Windows XP/Vista под VirtualBox в Linux

В нашей компании используется интернет-банкинг faktura.ru. Достаточно удобный интернет-банкинг, но к сожалению он не работает под Linux.

У меня на ноутбуке стоит 2 операционные системы:

1) Linux Fedora 14 (основная)

2) Windows Vista (для интернет-банкинга)

Для использования интернет-банкинга приходилось регулярно перезагружаться из Linux в Windows -- очень не удобно.

В качестве решения данной проблемы выбрана виртуацизация на VirtualBox-OSE. Простой в использовании на десктопе, бесплатный. В этом посте хочу рассказать как запустить в VirtualBox уже установленную на физический раздел Windows Vista/XP под Linux Fedora.

Для запуска нам необходимо сделать следующее:
1. Установить VirtualBox.
2. Сделать загрузочный диск с установленным Grub, с него-то как раз и будем грузить установленную Windows.
3. Подготовить файл vmdk (Virtual Machine Disk), ссылающийся на наш физический диск (сам физический диск с Windows не модифицируется и с него можно будет загружаться как обычно).
4. Создать виртуальную машину и установить ей жесткий диск vmdk и созданный нами загрузочный диск.

А теперь более подробно по шагам.

1. Устанавливаем VirtualBox-OSE.

 yum install VirtualBox-OSE

2. Создаем папку в домашнем каталоге.

 mkdir -p iso/boot/grub

3. Копируем в папку 2 файла grub.conf и stage2_eltorito.

 cp /usr/share/grub/i386-redhat/stage2_eltorito iso/boot/grub
 cp /boot/grub/grub.conf iso/boot/grub

4. Редактируем grub.conf.

Так как Windows уже стоит на физическом разделе, то в этом файле должна быть запись вида:

 title Windows Vista
        rootnoverify (hd0,1)
        chainloader +1

Если ее нет, то необходимо добавить с указанием физического раздела, куда у Вас установлена Windows [у меня это (hd0,1)].

Изменяем значение параметра default чтобы Windows Vista/XP запускалась по умолчанию. Это порядковый номер в списке операционных, систем нумерация начинается с 0.

Остальные имеющиеся операционные системы можно закоментировать.

 grub.conf generated by anaconda
 #
 # Note that you do not have to rerun grub after making changes to this file
 # NOTICE:  You have a /boot partition.  This means that
 #          all kernel and initrd paths are relative to /boot/, eg.
 #          root (hd0,2)
 #          kernel /vmlinuz-version ro root=/dev/sda6
 #          initrd /initrd-[generic-]version.img
 #boot=/dev/sda
 default=0
 timeout=5
 splashimage=(hd0,2)/grub/splash.xpm.gz
 hiddenmenu
 # title Fedora (2.6.35.6-48.fc14.i686)
 #       root (hd0,2)
 #       kernel /vmlinuz-2.6.35.6-48.fc14.i686 ro root=UUID=bdf9ac6d-fa1d-451f-a45d-d526c3eb3bc4 rd_NO_LU$
 #       initrd /initramfs-2.6.35.6-48.fc14.i686.img
 # title Fedora (2.6.35.6-45.fc14.i686)
 #       root (hd0,2)
 #       kernel /vmlinuz-2.6.35.6-45.fc14.i686 ro root=UUID=bdf9ac6d-fa1d-451f-a45d-d526c3eb3bc4 rd_NO_LU$
 #       initrd /initramfs-2.6.35.6-45.fc14.i686.img
 title Windows Vista
        rootnoverify (hd0,1)
        chainloader +1

5. Cоздаем iso образ загручоного диска.

mkisofs -R -b iso/boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso

6. Cоздаем файл vmdk ссылающийся на логический диск, куда установлена Windows Vista.

VBoxManage internalcommands createrawvmdk -filename ~/.VirtualBox/WinHD.vmdk -rawdisk /dev/sda -partitions 2 -relative -register

7. Добавляем в VirtualBox виртуальную машину.

Выбираем в меню Machine->New...

Добавляем в VirtualBox виртуальную машину

Задаем имя виртуальной машины и выбираем операционную систему Windows Vista. Нажимаем Next.

Добавляем в VirtualBox виртуальную машину

Задаем объем оперативной памяти. Нажимаем Next.

Добавляем в VirtualBox виртуальную машину

Выбираем созданный нами диск. Нажимаем Next.

Добавляем в VirtualBox виртуальную машину

Нажимаем Finish.

Добавляем в VirtualBox виртуальную машину

9. Добавляем в File->Virtual Media Manager->CD/DVD Images наш образ grub.iso.

10. В свойствах виртуальной машины на закладке Storage устанавливаем в CD/DVD привод образ grub.iso

Нажимаем ОК и стартуем виртуальную машину.

Добавляем в VirtualBox виртуальную машину

Все, можно пользоваться машиной.

P.S. Замечены некоторые неудобства работы, а именно через некоторое время Windows начинает требовать повторную активацию, хотя в безопасном режиме работает нормально. Мне безопасного режима хватает чтобы сделать все мои интернет-банковские дела:)

Роман
Участник проекта OpenAdmins

Блог: Использование linux в офисе

Мне вот не совсем понятно... После проделывания данного трюка, можно ли будет винду загрузить как обычно, т.е. не в виртуалке?

Да, конечно. Компьютер работает в штатном режиме и можно загрузить винду обычным способом.

Ух, круто. Давно искал что то подобное.

Меня это тоже в первую очередь заинтересовало :) Получается, что сам раздел с Windows в процессе настройки мы не трогаем, только грузим VirtualBox с него, т.е. после настройки можно продолжать запускать Windows и как обычно тоже. Хотя не собъется ли активация -- это вопрос... у нас ведь легальная Windows, верно? :)

У меня активация на физ. машине не сбивается, но повторную активацию при запуске в виртуалке просит провести. Ввиду того, что операционка лицензионная от ASUS (вместо с ноутбуком шла), то повторная активация не удалась, сообщив что-то вроде: можно активировать только на оборудовании от ASUS.

Спасибо. Действительно, то что надо. Тоже на ноуте винда шла в комплекте. Иногда бывает нужна для чего-либо, приходилось ребутаться. Теперь все будет на много лучше и удобнее. Спасибо :)

Если подскажете что нужно поменять, чтобы в Ubuntu этот трюк повторить (тут grub2) то я вас прям расцалую!

iso образ смог создать grub-mkrescue --output=grub2-boot-nm.iso iso

А вот создать vmdk не получилось т.к. требует рута


Error opening the raw disk '/dev/sda': VERR_ACCESS_DENIED The raw disk vmdk file was not created

Неужто под рутом только можно пускать?

1. Фактура.ру вполне себе работает под линухом - вебприложение же 2. один из самых убогих банк-клиентов

Если есть возможность поделитесь опытом настройки. Может вообще смогу от Винды отказаться.

Разве там не ActiveX используется? Работать не будет.

Фактура.ру не будет работать в nix-ах. Так как для работы необходи браузер Enternet Explorer с установленными компонентом безопасности (так называемое приложение "интернет банк").

Пробовал устанавливать Enternet Explorer через wine, все попытки установить компонент безопасности тщетны.

Выход - только виртуализация Windows системы

Я тоже много времени убил на настройку под wine и никак, поэтому решил завиртуализироваться.

При загрузке VirtualBox вижу только командную строку GRUB-а, не могу понять, как стартовать Windows XP на загрузку.

При команде boot выдает ошибку Error 8: kernel must be loaded before booting

Мне кажется необходимо проверить настройки grub, загружаться необходимо с iso шника, который подготовили на 5-ом шаге. Вообще при загрузке должно быть меню grub.

Да в этом дело и было. Я долго пытался разобраться с созданием загрузчика в ISO, но что-то не дался мне он...

Решение наел обходное, хотя и не такое элегантное

VBoxManage internalcommands createrawvmdk -filename ~/.VirtualBox/FullHD.vmdk -rawdisk /dev/sda -relative ^Cegister

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

Есть у этого способа минусы: 1. Приходится выбирать Windows XP вручную (по умолчанию openSUSE стоит) 2. При загрузке Виртуальной машины с того же раздела, что и хост, она может себя повести непредсказуема (требуется осторожность). Хотя по факту загрузка просто не идет. Тогда делаем ребут и пункт 1.

Да, у меня раньше так было. Решил сделать более безопасно, а то несколько раз промахивался и грузился с той же партции с которой работал Linux, загрузка шла, но конца ни разу не дожидался,т.к. резкий reboot делал.

Но это тоже неплохой вариант, более быстро можно начать работать в виртуалке с Windows.

Выяснился еще один очень неприятный минус такого способа... У меня загнал Windows в виртуальной машине, решил переустановить. Затер загрузчик GRUB, так как виртуальная машина имела доступ ко всему жесткому диску.

Теперь нужно подумать... Есть ли возможность установить отдельный загрузчик в партицию с Windows XP? Допустим тот же grub.

Если бы ясмог, то тогда можно было бы создать RAW диск только для партиции с Виндой. Тогда не надо было бы опасаться за судьбу загрузчика Хоста.

в ubuntu пробовал запустить qemu /dev/sdx с вин7 сразу заработало как говориться из коробоки без лишних телодвижений, это как альтернативный способ

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

Собственно только из-за этого последнего абзаца и пришёл по ссылке с опеннета :) Т.е. именно это меня интересовало, как поведёт себя венда.

Тут штука следующая. Венда при активации ориентируется на реальное железо у вас установленное + серийник. Подробности можно найти в 100500тыщустраничной документации (мукулатуре) от микрософта. В жур. Системный администратор тоже как-то описавали этот процесс. Ну не суть. Мне удалось завести венду с восстановочного диска от своего нетбука в вертуалке (не как у вас, а именно полностью виртуализировать венду), активировать разумеется не получилось. Собирался попробывать следующее: сперва установить венду на реальное железо, активировать её, а потом уже мигрировать её в виртуальную машину ("преобразовать"; такое возможно, инструментарием самого же виртуалбокса, ещё есть тулза от ксена). Но ваш последний постскриптум даёт понять, что затея полностью безнадёжна :)

А как быть в системах типа Кубунту, где нет файла stage2_eltorito?

Создаем директорию:
$ mkdir -p ~/.iso/boot/grub
В этой директории любым способом создал файл grub.cfg следующего содержания:
(Раздел menuentry "Windows 7" скопировать со своего grub.cfg, расположенного по адресу /boot/grub/)

###
insmod part_msdos

set default=0

set timeout=0

menuentry "Windows 7 (loader) (on /dev/sda3)" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(/dev/sda,msdos3)'
search --no-floppy --fs-uuid --set=root C070671099FC2625
chainloader +1
}
###

Здесь убрано все лишнее, GRUB проскакивает быстро и незаметно.

Создаем iso-образ с GRUB2:
$ grub-mkrescue --output=/home/$USER/.iso/grub.iso /home/$USER/.iso/
Создаем VMDK-образ:
$ VBoxManage internalcommands createrawvmdk -filename /home/$USER/VirtualBox/Windows7.vmdk -rawdisk /dev/sda -partitions 3,5 -relative