Основы использования Xen

Добрый день, уважаемые сообщники! По просьбам трудящихся выкладываю ниже перевод руководства по Xen из документации Gentoo.

{{TOC}}

Введение

Гипервизор Xen позволяет работать с несколькими операционными системами на одной физической машине, управлять загрузкой ресурсов и даже перемещать подключенный домен - виртуальную среду, в которой запущена гостевая ОС - из одной системы, использующей Xen, в другую. Чтобы Xen функционировал, его должна поддерживать основная ОС (в нашем случае - ядро Linux), однако гостевые системы переконфигурировать необязательно: возможна аппаратная виртуализация, но для этого необходимо, чтобы ваше оборудование поддерживало Intel Virtualization Technology (VT-x) или AMD Virtualization Technology (SVM). Если это не так, вам всё же потребуется модифицировать ядро гостевых ОС, чтобы обеспечить поддержку Xen.

Здесь будет рассказано только о конфигурировании и запуске Xen на Gentoo, а значит, и Calculate Linux; мы не будем подробно останавливаться на описании гипервизора, так как оно всегда доступно в его официальной документации. К сожалению, объём этой статьи не позволяет нам рассказать и о ряде ситуаций, которые могут потребовать специфичной настройки Xen, но не относятся к гипервизору напрямую (например, экспорт Portage по NFS, загрузка Linux через PXE и пр.)

Подготовка domain0

Основы

domain0, dom0 (т.е. “домен 0”) - это первичный домен под Xen, на котором запущена операционная система, управляющая остальными доменами. Прежде всего необходимо подготовить будущую хост-систему и собрать для неё ядро с поддержкой Xen.

Нужна ли пересборка системы?

Вероятно, вам потребуется полностью пересобрать управляющую систему с новыми настройками флагов компиляции (CFLAGS); в противном случае гостевые домены могут значительно потерять в производительности. Тем не менее вы можете пропустить этот шаг, если в данный момент не планируете переводить сервера на Xen, а хотите лишь испытать его в действии. Производительность снизится, но гипервизор будет работоспособен.

Важно: если вы редактировали значение переменной CFLAGS и пересобирали систему с gcc версии ниже 4, во избежание ошибок при компиляции рекомендуется не выставлять оптимизацию -Os.

Пример:

nano -w /etc/portage/make.conf
CFLAGS="-O2 -march=pentium4 -pipe -mno-tls-direct-seg-refs"
(Значение -mno-tls-direct-seg-refs следует добавлять ТОЛЬКО в том случае, если у вас 32-битный домен dom0. С 64-битным dom0 этот флаг не нужен.)

emerge -e world

Если ваша система загружается с помощью initrd (диска в оперативной памяти для начальной инициализации), то потребуется пересобрать и его. Модифицированный initrd проще всего получить, последовательно проделав все те действия, которые необходимы для пересборки ядра.

Установка Xen

Xen включает несколько составляющих, соответственно потребуется дополнительно установить несколько пакетов:

emerge xen xen-tools

Конфигурация ядра

Теперь нужно собрать с поддержкой Xen ядро привилегированного домена - домена dom0, на котором будет работать хост. Исходный код ядра, как известно, находится в директории /usr/src/linux. В разделе XEN находятся все необходимые драйверы для ввода/вывода, причём для каждого драйвера доступен фронтенд и бэкенд. Для ядра dom0 вы должны выбрать бэкенд, с помощью которого другие домены (которые, в свою очередь, будут использовать фронтенды) смогут напрямую взаимодействовать с аппаратным обеспечением. В любом случае вам должно быть доступно подключение обоих типов драйверов: фронтендов для гостевых систем, бэкендов для хоста.

Возможно, у вас возникли вопросы о работе в сети. Каждый интерфейс в том или ином домене привязан соединением типа точка-точка к интерфейсу в управляющем домене vifX.Y, где X - номер домена, а Y - порядковый номер интерфейса. Таким образом, вы можете настроить любую удобную вам конфигурацию сети (мосты, NAT и т.д.)

Прежде всего включим Xen в ядре:

Processor type and features  --->
    [*] Paravirtualized guest support --->
        [*] Xen guest support

Теперь настроим необходимые параметры:

Bus options (PCI etc.)  --->
    [*] Xen PCI Frontend

[*] Networking support --->
    Networking options  --->
        <*> 802.1d Ethernet Bridging
    [*] Network packet filtering framework (Netfilter) --->
        [*] Advanced netfilter configuration
            [*] Bridged IP/ARP packets filtering

Device Drivers --->
    [*] Block devices (NEW) --->
        <*> Xen block-device backend driver
    [*] Network device support --->
        <*> Xen backend network device
    Xen driver support --->
        [*] Xen memory balloon driver (NEW)
    [*]   Scrub pages before returning them to system (NEW)
    <*> Xen /dev/xen/evtchn device (NEW)
    [*] Backend driver support (NEW)
    <*> Xen filesystem (NEW)
    [*]   Create compatibility mount point /proc/xen (NEW)
    [*] Create xen entries under /sys/hypervisor (NEW)
    <M> userspace grant access device driver (NEW)
    <M> user-space grant reference allocator driver (NEW)
    <M> xen platform pci device driver (NEW)

Такая конфигурация должна обеспечить возможность загрузки ядра как на хосте, так и на гостевой системе. Но при желании вы можете использовать Xen и с более компактным ядром: за подробностями обратитесь к документации проекта.

Как только модифицированное ядро будет собрано, образ ядра, vmlinuz, окажется непосредственно в директории сборки (а не в /arch или какой-либо другой). Скопируйте его в /boot, а затем настройте загрузчик для использования гипервизора (файл /boot/xen.gz) так, как будто Xen - это загружаемое ядро. Например, так:

title Xen Gentoo Linux 3.5
root (hd0,0)
kernel /boot/xen.gz
module /boot/kernel-3.5.x.y-xen0 root=/dev/sda3

Теперь перезагрузитесь с ядром Xen и убедитесь, что система обеспечивает весь обычный функционал. Если всё благополучно, вы можете выставить загрузку Xen по умолчанию.

Примечание: Если вы хотите, чтобы гостевые домены автоматически запускались при старте машины, следует прописать xendomains на уровне запуска default и создать для необходимых доменов символические ссылки на конфигурационные файлы Xen по адресу /etc/xen/auto/.

Создание непривилегированных (гостевых) доменов

Конфигурация ядра

Обратитесь к исходному коду ядра Xen и при необходимости измените конфигурацию последнего. Для гостевых доменов имеет смысл использовать конфигурации, максимально близкие к управляющему ядру. Теперь соберите ядро и поместите полученный файл vmlinuz в удобное вам место (в нашем примере это /mnt/data/xen/kernel):

make O=~/build/domU
cp ~/build/domU/vmlinuz /mnt/data/xen/kernel/kernel-3.5.x.y-xen

Создание доменных дисков

Для достижения оптимальной производительности следует отвести под домен отдельный раздел (логический том), а не файловую систему в файле. Впрочем, для тестирования лучше подойдёт именно второй вариант - в частности, для удобства обслуживания.

Для создания файловой системы в файле можно использовать dd и mke2fs (или другую аналогичную утилиту). Создадим, например, файловую систему ext4 объёмом 4Гб:

dd if=/dev/zero of=/mnt/data/xen/disks/ext4root.img bs=1M count=4096
mkfs.ext4 /mnt/data/xen/disks/ext4root.img

Конфигурирование доменов

Теперь необходимо настроить Xen для данного домена. Конфигурационные файлы гипервизора могут храниться в любом месте, например, /mnt/data/xen/configs.

Для примера напишем конфигурационный файл для небольшого окружения Gentoo, используя созданный нами ранее образ диска.

nano -w /mnt/data/xen/configs/gentoo

kernel = "/mnt/data/xen/kernel/kernel-3.5.x.y-xen"
memory = 512
name   = "gentoo"
(Размечаем образ диска под виртуальный /dev/sda1:)
disk   = ['file:/mnt/data/xen/disks/ext4root.img,sda1,w']
root   = "/dev/sda1 ro"

Если вы используете блочное устройство (например, lvm-том или раздел), вместо 'file:' указывайте 'phy:' и опустите строку /dev. Например:

(LVM-том)
disk = [ 'phy:lvm/xen-guest-root,sda1,w' ]

(Физический раздел)
disk = [ 'phy:sdb6,sda1,w' ]

Образцы конфигурационных файлов находятся в директории /etc/xen.

Запуск нового домена

Настройка завершена, теперь можно запустить новый домен. Если на выделенном участке диска была установлена операционная система, домен удобно создать и привязать к разделу с помощью команды xl:

xl create /mnt/data/xen/configs/gentoo -c

В результате домен загрузится в терминале, в котором вы выполняли команду. Однако в нашем случае вновь созданная файловая система была пустой, поэтому это действие ничего не даст, но вы можете смонтировать образ как loop-устройство и установить на него Gentoo/CL, как обычно.

Чтобы отключиться от домена, нажмите Ctrl+]. Вы всегда можете переподключиться через консоль xl. Однако обратите внимание, что каждый домен располагает всего одной консолью. Поэтому используйте данный способ только в тех случаях, когда к домену невозможно получить доступ иначе (например, по SSH).

Непривилегированные домены в сети

Основы

Xen наиболее эффективен при работе с сетевыми мостами. В таком случае сетевое соединение, используемое по умолчанию на управляющем домене, становится мостом, по которому идет соединение с виртуальными доменами, а также с IP-адресом управляющего домена.

Сетевые мосты

Чтобы использовать сетевой мост, сначала создайте новую символическую ссылку на соответствующий сценарий запуска:

cd /etc/init.d
ln -s net.lo net.br0

Отредактируйте файл /etc/conf.d/net и включите интерфейс br0:

nano -w /etc/conf.d/net

bridge_br0="eth0"
config_br0="192.168.1.200 netmask 255.255.255.0 brd 192.168.1.255"
routes_br0="default via 192.168.1.1"

Теперь следует установить пакет net-misc/bridge-utils и заставить сценарий net.br0 выполняться при загрузке:

emerge net-misc/bridge-utils
rc-update add net.br0 default

Полезные ссылки по теме

Подробнее о Xen:

Дополнительно для Xen Tools:

  • утилита app-emulation/virt-manager для администрирования виртуальных машин в графическом интерфейсе

Оригинал: http://www.gentoo.org/doc/en/xen-guide.xml#doc_chap1

Очень подробная инструкция. Спасибо.
А почему не подключить Xen сразу из коробки уже сконфигурированным? Он так много “ест” ресурсов? В принципе, есди бы он был включен в сборку изначально, то тем, кому он не нужен, его присутствия наверное бы и не заметили, а тем, кому нужен, просто бы подключили гостевые системы и всё… просто так как Calculate Linux часто обновляется (у меня из iso, например), то это (вышеприведённое) придётся делать каждый раз.

Лучше, чтобы было наоборот, была простая возможность “выключить” Xen, но чтобы он уже изначально работал. Это даст Calculate Linux преимущество перед другими системами. Ведь всё равно будущее за виртуализацией. Я вот каждый раз устанавливаю и конфигурирую Virtualbox и даже те некоторые немногие действия надоедают. Хоть одна система виртуализации должна быть “из коробки”.

06.02.2016 г., мое искреннее уважение к Вам - по поводу отличного
перевода вышеуказанного руководства.
focus124