Cellar Door

12 августа 2006

Устанавливаем Xen

Позволю себе проспустить теорию, на которой основываются техники виртуализации, и после краткого описания терминов перейду к делу. Итак, Xen - технология паравиртуализации (называемая также supervisor), предполагающая либо модификацию ядер гостевых ОС, либо аппаратную поддержку виртуализации со стороны CPU (Vanderpool, Pacifica). Без специальной аппаратной поддержки в качестве гостевых ОС могут выступать Free/NetBSD, GNU/Linux, Solaris, а с нею - также и Windows. В архитектуре Xen управление ресурами аппаратуры осуществляется на самом нижнем уровне, в административном домене Domain 0 (или Dom0), где запущен xend, а гостевые ОС работают в Domain U, DomU.

Нижеследующие инструкции ориентированы на Debian Etch, но, может с некоторыми правками, применимы к любой Debian/Ubuntu системе.

Устанавливаем пакеты собственно Xen и ядро:
# apt-get install xen-hypervisor-3.0-i386 xen-utils-3.0 xen-docs-3.0 linux-image-2.6-xen-k7 libc6-xen
Здесь и далее k7 следует заменить на название семейства Вашего CPU. Доступны также PAE-версии ядра.

Убедитесь, что установлены и следующие программы:
# apt-get install bridge-utils iproute sysfsutils,
а hotplug, наоборот, удалён.

Следующий шаг необходим:
# mv /lib/tls/ /lib/tls.disabled

Создаём initrd
# cd /boot
# mkinitramfs -o /boot/initrd.img-2.6.16-2-xen-k7 2.6.16-2-xen-k7

В файле /etc/xen/xend-config.sxp должны быть раскомментированы строки (network-script network-bridge) (номер строки 73) и (vif-script vif-bridge) (строка 104).

Наконец, добавляем секцию Xen в конфиг grub:
title Xen 3.0 / Debian GNU/Linux
kernel (hd1,4)/boot/xen-3.0-i386.gz console=vga
module (hd1,4)/boot/vmlinuz-2.6.16-2-xen-k7 root=/dev/hdb5 ro console=tty0 vga=791
module (hd1,4)/boot/initrd.img-2.6.16-2-xen-k7
boot

После прочтения официальной документации некоторая неясность возникает вследствие того, что в Debian ядро, которе мы установили, подходит для Dom0 и DomU одновременно. Можно построить разные ядра для Xen0 и XenU, взяв исходники на http://www.xensource.com/downloads/, но вряд ли выигрыш в быстродействии оправдает расход времени. При использовании же единого ядра главное не забывать указывать наш initrd в параметре ramdisk в конфиге каждой гостевой ОС. Всё общение между "хозяином" и гостевой ОС происходит по сети через ethernet-bridge. А чтобы "поделить" одну видеокарту между несколькими доменами (и соответственно запускать в них свои экземпляры X-сервера), надо настроить VNC или FreeNX.

Итак, после успешной перезагрузки (нам надо, чтобы работал демон xend и присутствовали мосты в выводе команды brctl show) приступаем к запуску гостевой ОС. Для начала проще воспользоваться одним из готовых образов с сайта jailtime.org.
# mkdir -p /xen/slackware
# mv slackware.10-2.20060210.img.tgz /xen/slackware
# cd /xen/slackware
# tar -xvzf slackware.10-2.20060210.img.tgz

Смотрим, чтобы в файле slackware.10-2.xen.cfg опции kernel и ramdisk указывали на текующие ядро и initrd, а в строке disk был правильно указан путь к образу корневого раздела гостевой ОС и свопа.

Запускаем гостевую ОС:
xm create slackware.10-2.xen.cfg -c
Список работающих систем можно посмотреть командой xm list или xentop. Отсоединиться от консоли можно нажав "Ctrl+]", зайти обратно - подсмотрев ID в выводе xm list и скомандовав xm console ID. Остановитьгостевую ОС можно командой xm shutdown Name, где Name - её имя в выводе xm list.

Для нормального функционирования гостевой ОС остаётся скопировать в её ФС каталог /lib/modules/2.6.16-2-xen-k7 мастера:
# mkdir /mnt/slackware<
# mount -o loop slackware.10-2.img /mnt/slackware
# cp -R /lib/modules/2.6.16-2-xen-k7 /mnt/slackware/lib/modules

Чтобы избежать сообщений типа
INIT: Entering runlevel: 5
INIT: Id "1" respawning too fast: disabled for 5 minutes
выполняем следующие действия:
# cd /mnt/slackware/dev
# ./MAKEDEV tty1 tty2 tty3 tty4 tty5 tty6
... и размонтируем ФС.

За кадром остались такие интересные возможности, как распределение аппаратных ресурсов между гостевыми ОС, "живая миграция" виртуальных машин с сервера на сервер, sHype/Xen Access Control, но может я ещё вернусь к этой теме :)

Полезные ссылки:
  1. Статья "The Perfect Xen 3.0 Setup for Debian" (в ней описано пострение ядер Dom0 и DomU из исходников и установка Debian также и в качестве гостевой ОС): http://www.howtoforge.com/book/print/1169

  2. HOWTO Xen and Gentoo - Gentoo Linux Wiki: http://gentoo-wiki.com/Xen

  3. Xen User's Guide с полным описанием возможностей Xen: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/readmes/user/user.html

  4. Описание некоторых конфигураций, в которых используют Xen, на Xen Wiki: http://wiki.xensource.com/xenwiki/CoolConfigurations

  5. В частности, David Muench порадовал конфигурацией со следующими DomU доменами: внешний и внутренний веб-сервера, сервер СУБД, сервер Asterisk, сервер MythTV с выделенными ему тремя платами кодирования MPEG-2 и карточкой HDTV. Всё это работат на Celeron D 2.4GHz с 1.5GB ОЗУ :D