Xen

Материал из ALT Linux Wiki

Введение

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. timeout 5 color black/cyan yellow/cyan default 0

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

initrd /boot/initrd.img

Установка GRUB

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


Решение

По хорошему, необходимо собрать grub для 32битной систему, использовать его для создания некого загрузочного cd-диска. Положить на него stage1 stage2. Ставить систему с любым ядром и lilo. Загружаться в эту систему, копировать сd-rom’а /boot/grub на диск, создавать /boot/grub/device.map и /boot/grub/menu.lst, перезагружаться и с помощью волшебного cd-диска устанавливать grub как основной загрузчик системы. типа

root(hd0,1)
setup(hd0)
reboot

http://wpkg.org/Running_Xen_with_LILO http://gentoo-wiki.com/HOWTO_Xen_and_Gentoo http://www.tjd.phlegethon.org/software/#mbootpack

Альтернативное решение

В качестве альтернативного решения можно использовать загрузчик extlinux из пакета syslinux.


Установка Xen в ALT Linux

Пример на основе branch 4.0.

Моя конфигурация такова:

/dev/sda1 — root — 63G /dev/sda2 — swap — 4G

Ставим grub и устанавливаем его:

# apt-get install grub # grub-install /dev/sda

Примерный /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

Проверим, что grub грузит текущее ядро:

# reboot

После успешной загрузки ставим ядро и необходимые для работы железа модули:

# 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
[root@wintermute ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
xenbr0          8000.feffffffffff       no              vif0.0
                                                        peth0

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

# chkconfig --level 345 xend on

Ставим 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-].

См. также