Ключевые слова:ubuntu, linux, xen, (найти похожие документы)
From: Сгибнев Михаил <msgibnev(ого-го какая собака)gmail.com>
Date: Mon, 15 Jan 2010 17:02:14 +0000 (UTC)
Subject: Установка Xen 3.3 с ядром 2.6.27 на Ubuntu 8.10 (x86_64)
Оригинал: http://dreamcatcher.ru/linux/005_xen.html
Автор: Installing Xen 3.3 With Kernel 2.6.27 On Ubuntu 8.10 (x86_64)
Перевод: Сгибнев Михаил
В этом руководства показывается, как установить Xen 3.3 на хост Ubuntu
8.10(dom0). Xen 3.3 доступен в репозитарии Ubuntu 8.10, но ядро Ubuntu
8.10 (2.6.27-x) используется как domU, то есть выступает в роли
гостевой машины, но не на уровне dom0. Поэтому мы должны собрать наше
собственное dom0 ядро.
Как обычно, не дается никаких гарантий и вы предупреждены о возможных
последствиях.
Предварительное примечание
Я использую систему Ubuntu 8.10 x86_64 с именем server1.example.com и
IP адресом 192.168.0.100 в качестве dom0. В роли domU будет выступать
Debian Lenny.
В этом руководстве будет показано, как создать image-based виртуальную
машину и LVM-based виртуальную машину.
Все действия будут выполняться с привилегиями пользователя root.
Устанавливаем Xen
Сперва необходимо обновить систему:
apt-get upgrade
И установить последнюю версию ядра из репозитария Ubuntu:
apt-get install linux-image-server linux-server
Затем, установим Xen 3.3 и все необходимое для сборки ядра dom0:
apt-get install ubuntu-xen-server build-essential libncurses5-dev gawk mercurial
Скачиваем исходные тексты ядра 2.6.27 Xen
mkdir -p ~/build/linux-2.6.27-xen
cd /usr/src/
hg clone http://xenbits.xensource.com/ext/linux-2.6.27-xen.hg
И конфигурируем это ядро:
cd linux-2.6.27-xen.hg
make O=~/build/linux-2.6.27-xen/ menuconfig
В меню конфигурации ядра выберите следущие опции:
General setup ---> Choose SLAB allocator (SLUB (Unqueued Allocator)) ---> (X) SLAB
Processor type and features ---> Subarchitecture Type (PC-compatible) ---> (X) Enable Xen compatible kernel
Bus options (PCI etc.) ---> [*] PCI support
[*] Xen PCI Frontend
[ ] Xen PCI Frontend Debugging (NEW)
Измените 802.1d Ethernet Bridging на <*> 802.1d Ethernet Bridging:
Networking support ---> Networking options ---> <*> 802.1d Ethernet Bridging
Отключите поддержку 10000 Mbit Ethernet(в противном случае можно
получить ошибку при сборке):
Device Drivers ---> [*] Network device support ---> [ ] Ethernet (10000 Mbit) --->
Затем обратимся к разделу Xen (вы должны выбрать версию, совместимую с
Xen (3.0.4 или более позднюю) вместо версии Xen (3.0.2 или более
позднюю)):
Device Drivers ---> XEN ---> [*] Privileged Guest (domain 0)
<*> Backend driver support (NEW)
<*> Block-device backend driver (NEW)
<*> Block-device tap backend driver (NEW)
<*> Network-device backend driver (NEW)
(8) Maximum simultaneous transmit requests (as a power of 2) (NEW)
[ ] Pipelined transmitter (DANGEROUS) (NEW)
< > Network-device loopback driver (NEW)
<*> PCI-device backend driver (NEW)
PCI Backend Mode (Virtual PCI) --->
[ ] PCI Backend Debugging (NEW)
< > TPM-device backend driver (NEW)
SCSI backend driver (NEW)
Block-device frontend driver
Network-device frontend driver
Network-device frontend driver acceleration for Solarflare NICs (NEW)
SCSI frontend driver (NEW)
<*> User-space granted page access driver (NEW)
<*> Framebuffer-device frontend driver (NEW)
<*> Keyboard-device frontend driver (NEW)
[*] Disable serial port drivers (NEW)
<*> Export Xen attributes in sysfs (NEW)
(256) Number of guest devices (NEW)
Xen version compatibility (3.0.4 and later)--->
После этого мы компилируем и устанавливаем ядро:
make O=~/build/linux-2.6.27-xen/
make O=~/build/linux-2.6.27-xen/ modules_install install
Обратим свой взор на каталог /boot:
root@server1:~# ls -l /boot
total 78364
-rw-r--r-- 1 root root 504280 2009-01-29 22:23 abi-2.6.27-11-server
-rw-r--r-- 1 root root 503560 2008-11-04 22:22 abi-2.6.27-7-server
-rw-r--r-- 1 root root 85313 2009-01-29 22:23 config-2.6.27-11-server
-rw-r--r-- 1 root root 87256 2009-02-12 20:51 config-2.6.27.5
-rw-r--r-- 1 root root 85319 2008-11-04 22:22 config-2.6.27-7-server
drwxr-xr-x 2 root root 4096 2009-02-12 22:28 grub
-rw-r--r-- 1 root root 8983433 2009-02-12 22:28 initrd.img-2.6.27-11-server
-rw-r--r-- 1 root root 8979323 2009-02-12 22:26 initrd.img-2.6.27-7-server
drwx------ 2 root root 16384 2009-02-12 19:30 lost+found
-rw-r--r-- 1 root root 124152 2008-09-11 22:11 memtest86+.bin
-rw-r--r-- 1 root root 1354638 2009-01-29 22:23 System.map-2.6.27-11-server
-rw-r--r-- 1 root root 1258568 2009-02-12 20:51 System.map-2.6.27.5
-rw-r--r-- 1 root root 1351952 2008-11-04 22:22 System.map-2.6.27-7-server
-rw-r--r-- 1 root root 1130 2009-01-29 22:27 vmcoreinfo-2.6.27-11-server
-rw-r--r-- 1 root root 1129 2008-11-04 22:25 vmcoreinfo-2.6.27-7-server
-rw-r--r-- 1 root root 2341536 2009-01-29 22:23 vmlinuz-2.6.27-11-server
-rw-r--r-- 1 root root 2192827 2009-02-12 20:51 vmlinuz-2.6.27.5
-rw-r--r-- 1 root root 2338976 2008-11-04 22:22 vmlinuz-2.6.27-7-server
-rw-r--r-- 1 root root 470144 2008-10-06 20:15 xen-3.3.gz
root@server1:~#
Как вы видите, появилось новое ядро 2.6.27.5, без ramdisk, поэтому
собираем его:
depmod 2.6.27.5
update-initramfs -c -k 2.6.27.5
И обновляем загрузчик:
update-grub
После этого открываем файл /etc/modules и убедимся в том, что в файле
присутствует строка loop max_loop=64(этот шаг необходим только при
создании image-based виртуальной машины):
vi /etc/modules
[...]
loop max_loop=64
После чего перезагружаем машину:
reboot
Выполним команду uname -r для того, чтобы убедиться в правильной
установке ядра:
root@server1:~# uname -r
2.6.27.5
root@server1:~#
Создаем Image-Based виртуальную машину
Для создания виртуальных машин мы будем использовать xen-tools, так
как этот инструмент справляется с задачей легко и непринужденно. Для
получения дополнительной информации, обратитесь к этому документу.
Теперь мы редактируем файл /etc/xen-tools/xen-tools.conf. В этом файле
содержатся значения по умолчанию для скрипта xen-create-image, которые
будут использованы, если вы не измените их из командной строки. Я
изменил нижеследущее, оставив остальное нетронутым:
[...]
dir = /home/xen
[...]
memory = 256Mb
[...]
dist = lenny # Default distribution to install.
[...]
gateway = 192.168.0.1
netmask = 255.255.255.0
broadcast = 192.168.0.255
[...]
passwd = 1
[...]
kernel = /boot/vmlinuz-2.6.27-11-server
initrd = /boot/initrd.img-2.6.27-11-server
[...]
mirror = http://ftp.de.debian.org/debian/
[...]
serial_device = hvc0
[...]
disk_device = xvda #default
[...]
В строках kernel и initrd мы указываем не то ядро, которое мы собрали
в предидущей главе, так как оно предназначено только для работы в dom0
и не будет работать как ядро domU. Пожалуйста, используйте одно из ядер
Ubuntu, например - 2.6.27-11-server. Так как дефолтное ядро Ubuntu уже
собрано с поддержкой Xen, нам нет необходимости в повторной сборке.
Параметр dir указывает нам на каталог, где будут храниться виртуальные
машины. dist указывает на то, какой дистрибутив будет установлен - в
данном случае Debian Lenny
Параметр passwd = 1 указывает на необходимость задания пароля для root
при создании нового домена.
Убедитесь, что вы указали сетевые параметы - gateway, netmask и
broadcast address. Если вы этого не сделали и не указали их в командной
строке, то рискуете осаться без сети на виртуальной машине.
Очень важным параметром является serial_device = hvc0 (не xvc0 или
tty1!), если вы допустите ошибку, то не сможете попасть на консоль
виртуальной машины.
Прежде, чем мы начнем, создадим каталог для хранения виртуальных
машин:
mkdir /home/xen
Ну, создаем наш первый домен - xen1.example.com, с адресом
192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
Если вы указываете какие-либо параметры в командной строке, то они
имеют больший приоритет, чем указанные в файле
/etc/xen-tools/xen-tools.conf. Еще раз проверьте, что добавили в файл
функцию --role=udev, иначе виртуальная машина не загрузится. Для
получения более детальной информации, воспользуйтесь командой man
xen-create-image.
Процесс создания виртуальной машины займет несколько минут. В ходе
выполнения будет наблюдаться примерно следущее:
root@server1:~# xen-create-image --hostname=xen1.example.com --size=4Gb --swap=2
56Mb --ip=192.168.0.101 --arch=amd64 --role=udev
General Information
- - - - - - - - - -
Hostname : xen1.example.com
Distribution : lenny
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : sparse
Memory size : 256Mb
Kernel path : /boot/vmlinuz-2.6.27-11-server
Initrd path : /boot/initrd.img-2.6.27-11-server
Networking Information
- - - - - - - - - - -
IP Address 1 : 192.168.0.101 [MAC: 00:16:3E:1E:C4:E1]
Netmask : 255.255.255.0
Broadcast : 192.168.0.255
Gateway : 192.168.0.1
Creating partition image: /home/xen/domains/xen1.example.com/swap.img
Done
Creating swap on /home/xen/domains/xen1.example.com/swap.img
Done
Creating partition image: /home/xen/domains/xen1.example.com/disk.img
Done
Creating ext3 filesystem on /home/xen/domains/xen1.example.com/disk.img
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
root@server1:~#
Обратимся к файлу /etc/xen/xen1.example.com.cfg, чтобы посмотреть -
чтоже там такое?
#
# Configuration file for the Xen instance xen1.example.com, created
# by xen-tools 3.9 on Fri Feb 13 00:28:34 2009.
#
#
# Kernel + memory size
#
kernel = '/boot/vmlinuz-2.6.27-11-server'
ramdisk = '/boot/initrd.img-2.6.27-11-server'
memory = '256'
#
# Disk device(s).
#
root = '/dev/xvda2 ro'
disk = [
'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w',
'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w',
]
#
# Hostname
#
name = 'xen1.example.com'
#
# Networking
#
vif = [ 'ip=192.168.0.101,mac=00:16:3E:1E:C4:E1' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
Обратите внимание: если у вас dual-core или quad-core CPU и вы хотите,
чтобы виртуальная машина использовала все ядра процессора, то добавьте
к файлу конфигурации vcpus = '2' или vcpus = '4'.
Перед первым запуском виртуальной машины вам необходимо примонтировать
хранилище и скопировать в него ядро domU (команда xen-create-image
скопировала в виртуальную машину ядро dom0 kernel 2.6.27.5, а нам его
необходимо заменить на 2.6.27-11-server).
mount -o loop /home/xen/domains/xen1.example.com/disk.img /mnt
cd /mnt/lib/modules/
cp -pfr /lib/modules/2.6.27-11-server/ .
cd
umount /mnt
Для запуска вируальной машины выполните команду:
xm create /etc/xen/xen1.example.com.cfg
Для подключения к консоли виртуальной машины, выполните:
xm console xen1.example.com
Для выхода из консоли нажмите CTRL+], или CTRL+5 if если вы
используете PuTTY, или используйте SSH для подключения к 192.168.0.101.
Для получения списка виртуальных машин, испольуйте команду xm list:
root@server1:~# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 3499 2 r----- 2826.0
xen1.example.com 22 256 1 -b---- 5.8
root@server1:~#
Для выключения виртуальной машины, испольуйте команду xm shutdown
xen1.example.com.
Если вы хотите, чтобы виртуальная машина стартовала при следующей
начальной загрузке корневой ситемы, то выполните команду:
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Приведу список самых популярных команд:
* xm create -c /path/to/config - Старт виртуальной машины.
* xm shutdown - Останов виртуальной машины.
* xm destroy - Немедленный останов виртуальной машины. Аналаогично
нажатию кнопки питания.
* xm list - Список запущенных виртуальных машин.
* xm console - Подключение к виртуальной машине.
* xm help - Список всех команд.
Для того, чтобы просмотреть список виртуальных машин, созданных
утилитой xen-create-image, воспользуйтесь командой xen-list-images:
root@server1:~# xen-list-images
Name: xen1.example.com
Memory: 256
IP: 192.168.0.101
root@server1:~#
Создаем LVM-Based виртуальную машину
В этой главе мы создадим виртуальную машину использующую в качестве
хранилища раздел LVM орневого домена, вместо файла. Виртуальные машины,
использующие в качестве хранилища файл, черезвычайно медленны и сильно
нагружают систему ввода/вывода.
В данном примере, я использую Ubuntu 8.10 с LVM группой /dev/vg0,
размером 465GB. /dev/vg0 содержит два логических раздела, /dev/vg0/root
и /dev/vg0/swap_1, которые занимают 48GB простванства, а остельное
может быть использовано для создания логических разделов виртуальных
машин.
root@server1:~# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 11
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 465.26 GB
PE Size 4.00 MB
Total PE 119106
Alloc PE / Size 12396 / 48.42 GB
Free PE / Size 106710 / 416.84 GB
VG UUID 8t178I-M2Fa-T9U6-8b76-Svjy-E7NW-fYIK1D
root@server1:~#
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID CtAiSe-jr1F-Ibvj-80zR-DRnK-dgPz-OPoxnv
LV Write Access read/write
LV Status available
# open 1
LV Size 46.56 GB
Current LE 11920
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID n1DY62-rNBY-LLA9-jYZm-LypC-4LYW-Q4aiQB
LV Write Access read/write
LV Status available
# open 1
LV Size 1.86 GB
Current LE 476
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
root@server1:~#
Для создания виртуальных машин мы будем использовать xen-tools, что
сделает процесс легким и непринужденным. Для получения дополнительной
справочной информации, обратитесь к этому документу. Этот
инструментарий установился как зависимость для ubuntu-xen-server и не
требует дополнительной инсталляции.
Теперь отредактируем /etc/xen-tools/xen-tools.conf.
[...]
lvm = vg0
[...]
memory = 256Mb
[...]
dist = lenny # Default distribution to install.
[...]
gateway = 192.168.0.1
netmask = 255.255.255.0
broadcast = 192.168.0.255
[...]
passwd = 1
[...]
kernel = /boot/vmlinuz-2.6.27-11-server
initrd = /boot/initrd.img-2.6.27-11-server
[...]
mirror = http://ftp.de.debian.org/debian/
[...]
serial_device = hvc0
[...]
disk_device = xvda #default
[...]
В строках kernel и initrd мы указываем не то ядро, которое мы собрали
в предыдущей главе, так как оно предназначено только для работы в dom0
и не будет работать как ядро domU. Пожалуйста, используйте одно из ядер
Ubuntu, например - 2.6.27-11-server. Так как дефолтное ядро Ubuntu уже
собрано с поддержкой Xen, нам нет необходимости в повторной сборке.
Убедитесь, что раскомментировали строку lvm и указали корректную
группу (в моем случае vg0), при этом проверьте, что строка dir
закомментирована.
Параметр passwd = 1 указывает на необходимость задания пароля для root
при создании нового домена.
Убедитесь, что вы указали сетевые параметы - gateway, netmask и
broadcast address. Если вы этого не сделали и не указали их в командной
строке, то рискуете осаться без сети на виртуальной машине.
Очень важным параметром является serial_device = hvc0 (не xvc0 или
tty1!), если вы допустите ошибку, то не сможете попасть на консоль
виртуальной машины.
Ну, создаем наш первый домен - xen1.example.com, с адресом
192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
Если вы указываете какие-либо параметры в командной строке, то они
имеют больший приоритет, чем указанные в файле
/etc/xen-tools/xen-tools.conf. Еще раз проверьте, что добавили в файл
функцию --role=udev, иначе виртуальная машина не загрузится. Для
получения более детальной информации, воспользуйтесь командой man
xen-create-image.
Процесс создания виртуальной машины займет несколько минут. В ходе
выполнения будет наблюдаться примерно следущее:
root@server1:~# xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
General Information
- - - - - - - - - -
Hostname : xen1.example.com
Distribution : lenny
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : full
Memory size : 256Mb
Kernel path : /boot/vmlinuz-2.6.27-11-server
Initrd path : /boot/initrd.img-2.6.27-11-server
Networking Information
- - - - - - - - - - -
IP Address 1 : 192.168.0.101 [MAC: 00:16:3E:BF:02:B9]
Netmask : 255.255.255.0
Broadcast : 192.168.0.255
Gateway : 192.168.0.1
Creating swap on /dev/vg0/xen1.example.com-swap
Done
Creating ext3 filesystem on /dev/vg0/xen1.example.com-disk
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
root@server1:~#
Как мы можем увидеть из вывода команды xen-create-image был создан
новый логический раздел для виртуальной машины в группе vg0,
называющийся /dev/vg0/xen1.example.com-disk, содержащий корневую
файловую систему и раздел /dev/vg0/xen1.example.com-swap, содержащий
файл подкачки. Посмотрим:
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID CtAiSe-jr1F-Ibvj-80zR-DRnK-dgPz-OPoxnv
LV Write Access read/write
LV Status available
# open 1
LV Size 46.56 GB
Current LE 11920
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID n1DY62-rNBY-LLA9-jYZm-LypC-4LYW-Q4aiQB
LV Write Access read/write
LV Status available
# open 1
LV Size 1.86 GB
Current LE 476
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
--- Logical volume ---
LV Name /dev/vg0/xen1.example.com-swap
VG Name vg0
LV UUID 0sVqfr-TUoJ-FLeo-qgVn-HIiy-lIeF-dSi3gn
LV Write Access read/write
LV Status available
# open 0
LV Size 256.00 MB
Current LE 64
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
--- Logical volume ---
LV Name /dev/vg0/xen1.example.com-disk
VG Name vg0
LV UUID otgxt7-T5cW-zaxd-y7x3-qwnp-gbmo-oriRLt
LV Write Access read/write
LV Status available
# open 0
LV Size 4.00 GB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:3
root@server1:~#
Посмотрим конфигурационный файл виртуальной машины - /etc/xen/xen1.example.com.cfg.
vi /etc/xen/xen1.example.com.cfg
#
# Configuration file for the Xen instance xen1.example.com, created
# by xen-tools 3.9 on Fri Feb 13 00:47:09 2009.
#
#
# Kernel + memory size
#
kernel = '/boot/vmlinuz-2.6.27-11-server'
ramdisk = '/boot/initrd.img-2.6.27-11-server'
memory = '256'
#
# Disk device(s).
#
root = '/dev/xvda2 ro'
disk = [
'phy:/dev/vg0/xen1.example.com-swap,xvda1,w',
'phy:/dev/vg0/xen1.example.com-disk,xvda2,w',
]
#
# Hostname
#
name = 'xen1.example.com'
#
# Networking
#
vif = [ 'ip=192.168.0.101,mac=00:16:3E:BF:02:B9' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
Обратите внимание: если у вас dual-core или quad-core CPU и вы хотите,
чтобы виртуальная машина использовала все ядра процессора, то добавьте
к файлу конфигурации vcpus = '2' или vcpus = '4'.
Если вы сравните с примером выше, то увидите, что при использовании
файла в качестве хранилища, соответствующая строка будет выглядеть как
disk = [ 'file:/path/to/xen1.example.com/disk.img,xvda1,w',
'file:/path/to/xen1.example.com/swap.img,xvda2,w' ]. Перед первым
запуском виртуальной машины вам необходимо примонтировать хранилище и
скопировать в него ядро domU (команда xen-create-image скопировала в
виртуальную машину ядро dom0 kernel 2.6.27.5, а нам его необходимо
заменить на 2.6.27-11-server).
mount /dev/vg0/xen1.example.com-disk /mnt
cd /mnt/lib/modules/
cp -pfr /lib/modules/2.6.27-11-server/ .
cd
umount /mnt
Все остальные шаги повторяют наши действия в прошлой главе.
Ссылки:
* Xen: http://www.xensource.com/xen/
* xen-tools: http://xen-tools.org/software/xen-tools
* Ubuntu: http://www.ubuntu.com/