Добрый день, уважаемые сообщники! По просьбам трудящихся выкладываю ниже перевод руководства по 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