суббота, 19 апреля 2008 г.

VirtualBox — то, что действительно работает

В этой статье я проведу как поверхностный общий обзор виртуальной машины VirtualBox, так и углублюсь в некоторые подробности настройки сетевого интерфейса, изменения прав доступа к usbfs, а также опишу решения некоторых проблем, которые могут возникнуть при использовании VirtualBox.

Предисловие


С покупкой Core 2 Duo я стал располагать действительно быстрой машиной, на которой можно без особого труда запускать различные гостевые виртуальные ОС. Так что выхода Fedora 7 я ждал с нетерпеливым желанием опробовать новый KVM. Также хотелось опробовать и kqemu, и xen, и вообще поискать замену VMware Workstation, которой пользовался с незапамятных времён. Ведь по разным блогам ходили удивительные описания чудесного быстродействия всего чего угодно по отношению к проприетарной VMware. Честно говоря я не питал иллюзий относительно скорости работы, но надеялся, что пользоваться будет можно. Думал это с некой уверенностью, читая блог Михаила Конника (aka Virens) Записки дебианщика.

Однако светлое будущее оказалось немного дальше чем я думал. Во-первых KVM напрочь отказался работать с ускоряющем модулем на Core 2 Duo, чему я в каком-то мейллисте нашёл подтверждение (с вердиктом не исправляется). Чем это было вызвано меня уже мало интересовало, я стал пробовать другие эмуляторы.

Я обратил свой взор на Kqemu. Но был абсолютно разочарован. Гостевая ОС с Kubuntu 7.04 стартовала 10 минут(!). Да и скорость работы оставляла желать лучшего. Я не знаю что происходит, но в любом случае, когда после запуска я ещё и не получил NAT из коробки, я окончательно понял что к Kqemu больше не притронусь.

Я попробовал Xen, но он сразу скушал 100% CPU, а так как в любом случае мне не нужно поднимать в эмуляторе постоянно работающие машины, то использовать Xen, со своим ядром довольно не оправдано.

Да, мне даже стало казаться, что замены VMware просто не существует и тогда я решил запустить эту самую Workstation 6, так как она мне понадобилась. Каким же было моё удивление, когда после запуска гостевой системы все зависло, да так что пришлось прибегнуть к клавише Reset. Поиск в интернете показал, что да, подобные проблемы бывают на Core 2 Duo на 64 разрядном linux 2.6.21 и решения у них не существует. Мне стало довольно грустно, потому что на работе на слабеньком AMD X2 3800+ VMware работала.

Оставался один вариант, да, я где-то видел и что-то слышал о VirtualBox. К тому же я нашёл все в том же блоге Virens’а статью о VirtualBox. Статья правда старая и базируется на VirtualBox 1.3.6, так что устарела на 200%.

Где взять, как настроить


VirtualBox имеет открытые исходники, распространяемые под лицензией GPL2. Бинарные сборки доступные для всех популярных Linux дистрибутивов, Windows и OS X распространяются под своей собственной лицензией (если кого-то этот вопрос интересует более развёрнуто, то предлагаю изучить его самостоятельно, так как мне это не интересно). Скачать бинарную сборку можно на сайте virtualbox.org.

Далее просто устанавливаем пакет. Модуль под текущее ядро будет собран автоматически (вам нужны будут только компилятор и заголовки ядра). В последствии при обновлении ядра необходимо просто запустить команду

/etc/init.d/vboxdrv setup

и модуль ядра соберётся автоматически.

Посе установки пакета нам необходимо добавить пользователя из-под которого будет работать VirtualBox в группу vboxusers командой

gpasswd -a пользователь vboxusers

Перелогиниваемся и запускаем команду VirtualBox.

Одно важное замечание. VirtualBox конфликтует с модулями ядра для виртуальной машины KVM. По этому вам следует удалить пакет kvm или сделать так, чтобы модули ядра не загружались автоматически.

Настройка гостевой ОС


VirtualBox имеет такой же дружественный интерфейс как VMware, но может управляться и из командой строки посредством команды VBoxManage, которую я описывать не буду.

Также скажу, что VirtualBox имеет внушительную документацию на 162 страницы, в которой действительно есть много чего познавательного и полезного и даже с примерами.

После запуска, на экране появится главное окно VirtualBox, которое даже русифицировано. Сперва необходимо создать новую виртуальную машину. Нажимает на кнопку Создать и следуем инструкциям. Указываем объем памяти и создаём виртуальный жёсткий диск.

VirtualBox
Главное окно VirtualBox

Виртуальный жёсткий диск создаётся в собственном формате vdi. Так же заявлена поддержка формата vmdk, то есть формата VMware, но пока данная возможность вроде бы не работает. В принципе можно попытаться конвертировать образ vmdk в raw, а затем в vdi, но не будем заострять на этом внимание, так как подводных камней там не меньше, хотя в сети можно найти удачные примеры конвертации.

После быстрой настройки, нужно открыть Общие настройки (щёлкнуть в правой части окна по одноимённой ссылки) и выставить размер видеопамяти, а также отключить или наоборот включить (если необходимо) ACPI и IO ACPI.

Также можете включить Аудио и изменить параметры сети. По умолчанию используется NAT (который работает). В секции CD/DVD-ROM следует подключить либо настоящий привод, либо загрузочный образ диска. Тоже можно сделать с дисководом.

После этого осталось всего лишь запустить нашу виртуальную машину.

Guest OS
Гостевая операционная система

Работа VirtualBox


Я был крайне удивлён, но производительность и скорость работы VirtualBox просто великолепны. Да, VirtualBox любит кушать процессор, и кушает его внушительно, вот только на Core 2 Duo E6600 “тормозов” совсем не наблюдается как внутри гостевой системы, так и на самом компьютере, на AMD X2 3800+ немного “притормаживает”, но это все детский лепет по сравнению с VMware. Да, графическая эмуляция в VirtualBox сделана на высоком уровне.

Звук тоже передаётся без помех. Что касается сети, то если выставлен NAT, то всё работает из коробки. Если же мы захотим не просто баловаться с виртуализацией, а серьёзно работать с ней, то в руководстве на 56 странице подробно описывается как настроить host interface на примере Ubuntu/Debina, Red Hat/Fedora, openSUSE. Настройку для Fedora см. ниже.

Настройка сети


Если нам нужно использовать для настройки сети не NAT, а host interface с явным IP адресом, то нужно проделать следующие операции. Договоримся, что все команды будем отдавать из-под пользователя root, а не из под sudo. Так как последняя команда не пройдёт из-под sudo.

Первым делом нам понадобится пакет bridge-utils. Далее создаём файл /etc/sysconfig/network-scripts/ifcfg-br0 следующего содержания:

DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes

Добавляем в файл /etc/sysconfig/network-scripts/ifcfg-eth0 последней строкой BRIDGE=br0 и перезапускаем сеть

/etc/init.d/network restart

После этого отдаём команду

VBoxAddIF vbox0 пользователь(из-под которого будет запускаться VirtualBox) br0

Осталось только выбрать в настройках сети вместо NAT хост-интерфейс и в поле “Имя интерфейса” указать vbox0. Последнюю команду судя по всему придётся пускать каждый раз после перезагрузки системы (не гостевой).

Настройка USB


Здесь нужно начать вот с чего. VirtualBox получает доступ к USB устройствам через usbfs. А доступа обычному пользователю к ней нет. В Fedora (7?) отсутствует пользователь usbfs (и все файлы и каталоги имеют uid,gid=0), однако есть пользователь users с gid 100. Сперва добавим себя в его группу (и не забудем перелогинится):
gpasswd -a пользователь users

Дальше веселее. Нужно сделать так, чтобы все файлы и каталоги в /proc/bus/usb имели gid 100. Монтируется эта файловая система в Fedora из /etc/rc.sysinit. Прямо в этом файле можно найти упоминание об usbfs (там 2 строки) и подправить их следующим образом

mount -o busgid=100,devgid=100 -n -t usbfs /proc/bus/usb /proc/bus/usb

Но так как этот файл всё-таки править не следует, то лучше в /etc/rc.local добавить строчку

mount -o busgid=100,devgid=100,remount -n -t usbfs /proc/bus/usb /proc/bus/usb

Если вы редко подключаете USB к гостевым ОС, то вполне можно просто отдавать последнюю команду по мере необходимости.

После этого, подключите нужное устройство в USB, в настройках гостевой виртуальной машины включите поддержку USB и добавьте нужное устройство щёлкнув по зелёному плюсику (+). Вообще-то не особо удобно в отличии от VMware, но с другой стороны не так уж и сложно.

Установка “Дополнения гостевой ОС”


Для правильного разрешения экрана, для автоматического захвата мыши, для общего буфера обмена (не заработало, а читать инструкцию и лазить у них по сайту я поленился) можно поставить эти дополнения. Для установки выберите в меню гостевой ОС пункт Устройства / Установить Дополнения гостевой ОС, далее просто подмонтируйте CD-привод. На нем будут лежать файлы для Windows и Linux. Если вы эмулируете Linux, то обязательно пропишите в /etc/X11/xorg.conf
Section "ServerFlags"
Option "Xinerama" "true"
EndSection

После этого можете смело запускать файл с дополнениями для вашей гостевой ОС. В Linux вам потребуются заголовки ядра (то что в Fedora называется kernel-devel) и компилятор gcc.

Что умеет и что не умеет VirtualBox


Конечно трудно описать все возможности VirtualBox, да ещё и с примерами, но скажу, что он может управляться из командной строки. Все действия которые можно проделать через графический интерфейс можно выполнить из терминала.

В качестве гостевых ОС заявлены Linux 2.4, Linux 2.6, DOS, Все Windows, OS/2 {3, 4, 4.5}, FreeBSD, OpenBSD, NetBSD, Netware, Solaris и L4.

А вот запускать 64-х битные версии гостевых операционных систем VirtualBox пока не умеет.

В общем я советую полистать всё то же руководство пользователя.

Горячие клавиши и горячие “строки меню”


И в VMware и в Qemu для выхода из гостевой ОС используется клавиатурная комбинация Ctrl+Alt. В VirtualBox это правый Ctrl (либо то, что определите сами, но только одна клавиша). И у этого есть свой смысл, так как с этой клавишей (называется она Host) связаны многие клавиатурные комбинации. В принципе если вы загляните в меню, то увидите их сами. Удобно, можно послать Ctrl+Alt+Backspace или сделать полноэкранный режим.

Переключится в текстовую консоль из X’ов в гостевом Linux можно при помощи комбинации Host+1 (или вместо 1 другой номер консоли).

Также можно на лету подключить образ CD-диска, что довольно удобно.

Заключение


В начале этой большой статьи я писал о том, что оказался в затруднительном положении, так как ни одна из известных мне до этого систем эмуляции не работала у меня на домашнем компьютере. Исключением был Kqemu, но с таким подходом к конечному пользователю он мне не особо был и будет интересен (В чем причина? В Core 2 Duo, в x86_64, в Fedora, в 2.6.21? Думаю что во всем понемногу, и конечно же в самом Kqemu).

В этой статье я описал то, что у меня действительно работает, и работает очень быстро. Я пускал VirtualBox в Windows XP на ноутбуке с процессором Pentium M 1200 и скорость работы меня также очень поразила.

Похоже я действительно нашёл полноценную замену VMware для моих скромных нужд.

* | * опубликовано: Tigro, 7. Июль 2007, 22:48

2 комментария:

Unknown комментирует...

Впервые попробовал поставить Linux на VirtualBox все работает замечательно, кроме разрешения экрана. Можно по-подробнее, - что такое /etc/X11/xorg.conf и как до него добраться чтобы исправить мою проблему?

virens комментирует...

2 Александр пишет...
Александр, тут вам совершенно точно не помогут: тот, кто держит этот блог - бездумный копипастер.

Может быть, вам поможет эта запись, а если нет - пишите мне на mydebianblog джимейл точка ком.