Xen
Введение
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-].