Xen

Материал из ALT Linux Wiki
42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.


Введение

Xen является систему паравиртуализации. Тоесть системой позволяюзий запускать несколько ядер операционных систем специального вида на одной реальной машине. Xen сотоит из 3х частей:

Hypervisor

Это собтвенно xen. Это маленкое ядро(в разы меньше чем ядро опероационной системы) загружаемое первым и управляющиее работой виртуальных машин. Обычно находиться в /boot/xen.gz. Гипервизор исполняется в круге 0. Он умеет упралять только памятью, процессором и частично ACPI. Также гипервизор предоставлят API гипервызовов(hypercall) с помощью которых ядра операционных систем в виртуальных машинах могут с ним общаться. Загрузившись гипервизор загружает ядро dom0.

Domain 0

Он же dom0 - перевлигерованная виртуальная машина, имющая доступ к практически всему железу и имеющая права давать команду гипервизуроу запустить новые виртуальные машины. На практитке это обычная Linux система, единственное чем она ограничена это объёмом памяти. Обычно в такой системе установлен минимальный набор программ, демон управления xen, утилиты для упраления xen, утилиты для создания виртуальных машин, и программный сетевой мост (bridge) который позволяет другим виртуальным машинам поподать в сеть. Поскольку xen предоставляет машинам виртуальные жесткие диски, эти диски экспортируются из dom0, обычно это либо файлы подключеные через loopback/blktap или LVM тома.

Domain U

domU - это собственно виртуальная машина запускаемая dom0. Получает свой участок памяти, жёсткие диски и сетевой интерфейс. Может быть запущена, остановлена, преостановлена, перезагруженна, задамплена на диск, перемещена в том чесле без остановки на другую машину(live migration).

В чём отличеие в ALT Linux ядер dom0 от domU

Ядро dom0 может работать как в dom0 так и в domU собрана со всеми стандартными опциями наших ядер. DomU ядра могут работать только в domU поддеживают только PCI устройства (так как их можно прокинуть в domU) и имеет вкомпелённую поддержку ext3 и жестких дисков. Сделано это для того, чтобы в большенстве случаев domU ядра могли работать без initrd.

Установка

Установка загрузчика

Ещё немного теории

Проблема в том что xen имеет загрузочный формат multiboot. Это формат позволяет загружать ядро, и пакеты с модулями прямо в загрузчике. Роль ядра у нас выполняет гипервизор, роль модулей ядро линукса, initrd и возможно файл с политиками. Зачем это? Гипервизор не умеет работать с жесткими дисками поэтому загручик должен загрузить ядро dom0 и его initrd в память, и делает он это обычно до запуска гипервизора. Гипервизор загрузившись находит и запускет ядро dom0, а оно уже вытягивет initrd как обычное ядро линукса.

Проблема в том что вопервых на практике единственным нормальным загручиком работющим с multiboot явлется grub. Хотя для сетевой загрузки можно использовать pxelinux, его аналог extlinux при локальной загрузке крайне неудобен.

Дефалтным загручиком в ALT Linux является lilo, grub существует но плохо поддеживается и в данный момент поддеживается только под i586. Поэтому для начала нам надо установить GRUB.

Установка GRUB

GRUB достаточно плохо ставиться из линукса, поэтому лучше его поставить из него самого. Для этого берём от сюда ISO образ(97kb). Сначала копируем из него директорию grub себе в boot.(чтобы была директория /boot/grub/) Далее делаем конфиг в /boot/grub/menu.lst. Для начала сделаем чтобы GRUB загружал обычные ядра.

timeout 5
color black/cyan yellow/cyan
default 0

title default
kernel /boot/vmlinuz root=/dev/sda1 vga=normal
initrd /boot/initrd.img

Далее загружаемся с выше указаным образом и делаем:

root(hd0,1)
setup(hd0)
reboot

Важно помнить что:

  • Граб нумерует всё с нуля
  • Диски нумеруется в порядке который выдает BIOS и обычно совпадает с порядком загрузки(тоесть hd0 это диск загружаемый по умолчанию)
  • разделы нумеруются тоже с нуля
  • В грабе рабоет TAB тоесть root (hd0,<tab> покажет таблицу разделов.
  • В приципе GRUB можно поставить в раздел и грузить его из lilo через other

Если у нас загрузилось обычное ядро можно переходить к установке собственно XEN.

Установка Xen

Установка самого XEN

# apt-get install kernel-image-xen-dom0 kernel-modules-необходимые-xen-dom0 xen-hypervisor xen

Редактируем /boot/grub/menu.lst примерно до такого:

timeout 5
color black/cyan yellow/cyan
default 0

title default
kernel /boot/vmlinuz root=/dev/sda1 vga=normal
initrd /boot/initrd.img

title XEN
kernel /boot/xen.gz dom0_mem=512M
module /boot/vmlinuz-2.6.18-xen-dom0-alt6.M40.1 root=/dev/sda1
module /boot/initrd-2.6.18-xen-dom0-alt6.M40.1.img

Обратите внимание на двойную module — это обязательно.

Перезагружаемся в XEN-ядро, далее:

# service xend start

Проверим, что все в порядке:

[root@wintermute ~]# xm info
host                   : wintermute.tld
release                : 2.6.18-xen-dom0-alt6.M40.1
version                : #1 SMP Tue Mar 4 22:42:44 MSK 2008
machine                : i686
nr_cpus                : 4
nr_nodes               : 1
sockets_per_node       : 2
cores_per_socket       : 1
threads_per_core       : 2
cpu_mhz                : 2392
hw_caps                : bfebfbff:00000000:00000000:00000080:00004400
total_memory           : 4095
free_memory            : 3540
xen_major              : 3
xen_minor              : 1
xen_extra              : .2
xen_caps               : xen-3.0-x86_32p
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xf5800000
xen_changeset          : unavailable
cc_compiler            : gcc version 4.1.1 20070105 (ALT Linux, build 4.1.1-alt11)
cc_compile_by          : builder
cc_compile_domain      : rio.altlinux.org
cc_compile_date        : Tue Mar  4 23:38:33 MSK 2008
xend_config_format     : 4

Поставим xend в автозапуск:

# chkconfig --level 345 xend on

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

Ещё есть проблема актуальная для XEN начиная с версии 3.2.0 - там страшно кривой скрипт для запуска сетевого бриджа. Решается она переносом настройки бриджа в /etc/net.

Зачем нужен бридж?

В XEN сеть реализована так: для каждой(в том число dom0) виртуальной машины создаеться n виртульных сетевых интерфейсов. Каждый представляет собой две виртуальные сетевые карты соедниёный между собой одна находящаяся в DomX под наваением ethY, а другая в Dom0 под названием vifX.Y (где X - номер виртульной машины а Y больше или равно 0 и меньше n) TODO: дописать!

Установка виртуальной машины

Ставим kernel-image-xen-domU:


# apt-get install kernel-image-xen-domU

Делаем образ машины. Я использовал один из собственноручно приготовленных openvz-темплейтов.

# mkdir -p /xen/alt # dd if=/dev/zero of=/xen/alt.img bs=1M seek=10240 count=0  — создаем 10 ГБ «раздел» для машины # mkfs.ext3 /xen/alt.img # mount -o loop /xen/alt.img /xen/alt/ # cd /xen/alt && tar xf /altlinux-4.0.tar.gz

Поставим внутрь будущей виртуальной машины domU-ядро:

# chroot /xen/alt/ /bin/bash # vim /etc/resolv.conf  — установим нужный nameserver # vim /etc/apt/sources.list  — установим правильный репозиторий (можно пропустить, если устраивает тот, что преднастроен внутри контейнера) # apt-get update && apt-get install kernel-image-xen-domu

Поправим /etc/fstab в чруте, чтобы выглядело примерно так:

/dev/hda1       /               ext3    defaults    0       1

Выходим из чрута:

# exit

Отмонтируем чрут: # umount /xen/alt

Ставим kernel-image-xen-domU в dom0-систему:

# apt-get install kernel-image-xen-domU

Пишем конфигурационный файл /etc/xen/alt:

kernel = "/boot/vmlinuz-2.6.18-xen-domU-alt6"
memory = 256
name = "alt"
root = "/dev/hda1 ro"
extra = "xencons=tty"
disk = [ 'file:/xen/alt.img,hda1,w' ]

Пробуем запустить: # xm create -c alt

В конце концов должен выдать приглашение на логин, куда собственно и нужно логиниться.

Для выхода из консоли нажать Ctrl-].