Особенности использования VirtualBox в Ubuntu 10.10

Мое отношение к VirtualBox в Ubuntu двоякое. Наличие несвободных компонент и факт, что это теперь собственность Oracle, а они, в последнее время, хорошо подтрудлись над своей репутацией конченых копирастов, заставляет меня сомневаться в светлом будущем данного продукта. С другой стороны, альтернатива в виде Qemu, прямо скажем, сильно отстает: интеграция с десктопом отсутствует, как класс, а выпиленый в версии 0.12 kqemu, делает её непригодной для использования на старых машинах, где не работает KVM.

Получается, как в анекдоте: "ежики плакали, кололись, но продолжали жрать кактус...". Дальше я постараюсь описать свой опыт того, как это делать сподручнее. Может кому пригодится.

Установка linux-headers

В Ubuntu можно получить ситуацию, когда установленная версия linux-headers не совпадает с установленной версией linux-image. В результате, VirtualBox перестает работать и ругается на отсутствие модуля vboxdrv.

В принципе, вы можете и не столкнуться с этой проблемой, лично я, нарвался на нее по собственной "зауми". Не помню начиная с какой версии (в 10.04 эта "фича" уже была), Ubuntu настойчиво предлагает задействовать возможности обеспечения безопасности заложенные в процессор. В первую очередь, это касается возможности запрещать выполнение кода в некоторых областях памяти (Non-Executable Memory). Для этого предлагается заменить ядро linux-image-*-generic используемое по умолчанию, на linux-image-*-generic-pae.

Сама замена ядра проходит гладко, но VirtualBox магическим образом перестает работать. Происходит это потому, что для VirtualBox требуется собрать свой модуль ядра vboxdrv. Этим занимается пакет dkms, которому необходима правильная версия linux-headers. Конкретно, сборка модулей для linux-image-*-generic-pae требует наличия linux-headers-*-generic-pae. К сожалению, зависимости между пакетами прописаны так, что автоматически нужные пакеты не устанавливаются (LP #673349).

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

sudo aptitude install linux-headers-server
Работа с физическими дисками

В главе Advanced storage configuration руководства пользователя описано, как в виртуальной машине VirtualBox можно работать с физическими дисками. Для меня эта возможность относится к разряду жизненно необходимых: эксперименты с загрузчиком и multi-boot виртуализация без нее практически невозможны.

К сожалению, вопрос предоставления виртуальной машине доступа к диску оставлен авторами документации, как впрочем и сопровождающими пакета в Ubuntu, в качестве домашнего задания. В Ubuntu прямой доступ к диску имеют root и члены групы disk. В принципе, раз уж виртуальная машина будет иметь прямой доступ к дискам, сильно возражать против запуска от root смысла нет, однако, я всеже предпочитаю обходиться минимально необходимыми привилегиями, и ограничился добавлением в sudoers следующей строчки:

myuser ALL=(:disk) /usr/bin/virtualbox,/usr/bin/vboxmanage

Команды добавление физического диска и запуск VirtualBox в результате выглядят так:

sudo -g disk \
vboxmanage internalcommands createrawvmdk \
-filename ~/.VirtualBox/HardDisks/host-sda.vmdk \
-rawdisk /dev/sda \
-register

sudo -g disk virtualbox

Кстати, перед запуском VirtualBox невредно удостовериться в отсутсвии загруженных модулей KVM, иначе запустить виртуальную машину не получится.

lsmod | grep kvm
Снижение нагрузки на процессор

Если подумать, то проблема дурная. Симптомом является то, что VirtualBox на 100% загружает одно из ядер процессора, даже когда гостевая ОС показывает всего 1-2% загрузки. Я словил такую проблему в Ubuntu с Windows XP в качестве гостевой ОС.

Заскок известен с 2008 года (ссылка). Вроде, было открыто несколько багов, врочем безрезультатных, но, как минимум, до версии 3.2.8, входящей в Ubuntu 10.10, решение остается все тем же. Если запустить еще одну пустую виртуальную машину (ей даже диск не нужен, можно поставить на паузу, сразу при включении), загрузка процессора тут же падает до нуля.

В чем причина такого поведения, я так и не понял. Ходят слухи, что дело в постоянном переносе процесса VirtualBox с одного процессора на другой. Если так то, должны бы работать другие решения, типа привязки VM к определенному процессору/ядру с помощью taskset, но у меня они не сработали. Почему? Пока, не разбирался.

Настройка клавиатуры

Наконец, имеет смысл уделить внимание настройке горячих клавиш. В общем-то мелочь, но на удобстве сказывается заметно.

Первое, что следует сделать это заменить Host Key на что-то более вменяемое, чем правый Ctrl. Более дурацкое значение по умолчанию придумать сложно, конфликт с горячими плавишами внутри гостевой машины обеспечен.

Я обычно настраиваю Host Key = LWin. Сделать можно это в меню: Файл → Настройки → Ввод.

Хорошо бы еще настроить фильтр, какие комбинации клавиш пропускать в виртуальную машину, а какие нет. (Скажите, например, зачем передавать в гостевую OS команду блокировки консоли (Win+L)? Чтобы лишний раз ввести пароль?)

К сожалению, этой возможность в ближайшее время ждать, похоже, не приходится (ссылка).

RSS-материал