Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Совместное использование KVM и VirtualBox

Оригинал: Using KVM and VirtualBox side by side
Автор: Igor Ljubuncic
Дата публикации: 18 июня 2011 года
Перевод: А. Кривошей
Дата перевода: июль 2011 г.
Это 4-ая статья из серии, посвященной KVM. Предыдущие статьи:

По общему мнению KVM и VirtualBox не могут сосуществовать на одной операционной системе. Точнее VirtualBox не сможет запуститься, если модули KVM загружены в оперативную память. В то же время KVM прекрасно работает при наличии установленного VirtualBox, поэтому проблема эта односторонняя. Решение ее также довольно простое. К сожалению, имеется огромное количество руководств, рекомендующих удалить одну из программ. Некоторые другие предлагают воспользоваться rmmod, однако они ничего не говорят о том, как потом вернуть все обратно.
Я покажу вам, как совместно использовать KVM и VirtualBox без удаления одной из программ, или перезагрузки для переключения между ними. Вы узнаете, как дезактивировать или активировать одну из программ без перезагрузки, чтобы другая могла работать.

Симптом - VirtualBox не работает

При попытке запуска VirtualBox вы можете увидеть следующее сообщение об ошибке:

Сообщение об ошибке VirtualBox

В нем говорится следующее: "VirtualBox не может работать в режиме VMX root. Пожалуйста, деактивируйте KVM kernel extension, перекомпилируйте ваше ядро и перезагрузитесь". Пугающее сообщение. Однако ничего не нужно перекомпилировать. Решение проблемы займет пять секунд и будет абсолютно безболезненным.

Описание проблемы

Как уже говорилось, VirtualBox and KVM не могут работать вместе. Это означает, что необходимо деактивировать KVM перед запуском VirtualBox. Вопрос в том, как это сделать. Ответ - путем загрузки и удаления модулей ядра. Операционная система Linux поддерживает загрузку и удаление модулей ядра из оперативной памяти на лету, без перезагрузки. Для этого мы будем использовать команды insmod и rmmod.

Удаление модулей

Сначала воспользуемся командой lsmod, чтобы посмотреть, какие модули загружены в память:

Модули VirtualBox

Модули KVM

Как вы можете видеть, VirtualBox использует драйверы vboxdrv и vboxnetflt, в то время как KVM использует драйверы kvm и kvm_intel. Обратите внимание: kvm_intel предназначен специально для архитектуры Intel. Для AMD имеется kvm_amd.
Нам необходимо выгрузить из памяти модули KVM.

$ /sbin/rmmod kvm_intel
$ /sbin/rmmod kvm

Выгрузка модулей KVM

работа модулей VirtualBox

Возникает большой вопрос - теперь KVM деактивирована, как заставить ее снова работать?
Этим мы сейчас и займемся.

Загрузка модулей

Мы можем загрузить модули так же легко, как выгрузили их. Для этого необходимо определить, где они находятся на жестком диске (можно также попробовать команду modprobe).
Для поиска модулей используем следующие команды (updatedb нужно запускать с помощью sudo, или из-под root):

$ updatedb
$ locate kvm

Как правило, находится очень много файлов, поэтому поиск можно ограничить kvm.ko и kvm-intel.ko.

поиск модулей VirtualBox

А теперь загрузим модули, соответствующие вашей версии ядра. Ее можно проверить с помощью команды uname -r.

$ /sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm.ko
$ /sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm-intel.ko

Скриншот представлен ниже. Во-первых, проверяем наличие модуля kvm. Команда lsmod показала, что он не загружен. Теперь мы загружаем модули kvm и снова проверяем их наличие с помощью команды lsmod.
Обратите внимание, что команды на скриншоте несколько отличаются от команд, представленных выше. Я предположил, что /sbin имеется в переменной PATH, поэтому использовал более краткую форму команды. В то же время я использовал полный путь к модулю, чтобы показать, как это может выглядеть. Если вы намереваетесь написать скрипт для автоматизации этих действий, то необходимо использовать полные пути, а для подстановки команд рекомендуется использовать обратный штрих.

загрузка модулей VirtualBox

Скрипты

Пришло время автоматизировать все наши действия. Для этого нам нужны два скрипта. Один выгружает модули KVM, другой загружает их. Если подходить к делу основательно, то нужны также скрипты для остановки служб VirtualBox при запуске KVM и для их последующего запуска.
Пример работы с драйверами VirtualBox:

статус модулей VirtualBox

остановка модулей VirtualBox

Таким образом, скрипт для активации VirtualBox и отключения KVM выглядит следующим образом:

#!/bin/bash
/sbin/rmmod kvm_intel
/sbin/rmmod kvm
/etc/init.d/vboxdrv start

И скрипт для запуска KVM и отключения VirtualBox:

#!/bin/bash
/etc/init.d/vboxdrv stop
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm.ko
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm-intel.ko

Для машин AMD замените kvm-intel.ko на kvm-amd.ko. Обратите внимание, что неплохо было бы предусмотреть в скрипте проверку попытки запуска уже запущенной службы. Я этого не стал сделал, пусть это будет вашим домашним заданием.
Кроме всего прочего, необходимо также обратить внимание на архитектуру процессора. У большинства пользователей, использующих архитектуру x86 (x86_64) скрипты будут работать, но для других архитектур, например SPARC, ARM, Itanium, скрипты необходимо будет редактировать.
Теперь создайте ярлыки для скриптов на рабочем столе и все готово. Использование uname вместо определенной версии ядра гарантирует, что ваши скрипты будут работать даже после обновления ядра.

Заключение

Как вы могли видеть, реальность не столь сурова, как представлялось ранее. В данном руководстве показаны простые способы заставить мирно сосуществовать VirtualBox и KVM, без удаления одной из программ и постоянных перезагрузок. Архитектура Linux позволяет загружать модули на лету, поэтому единственная процедура, для которой действительно необходима перезагрузка - это обновление ядра системы. В следущих руководствах мы продолжим знакомство с возможностями KVM.