Linux в Xen

Материал из Xgu.ru

Перейти к: навигация, поиск


Короткий URL: xen/linux

На этой странице описана процедура подготовки гостевой системы под управлением Linux для работы в качестве пользовательского домена Xen (domain U).

Содержание

[править] Начальные требования

Для выполнение описанных ниже действий необходимо наличие проинсталлированной и настроенной хост-системы Xen (домена 0). Как это сделать описано на странице Инсталляция Xen.

Предполагается, что в домене 0 установлен Debian GNU/Linux. Для других дистрибутивов некоторые действия будут выполняться иначе.

[править] Подготовка образа гостевой системы

[править] Подготовка дисковых разделов для использования в качестве дисков виртуальной машины

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

# mkfs.ext3 /dev/hdX
# mount /dev/hdX /mnt

В том случае, если в виртуальной машине должно быть несколько дисковых разделов, подготовьте их. Например, для /usr:

# mkfs.ext3 /dev/hdY
# mkdir /mnt/usr
# mount /dev/hdY /mnt/usr


Если вам необходимо пространство подкачки (swap) в виртуальной машине, подготовьте его с помощью команды mkswap:

# mkswap /dev/hdX

[править] Подготовка файлов для использования в качестве диска виртуальной машины

Создайте файл для использования в качестве основного диска виртуальной машины.

%# dd if=/dev/zero of=/xen/images/debian-host1.img bs=1M count=<size_in_MB>
%# mkfs.ext3 /xen/images/debian-host1.img
%# mount -o loop /xen/images/debian-host1.img /mnt

Или, если вы используете LVM:

%# lvcreate -L <size_in_MB>M -n debian-host1 /dev/TURBO
%# mkfs.ext3 /dev/TURBO/debian-host1
%# mount /dev/TURBO/debian-host1 /mnt

(группа томов TURBO или группа с другим названием, которое вы используете, должна существовать и иметь достаточно места; подробнее: LVM).

В том случае, если в виртуальной машине должно быть несколько дисковых разделов, подготовьте их. Например, для /usr:

# dd if=/dev/zero of=/xen/images/debian-host1-usr.img bs=1M count=<size_in_MB>
# mkfs.ext3 /xen/images/debian-host1-usr.img
# mkdir /mnt/usr
# mount -o loop /xen/images/debian-host1-usr.img /mnt/usr

Если вам необходимо пространство подкачки (swap) в виртуальной машине, подготовьте его с помощью команды mkswap:

# mkswap /dev/hdX

[править] Подготовка виртуальной системы под управлением Debian GNU/Linux

Debian-icon.png

Здесь описывается как подготовить образ гостевого домена Xen,в котором будет работать Debian GNU/Linux. Обязательно стоит прочитать ещё Xen Debian Wiki.

[править] Инсталляция ОС Debian GNU/Linux

Этот этап может быть выполнен проще, если использовать xen-tools. Ниже показано, как провести инсталляцию системы вручную.

Смотрите также [1].

Запустите debootstrap для инсталляция базы системы:

# debootstrap sarge /mnt http://debian.org.ua/debian

Скопируйте пакет ядром для работы с Xen, который был подготовлен ранее, в новую виртуальную машину:

# cp linux-xen0-2.6.16-xen_10.00.Custom_i386.deb /mnt/root

Сделайте новую файловую систему корневой (с помощью chroot):

# chroot /mnt /bin/bash

Проинсталлируйте пакет с ранее подготовленным ядро Xen:

# dpkg -i /root/linux-xen0-2.6.16-xen_10.00.Custom_i386.deb

Измените запись, соответствующую корневой системе в файле /etc/fstab:

# vi /etc/fstab
/dev/hda1       /               ext3    defaults,errors=remount-ro 0       1

Если используется несколько дисковых разделов в виртуальной машине, перечислите их:

/dev/hda2      /usr             ext3    defaults                   0 2
/dev/hda3      /var             ext3    defaults                   0 2
...

Запустите программу base-config для установки базовой системы Debian.

# base-config new

Измените конфигурацию сети в виртуальной машине:

# vi /etc/network/interfaces
# vi /etc/resolv.conf
# vi /etc/hosts

Отключите использование TLS, в противном случае работа системы может сильно замедлиться.

# mv /lib/tls /lib/tls.disabled

В том случае, если используется дистрибутив Etch, проинсталлируйте libc6-xen.

# apt-get install libc6-xen

Отключите лишние терминалы getty, а первый терминал направьте на файл /dev/console вместо /dev/tty1: (файл /etc/inittab)

1:2345:respawn:/sbin/getty 38400 /dev/console
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

Если в виртуальной машине будут загружаться модули ядра, установить пакет module-init-tools (обязательно для ядер 2.6 domU).

# apt-get install module-init-tools

На этом инсталляция ОС в виртуальной машине завершена, и можно завершить работу оболочки с изменённой корневой системой (chrooted shell).

# exit

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

# umount /mnt/usr
# umount /mnt/var

После чего размонтируйте корневую файловую систему виртуальной машины.

# umount /mnt

[править] Конфигурирование виртуальной машины

Необходимо создать конфигурационный файл виртуальной машины. Пусть виртуальная машина называется debian-vm0.

# vi /etc/xen/debian-vm0
# Kernel to use
kernel = "/boot/xen0-linux-2.6.16-xen"
# Memory in megabytes
memory = 128
# Your domain's name
name = "debian-vm0"
# Root device
root = "/dev/hda1 ro"
# Don't forget to specify your bridge correctly here
vif = [ 'mac=aa:00:00:00:00:d2, bridge=br-xen' ]

В том случае, если использует физический дисковый раздел:

disk = [ 'phy:/dev/hdX,hda1,w' ]

В том случае, если используется несколько разделов:

disk = [ 'phy:/dev/hdX,hda1,w', 'phy:/dev/hdY,hda2,w' ]

Если вместо раздела используется файл, конфигурация дисковой подсистемы выглядит так:

disk = [ 'file:/xen/images/debian-host1.img,hda1,w' ]

В том случае, если используется несколько файлов, строка должна выглядеть так:

disk = [ 'file:/xen/images/debian-host1.img,hda1,w', 'file:/xen/images/debian-host1-usr.img,hda2,w' ]

Обратите внимание на то, чтобы записи о дисках в конфигурации виртуальной машины соответствовали файлу /etc/fstab операционной системы этой машины.

[править] Инсталляция и настройка Fedora Core в domU

Fedora-icon.png

Здесь описывается как подготовить образ гостевого домена Xen,в котором будет работать Fedora Core 6.

При условии, что домен 0 работает под управлением Debian GNU/Linux, а образ гостевой системы подмонтирован в каталог /mnt, процедура инсталляции выглядит следующим образом:

%# apt-get install yum
%# yum -c /tmp/yum-xen.conf --installroot=/mnt -y groupinstall Base

Пример конфигурационного файла yum-xen.conf (вы можете использовать другой репозиторий и другой уровень отладки):

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
exclude=*-debuginfo
gpgcheck=0
obsoletes=1
reposdir=/dev/null

[base]
name=Fedora Core 6 - i386 - Base
#mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-6
baseurl=http://redhat.download.fedoraproject.org/pub/fedora/linux/core/6/i386/os/
enabled=1

[updates-released]
name=Fedora Core 6 - i386 - Released Updates
#mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc6
baseurl=http://redhat.download.fedoraproject.org/pub/fedora/linux/core/updates/6/i386/
enabled=1

Если при инсталляции вы получаете ошибку

Failed to add groups file for repository: base
Error: No Groups on which to run command

то модифицируйте код yum следующим образом:

# cp /usr/share/python-support/yum/yum/comps.py{,.ORIG}
# vi /usr/share/python-support/yum/yum/comps.py        
# diff /usr/share/python-support/yum/yum/comps.py{.ORIG,}
124c124
<                 if type not in ('mandatory', 'default', 'optional'):
---
>                 if type not in ('mandatory', 'default', 'optional', 'conditional'):
143c143
<                 if type not in ('mandatory', 'default', 'optional'):
---
>                 if type not in ('mandatory', 'default', 'optional', 'conditional'):

Установленную систему можно доработать.

Создать некоторые каталоги и файлы устройств.

%# mkdir /mnt/{dev,proc,etc}
%# for i in console null zero ; do /sbin/MAKEDEV -d /mnt/dev -x $i ; done

Отключить TLS.

%# mv /mnt/lib/tls /mnt/lib/tls-disabled

Создать /etc/fstab

%# cat <<EOL > /mnt/etc/fstab
/dev/sda1               /                       ext3    defaults 1 1
none                    /dev/pts                devpts  gid=5,mode=620 0 0
none                    /dev/shm                tmpfs   defaults 0 0
none                    /proc                   proc    defaults 0 0
none                    /sys                    sysfs   defaults 0 0
/dev/sda2               /mnt                    ext3    defaults 1 2
/dev/sda3               swap                    swap    defaults 0 0
EOL

Настроить сетевые интерфейсы.

%# cat <<EOL > /mnt/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
EOL

cat <<EOL > /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
DEVICE=eth0
BOOTPROTO=dhcp
EOL

Скопировать модули ядра

%# cp -R /lib/modules/2.6.*xen* /mnt/lib/modules/

Установить пароль root'а

%$ sudo chroot /mnt
bash-3.1# pwconv
bash-3.1# passwd
Changing password for user root.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
bash-3.1# exit

Отключить сообщения об ошибках ядра на консоль (не обязательно)


Для загрузки ядра вы можете использовть ядро, которое используется в хост-системе, или воспользоваться ядром предлагаемым в дистрибутиве гостевой системы. Если использовать ядро Fedora (CentOS/RHEL), может понадобиться выполнить пересборку initrd:

mkinitrd /boot/initrd-2.6.18-8.el5xenU.img 2.6.18-8.el5xen --fstab /mnt/etc/fstab --with xenblk --with xennet --preload xenblk --preload xennet

После того как инсталляция закончена, можно попробовать запустить домен.

%# umount /mnt
%# xm console -c fc

(здесь fc это конфигурационный файл домена).

Fc-in-xen.png

[править] Инсталляция и настройка других дистрибутивов Linux в domU

  • Centos5 — описание процедуры подготовки domU для Centos5
  • http://www.gitco.de/repo/xen3.3.1/ — подборка пакетов, имеющих отношение к Xen, для CentOS

[править] Инсталляция Debian из-под других дистрибутивов Linux

%# wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_0.3.3_i386.udeb
%# ar x debootstrap-udeb_0.3.3_i386.udeb
%# mkdir debootstrap
%# cd debootstrap
%# tar xvzf ../data.tar.gz

После этого инсталляция с помощью ./debootstrap выполняется как обычно.

[править] Запуск виртуальной машины

# xm create -c debian-vm0

Данная команда запустит новую виртуальную машину и создаст подключенную к ней консоль (ключ -c). Можно войти в систему от имени пользователя root и настроить сетевой интерфейс eth0.

Обратите внимание на то, что на консоли (/dev/console) по умолчанию комбинация клавиш Ctrl-C не настроена для прерывания процессов.

Отключиться от консоли виртуальной машины вернуться в терминал, из которого выполнялось подключение/запуск, можно с помощью комбинации Ctrl-].

Вернуться на отключенную консоль можно с помощью команды:

# xm console debian-vm0

Остановить домен можно командой:

# xm shutdown -H debian-vm0

Выключить домен (как будто бы вырубить виртуальную машину по питанию), можно с помощью команды:

# xm destroy debian-vm0

Для получения полного списка команд, таких как shutdown, destroy и т.д. введите:

# xm help

Для того чтобы виртуальная машина (domU) загружалась автоматически, когда загружает основная система (dom0), необходимо сделать ссылку на конфигурационный файл виртуальной машины:

# ln -s <configfile> /etc/xen/auto/

[править] Дополнительные вопросы

[править] Сборка ядра Linux под Xen в Debian

Основная страница: Сборка ядра Linux под Xen в Debian

Ядро Linux, с поддержкой Xen, находящееся в репозитории Debian GNU/Linux собрано с поддержкой PAE. С другой стороны, большое количество систем (NetBSD, Plan 9 и др.), работающих как гостевые системы в паравиртуальном домене Xen не поддерживают PAE (FreeBSD может быть собрано с поддержкой PAE). В этом случае потребуется пересобрать ядро домена 0 без поддержки PAE. Пересборка ядра может потребоваться и в других случаях.

[править] Использование домена с paravirt_ops

  • При подготовке ядра создать модули (или включить в ядро) с драйверами блочных устройств frontend, работающие через paravirt_ops
  • В конфигурационном файле домена добавить строчку
console=hvc0

в параметр extra.

  • В конфигурационном файле нужно перейти на использование дисков типа xvda. Для этого нужно изменить название корневой файловой системы (сделать /dev/xvda1), изменить параметр disk в конфигурационном файле домена чтобы в нём использовались имена xvda и изменить /etc/fstab внутри самого домена

Пример конфигурационного файла домена:

kernel = "/boot/vmlinuz-2.6.25-2-xen-686"
ramdisk = "/boot/initrd.img-2.6.25-2-xen-686"
builder='linux'
memory = 128
name = "dhcp"

vif=[ 'bridge=eth0, mac=00:16:3e:00:01:02'     ]
disk=[ 'file:/xen/production/dhcp.img,xvda1,w' ]
root="root=/dev/xvda1 ro console=hvc0"

Фрагменты файлов внутри домена:

# grep hvc0 /etc/inittab 
1h:2345:respawn:/sbin/getty 38400 hvc0

# grep hvc0 /etc/securetty
hvc0

# cat /etc/fstab
proc             /proc           proc    defaults                   0       0
/dev/xvda1       /               ext3    defaults,errors=remount-ro 0       1

В Ubuntu вмест правки /etc/inittab нужно создать /etc/init/hvc0.conf с таким содержимым:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
 
respawn
exec /sbin/getty -8 38400 hvc0


Для ядер в районе 2.6.34 может пригодиться патч [2] (подробнее: [3]).

[править] Ядро с paravirt_ops в домене 0

Если вы используете ядро с paravirt_ops в домене 0.

В /etc/fstab:

xenfs                   /proc/xen               xenfs   defaults        0 0

[править] Возможные проблемы при подготовке и запуске

Множество проблем, с которыми можно столкнуться при подготовке и запуске гостевой системы Xen, описано на странице Xen FAQ.

[править] Возможные проблемы с udev

При старте домена может возникнуть такая проблема: домен не стартует, на экран выдаётся сообщение об ошибке:

Device 768 (vbd) could not be connected. Hotplug scripts not working.

Номер устройства (768) может отличаться.

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

Убедитесь, что udev достаточно новый. Последние версии udev находятся здесь: http://kernel.org/pub/linux/utils/kernel/hotplug/

Проверьте, есть ли в конфигурации udev правила xen.

Если нет, нужно их добавить. Нужно создать файл xen-backend.rules в каталоге /etc/udev/rules.d следующего содержания:

# cat /etc/udev/rules.d/xen-backend.rules
SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap $env{ACTION}"
SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}"
SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}"
SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} online"
SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="offline", RUN+="$env{script} offline"
SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/etc/xen/scripts/xen-hotplug-cleanup"
KERNEL=="evtchn", NAME="xen/%k"

Если такой файл xen-backend.rules уже есть, можно переименовать его или создать символическую ссылку, содержащую номер в названии. Правило должно грузиться предпоследним.

# cd /etc/udev/rules.d
# mv xen-backend.rules 92-xen-backend.rules

После этого нужно перезапустить udev и попробовать стартануть домен снова.

# ps aux | grep udev
root      3321  0.0  0.2   1768   516 ?        S<s  22:51   0:00 udevd --daemon
root      9349  0.0  0.2   1860   640 pts/2    S+   23:27   0:00 grep udev
# udevd --daemon
# ps aux | grep udev
root      9352  0.0  0.2   1768   516 ?        S<s  23:28   0:00 udevd --daemon
root      9356  0.0  0.2   1860   640 pts/2    S+   23:29   0:00 grep udev

Ещё возможный вариант (например, на Debian Lenny) -- отсутствие бита исполнения на скриптах Xen, исправляется простым

# chmod a+x /etc/xen/scripts/*

и неправильный в них шебанг #!/bin/sh, либо его отсутствие, исправляется ручным добавлением #!/bin/bash в начало каждого скрипта.

Дополнительные сведения о проблеме: [4]

Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure