XEN. Enterprise виртуализация дома

Описанное ниже проводилось на операционной системе Gentoo GNU/Linux, но может быть использованно для других Linux-дистрибутивов с поправками на систему пакетов и расположение конфигурационных файлов. Материал расчитан на начинающих пользователей Gentoo GNU/Linux. В статье описано как подготовить платформу виртуализации XEN на программном RAID5 массиве с LVM. Материал готовился по памяти и может содержать ошибки и недочеты, если вы нашли ошибку, или у вас что-то не получается, свяжитесь со мной, статья будет исправлена.

Имеем:
- AMD Phenom(tm) II X4 925 Processor;
- 4GB DDR3;
- 4 HDD Hitachi 320GB;
- 1 HDD Seagate 10GB.
- Проинсталлированную базовую систему Gentoo GNU/Linux на HDD Seagate.

Хотим получить:
Полигон для изучения операционных систем;

Готовим программный RAID5-массив.

Практически все современные, даже самые дешевые материнские платы оснащены аппаратным RAID контроллером. Но использовать мы его не будем. Почему? Во первых контроллер не является в полной мере аппаратным, и такие контроллеры смело можно назвать недо-RAID-ами. Во вторых, скорее всего, бортовой контроллер не умеет RAID5. В третих, информация о массиве хранится в BIOS вашего контроллера, и если вдруг с ним что-то произойдет, вы лишитесь всех ваших данных, восстановить их будет очень не просто. В четвертых, данный массив можно успешно использовать с другими дистрибутивами Linux на другом железе. Вы сможете легко принести корзину с вашими дисками другу, главное чтоб нашлось место для 4-х SATA дисков. Недостатком данной реализации является то, что все операции с дисковым пространством ложатся на центральный процессор, по этому с процессорами прошлых поколений (Intel Pentium 4, AMD Athlon XP и т.п.) будут наблюдаться значительные тормоза, особенно при операциях записи и удаления. RAID5 позволит объеденить наши 4 диска в массив. При этом если один из дисков выйдет из строя, достаточно будет его заменить на испраный, вся ваша информация останется в целости и сохранности. Итак, приступим:

Устанавливаем genkernel, если еще не установлен, ядро будем собирать именно им, тем кто привык собирать ядро руками, может пропустить этот шаг.

# emerge genkernel

собираем ядро:

genkernel --menuconfig --lvm --no-clean all

После чего появится меню конфигуратора. Движемся в следующем направлении:

Device Drivers --->
Multiple devices driver support (RAID and LVM) --->

После чего приводим конфиг примерно в следующее состояние:

--- Multiple devices driver support (RAID and LVM)
<*> RAID support
[*] Autodetect RAID arrays during kernel boot
<*> RAID-4/RAID-5/RAID-6 mode
<*> Multipath I/O support
<*> Faulty test module for MD
<*> Device mapper support
[ ] Device mapper debugging support
<*> Crypt target support
<*> Snapshot target
<*> Zero target
<*> Multipath target
[*] DM uevents (EXPERIMENTAL)

Выходим из конфигуратора и ждем окончания компиляции ядра.
Перезагружаемся. Теперь наше ядро поддерживает вожделенный программный RAID5 и LVM. Теперь разметим наши диски для использования.

Определим какие имена выделила система для дисков:

# fdisk -l


Disk /dev/sda: 10.0 GB, 10005037056 bytes
255 heads, 63 sectors/track, 1216 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00016219


Device Boot Start End Blocks Id System
/dev/sda1 1 31 248976 83 Linux
/dev/sda2 32 1216 9518512+ 83 Linux


Disk /dev/sdb: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00088b14


Device Boot Start End Blocks Id System


Disk /dev/sdc: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00085b44


Device Boot Start End Blocks Id System


Disk /dev/sdd: 320.1 GB, 320072933376 bytes
16 heads, 63 sectors/track, 620181 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3131dd3f


Device Boot Start End Blocks Id System


Disk /dev/sde: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00082d56

Device Boot Start End Blocks Id System

В моем случае на устройстве sda развернута ОС, а диски sdb-sde наш будущий массив. Создаем на устройствах sdb-sde разделы, и указываем тип раздела Linux raid autodetect. Это можно сделать утилитами fdisk, либо cfdisk. После чего вывод fdisk -l принимает следующий вид:


# fdisk -l


Disk /dev/sda: 10.0 GB, 10005037056 bytes
255 heads, 63 sectors/track, 1216 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00016219


Device Boot Start End Blocks Id System
/dev/sda1 1 31 248976 83 Linux
/dev/sda2 32 1216 9518512+ 83 Linux


Disk /dev/sdb: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00088b14

Device Boot Start End Blocks Id System
/dev/sdb1 1 38913 312568641 fd Linux raid autodetect

Disk /dev/sdc: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00085b44

Device Boot Start End Blocks Id System
/dev/sdc1 1 38913 312568641 fd Linux raid autodetect

Disk /dev/sdd: 320.1 GB, 320072933376 bytes
16 heads, 63 sectors/track, 620181 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3131dd3f

Device Boot Start End Blocks Id System
/dev/sdd1 1 620181 312571192+ fd Linux raid autodetect

Disk /dev/sde: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00082d56

Device Boot Start End Blocks Id System
/dev/sde1 * 1 38913 312568641 fd Linux raid autodetect

Теперь разделы готовы к работе. Устанавливаем утилиту mdadm:

# emerge sys-fs/mdadm

Далее приступим к созданию логического устройства md:

mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

Информацию по состоянию массива можно получить командой cat /proc/mdstat, после сборки и инициализации имеем примерно следующий вывод:

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md0 : active raid5 sdc1[0] sde1[3] sdd1[2] sdb1[1]
937705728 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

unused devices:

Далее приступим к настройке LVM. LVM позволит нам создавать и изменять разделы на устройстве /dev/md0. Установим утилиту управления логичесткими томами

# emerge sys-fs/lvm2

После установки необходимо разметить /dev/md0 для использования lvm:

# pvcreate /dev/md0

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

vgcreate data /dev/md0 -s 1024M

Группа томов разделена на порции данных — экстенты, теоретически, чем больше размер экстента, тем меньше фрагментация данных по экстентам. Ключом -s устанавливаем размер экстента в 1 гигабайт.

Активируем группу томов:

# vgchange -a y data

Теперь мы можем создать наш первый том, после чего смонтировать его в желанное место. Но не будем торопиться.

Установка XEN.
Терминология XEN.
Domain0 — привелигированный домен, из под него производится управление гостевыми системами
DomainU — непривелигированный домен, по сути гостевая система.

XEN может исполнять правиртуальные домены и домены HVM. Паравиртуальный домен требует модификации ядра. Именно его мы и будем использовать для linux-гостей. Домен HVM требует поддержки аппаратной виртуализации процессором, которая реализована дополнительными инструкциями ЦПУ. Следует заметить, что поддержки аппаратной виртуализации процессором не достаточно, так же требуется поддержка на уровне BIOS. Часто встречаются материнские платы, которые не имеют этой поддержки, не смотря на то что в ЦПУ она присутствует. Такие случаи требуют прошивки BIOS, причем как правило не официальной прошивкой, что конечно же связано с риском угробить материнскую плату. Если вы собрались покупать десктоповое железо с целью использовать его как сервер виртуализаци, настоятельно рекомендую обратить внимание на этот факт. Далеко не все такие BIOS-ы имеют модифицированные прошивки, по этому разочарование может быть огромным.

Для запуска виртуальных машин нам потребуется ядро linux с поддержкой XEN и утилиты управления. В дистрибутиве Gentoo эти пакеты замаскированы, другими словами разработчики не гарантируют работу этих пакетов. Тем не менее, могу вас заверить, на заявленном мною железе все это работает, и работает стабильно. Более того я использую XEN на gentoo на работе в отказоустойчивом кластере на 2-х серверах HP Proliant DL160, думаю это убедит вас в том что система очень стабильна. Для установки размаскируем необходимые пакеты:

# echo «app-emulation/xen ~amd64» >> /etc/portage/package.keywords
# echo «app-emulation/xen-tools ~amd64» >> /etc/portage/package.keywords
# echo «sys-kernel/xen-sources ~amd64» >> /etc/portage/package.keywords

После чего мы имеем возможность все это установить:

# emerge app-emulation/xen app-emulation/xen-tools sys-kernel/xen-sources

После установки нам опять необходимо собрать ядро. Наверное у вас возникнет вопрос: «Черт! Опять? Почему нельзя было сделать это сразу?!». А потому что сейчас у нас есть рабочее ядро, и если ядро с XEN не соберется, или соберется не так, либо сломается, у вас будет возможность обойтись без LiveCD. В отличии от стандартного ядра, ядро с XEN нельзя собрать утилитой genkernel, по этому собирать его придется руками, что совсем не так страшно как вам может показаться:

# cd /usr/src/linux-2.6.34-xen
# make clean
# make mrproper
# make menuconfig

После чего мы попадем в уже знакомый нам конфигуратор ядра. Идем сюда:

Device Drivers --->
XEN --->

Мой конфиг имеет следующий вид:

[*] Privileged Guest (domain 0)
<*> Backend driver support
<*> Block-device backend driver
<*> Block-device tap backend driver
<*> Block-device tap backend driver 2
<*> Network-device backend driver
(8) Maximum simultaneous transmit requests (as a power of 2)
[ ] Pipelined transmitter (DANGEROUS)
< > Network-device loopback driver
<*> PCI-device backend driver
PCI Backend Mode (Virtual PCI) --->
[ ] PCI Backend Debugging
< > TPM-device backend driver
SCSI backend driver
USB backend driver
<*> Block-device frontend driver
<*> Network-device frontend driver
< > Network-device frontend driver acceleration for Solarflare NICs
SCSI frontend driver
USB frontend driver
[*] Taking the HCD statistics (for debug)
[ ] HCD suspend/resume support (DO NOT USE)
<*> User-space granted page access driver
<*> Framebuffer-device frontend driver
<*> Keyboard-device frontend driver
[ ] Disable serial port drivers
<*> Export Xen attributes in sysfs
(256) Number of guest devices
Xen version compatibility (3.3.0 and later) --->
[*] Place shared vCPU info in per-CPU storage

Но это еще не все. Поскольку в этом ядре мы не будем использовать busybox и initrd, вам необходимо включить жизненно важный драйвер для контроллера HDD в ядро, а так же не забыть это сделать с файловой системой для корневого раздела, заодно можно и отключить поддержку всего остального железа, которого у вас нет. С этим вам придется разбираться самостоятельно, т.к. железо у всех разное. Хочу напомнить, что у нас уже есть RAID массив и LVM, по этому не забываем включить их в ядро.

Приступаем к сборке:

# make
# make modules_install
# mount /boot/
# cp vmlinux /boot/

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

# vi /boot/grub/menu.lst

мой конфиг имеет следующий вид:

default 0
timeout 30
#splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title XEN 4.0.0. Kernel 2.6.34
root (hd0,0)
kernel /boot/xen.gz
module /boot/vmlinux root=/dev/sda2 ro console=tty0
savedefault

title Gentoo Linux 2.6.31-r10
root (hd0,0)
kernel /boot/kernel-genkernel-x86_64-2.6.31-gentoo-r10 root=/dev/ram0 real_root=/dev/sda2
initrd /boot/initramfs-genkernel-x86_64-2.6.31-gentoo-r10

# vim:ft=conf:

После чего сохраняем конфиг и перезагружаем систему. Если вы правильно сконфигурировали ядро, то система должна без проблем загрузиться. В противном случае анализируйте ошибки загрузки и ищите причину. Как я уже писал, XEN работоспособен, весьма стабилен и готов к использованию в бою. После загрузки необходимо запустить демон xend:

# /etc/init.d/xend start

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

# rc-update add xend default

так же не забываем про будующие гостевые системы:

# rc-update add xendomains default

Далее вам нужно создать логический том LVM и развернуть на него базовую систему Gentoo. Я не буду описывать здесь процесс установки, он крайне схож с процессом установки системы на реальное железо. Единственное что необходимо иметь в виду, что разворачиваете вы его на том LVM и ядро собирать не нужно. Я рекомендую вам создать отдельную директорию для гостевых ядер и точек монтирования, чтоб соблюдать порядок и не лезть в конфиг машины, только для того чтоб выяснить где же лежит ее ядро. Так же рекомендую всегда держать машину-шаблон, из нее мы будем разворачивать базовую систему для новых гостей, избегая длительной компиляции.

# mkdir /domU
# mkdir /domU/mpoints
# mkdir /domU/kernels
# mkdir /domU/mpoints/template
# mkdir /domU/kernel/template

Думаю коментарии по назначению каталогов излишни. И так создаем том для машины-шаблона:

# lvcreate -n template -l 8 data

тем самым мы содали том с именем template, и размером в 8 экстентов, как вы помните размер экстента равен 1ГБ, корневая система для будущего гостя будет иметь размер 8ГБ. Теперь необходимо рзметить файловую систему и смонтировать ее. Я использую ReiserFS:

# mkreiserfs /dev/data/template
# mount /dev/data/template /domU/mpoints/template

Разворачиваем базовую систему в /domU/mpoints/template

Далее нам необходимо собрать ядро для гостевой системы, конфиг ядра несколько отличается от конфига Dom0, по этому чтоб не его не трогать копируем ядро в другую директорию и собираем ядро для DomU

# cd /usr/src
# cp linux-2.6.34-xen linux-2.6.34-xen-domU
# cd linux-2.6.34-xen-domU
# make clean
# make mrproper
# make menuconfig

И опять знакомый конфигуратор:

Device Drivers --->
XEN --->

Мой конфиг:

[ ] Privileged Guest (domain 0)
<*> Backend driver support
<*> Block-device backend driver
<*> Block-device tap backend driver
<*> Block-device tap backend driver 2
<*> Network-device backend driver
(8) Maximum simultaneous transmit requests (as a power of 2)
[ ] Pipelined transmitter (DANGEROUS)
< > Network-device loopback driver
< > TPM-device backend driver
<*> Block-device frontend driver
<*> Network-device frontend driver
< > Network-device frontend driver acceleration for Solarflare NICs
<*> User-space granted page access driver
<*> Framebuffer-device frontend driver
<*> Keyboard-device frontend driver
[ ] Disable serial port drivers
<*> Export Xen attributes in sysfs
(256) Number of guest devices
Xen version compatibility (3.4.0 and later) --->
[*] Place shared vCPU info in per-CPU storage

Далее отключаем ВСЕ контроллеры HDD, иначе гость попросту не запустится:

< > ATA/ATAPI/MFM/RLL support --->
< > Serial ATA (prod) and Parallel ATA (experimental) drivers --->

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

# make

не торопитесь писать make modules_install, иначе вы затрете модули Dom0. Прежде:

# export INSTALL_MOD_PATH=«/domU/mpoints/template»
# make modules_install
# export INSTALL_MOD_PATH=«»

Копируем собранное ядро и конфиг в заранее подготовленные директории:

# cp vmlinux /domU/kernels/template/
# cp .config /domU/kernels/template/config

сборку гостя можно считать завершенной. Следующим шагом станет конфигурация сети, ибо гость без оной бесполезен.

Настройка сети.

Есть несколько вариантов настройки сети для гостевых систем XEN, я рассмотрю лишь один из них, на мой взгляд самый лучший — с использованием моста (bridge). Говоря образно, бридж можно рассматривать как виртуальный коммутатор, к которому подключен физический сетевой интерфейс. Туда же будут подключаться виртуальные сетевые интерфейсы гостевых систем.

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

Для создания моста есть 2 способа: первый — описать мост в /etc/conf.d/net и перезагрузить систему, воторой — описать мост в /etc/conf.d/net и создать его утилитой brctl без перезагрузки системы. Поскольку, как я уже говорил, я описываю установку и конфигурацию XEN по памяти, по этому мог допустить ошибки, когда описывал создание моста. Если у вас ничего не выйдет, напишите замечания, и я просто поправлю статью. Итак, приступим:

описываем мост в /etc/conf.d/net:

# vi /etc/conf.d/net

мой конфиг:

# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d. To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).

bridge_peth0="eth0"
config_eth0=( "null" )
config_peth0=( "192.168.5.3/24" )

Перезагружаем систему, либо создаем мост руками:

# ifconfig eth0 0.0.0.0
# brctl addbr peth0
# brctl addif peth0 eth0
# ifconfig peth0 192.168.5.3

Полагаю понятно, что ip адрес здесь должен быть ваш. Теперь проверим настройки:

# ifconfig
eth0 Link encap:Ethernet HWaddr e0:cb:4e:c2:35:a9
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:148433 errors:0 dropped:0 overruns:0 frame:0
TX packets:152925 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:123201561 (117.4 MiB) TX bytes:107735051 (102.7 MiB)
Interrupt:252 Base address:0xa000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:85 errors:0 dropped:0 overruns:0 frame:0
TX packets:85 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7780 (7.5 KiB) TX bytes:7780 (7.5 KiB)

peth0 Link encap:Ethernet HWaddr b6:9a:1d:62:81:ad
inet addr:192.168.5.3 Bcast:192.168.5.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49249 errors:0 dropped:0 overruns:0 frame:0
TX packets:21787 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3139959 (2.9 MiB) TX bytes:93174152 (88.8 MiB)

# ping 192.168.5.3
PING 192.168.5.3 (192.168.5.3) 56(84) bytes of data.
64 bytes from 192.168.5.3: icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from 192.168.5.3: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 192.168.5.3: icmp_seq=3 ttl=64 time=0.040 ms
64 bytes from 192.168.5.3: icmp_seq=4 ttl=64 time=0.041 ms
64 bytes from 192.168.5.3: icmp_seq=5 ttl=64 time=0.040 ms
^C
--- 192.168.5.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 0.040/0.044/0.062/0.011 ms

Как видим, все работает. Настало время приступить к созданию конфигурационного файла гостя. Файл будем создавать на основе имеющихся примеров:

# cd /etc/xen
# cp xmexample1 template
# vi template

Приступаем к редактированию:

kernel = "/domU/kernels/template/vmlinux"
memory = 192
name = "template"
cpus = "1"
vcpus = 1
vif = [ 'type=virtio,mac=e0:cb:4e:c2:35:aa,bridge=peth0' ]
disk = ['phy:/dev/data/template,sda1,w', 'phy:/dev/data/template-swap,sda2,w']
root = "/dev/sda1 rw"
extra = 'xencons=tty'

Далее необходимо поправить /etc/fstab гостя, чтоб он знал какими русерсами располагает. Мой fstab выглядит так:

# /etc/fstab: static file system information.
#
# noatime turns off atimes for increased performance (atimes normally aren't
# needed; notail increases performance of ReiserFS (at the expense of storage
# efficiency). It's safe to drop the noatime options if you want and to
# switch between notail / tail freely.
#
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# See the manpage fstab(5) for more information.
#

#

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
#/dev/BOOT /boot ext2 noauto,noatime 1 2
/dev/sda1 / reiserfs noatime 0 1
/dev/sda2 none swap sw 0 0
#/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
#/dev/fd0 /mnt/floppy auto noauto 0 0

# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for
# POSIX shared memory (shm_open, shm_unlink).
# (tmpfs is a dynamically expandable/shrinkable ramdisk, and will
# use almost no memory if not populated with files)
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0

Ну вот, настало время запустить и проверить нашу гостевую систему:

# umount /domU/mpoints/template
# cd /etc/xen
# xm create -c template

Using config file "./template".
Started domain template (id=4)
Initializing cgroup subsys cpuset
Linux version 2.6.34-xen (root@cyber-mind) (gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5) ) #17 SMP Sun Feb 28 23:15:01 YEKT 2010
Reserving virtual address space above 0xf5800000
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
NSC Geode by NSC
Cyrix CyrixInstead
Centaur CentaurHauls
Transmeta GenuineTMx86
Transmeta TransmetaCPU
Xen-provided physical RAM map:
Xen: 0000000000000000 - 0000000008800000 (usable)
last_pfn = 0x8800 max_arch_pfn = 0x10000000
NX (Execute Disable) protection: active
0MB HIGHMEM available.
136MB LOWMEM available.
mapped low ram: 0 - 08800000
low ram: 00000000 - 08800000
bootmap 00000000 - 00001000
(4 early reservations) ==> bootmem [0000000000 - 0008000000]
#0 [000020000
#1 [0000590000 - 00005b9000] Xen provided ==> [0000590000 - 00005b9000]
#2 [00005b9000 - 00005fc000] PGTABLE ==> [00005b9000 - 00005fc000]
#3 [0000000000 - 0000001000] BOOTMAP ==> [0000000000 - 0000001000]
Zone PFN ranges:
DMA 0x00000000 -> 0x00001000
Normal 0x00001000 -> 0x00008800
HighMem 0x00008800 -> 0x00008800
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x00000000 -> 0x00008800
NR_CPUS:32 nr_cpumask_bits:32 nr_cpu_ids:1 nr_node_ids:1
PERCPU: Allocating 28672 bytes of per cpu data
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 34544
Kernel command line: root=/dev/sda1 rw xencons=tty
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
Experimental hierarchical RCU implementation.
Experimental hierarchical RCU init done.
PID hash table entries: 1024 (order: 10, 4096 bytes)
Xen reported: 2812.846 MHz processor.
Console: colour dummy device 80x25
console [tty0] enabled
console [tty-1] enabled
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Software IO TLB disabled
Software IO TLB disabled
Memory: 125480k/139264k available (2253k kernel code, 5436k reserved, 833k data, 184k init, 0k highmem)
virtual kernel memory layout:
fixmap : 0xf555a000 - 0xf57ff000 (2708 kB)
pkmap : 0xf5000000 - 0xf5200000 (2048 kB)
vmalloc : 0xc9000000 - 0xf4ffe000 ( 703 MB)
lowmem : 0xc0000000 - 0xc8800000 ( 136 MB)
.init : 0xc050a000 - 0xc0538000 ( 184 kB)
.data : 0xc0433621 - 0xc0503b64 ( 833 kB)
.text : 0xc0200000 - 0xc0433621 (2253 kB)
Checking if this processor honours the WP bit even in supervisor mode...Ok.
Calibrating delay using timer specific routine.. 5626.94 BogoMIPS (lpj=28134728)
Mount-cache hash table entries: 512
Initializing cgroup subsys ns
Initializing cgroup subsys cpuacct
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 512K (64 bytes/line)
Checking 'hlt' instruction... OK.
SMP alternatives: switching to UP code
Freeing SMP alternatives: 13k freed
Brought up 1 CPUs
net_namespace: 740 bytes
NET: Registered protocol family 16
Brought up 1 CPUs
PCI: Fatal: No config space access function found
PCI: setting up Xen PCI frontend stub
bio: create slab at 0
suspend: event channel 8
xen_mem: Initialising balloon driver.
SCSI subsystem initialized
PCI: System does not support PCI
PCI: System does not support PCI
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
NET: Registered protocol family 1
platform rtc_cmos: registered platform RTC device (no PNP device found)
audit: initializing netlink socket (disabled)
type=2000 audit(1283001195.797:1): initialized
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
msgmni has been set to 256
alg: No test for stdrng (krng)
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
brd: module loaded
loop: module loaded
Compaq SMART2 Driver (v 2.6.0)
HP CISS Driver (v 3.6.20)
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky
Xen virtual console successfully installed as tty1
Event-channel device installed.
netfront: Initialising virtual ethernet driver.
Uniform Multi-Platform E-IDE driver
ide_generic: please use "probe_mask=0x3f" module parameter for probing all legacy ISA IDE ports
xen-vbd: registered block device major 8
blkfront: sda1: barriers enabled
blkfront: sda2: barriers enabled
Failed to obtain physical IRQ 14
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
Failed to obtain physical IRQ 15
ide1 at 0x170-0x177,0x376 on irq 15
ide-gd driver 1.18
ide-cd driver 5.00
register_blkdev: cannot get major 8 for sd
Driver 'sd' needs updating - please use bus_type methods
i8042.c: No controller found.
mice: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
Bridge firewalling registered
Using IPI No-Shortcut mode
registered taskstats version 1
XENBUS: Device with no driver: device/console/0
ReiserFS: sda1: found reiserfs format "3.6" with standard journal
ReiserFS: sda1: using ordered data mode
ReiserFS: sda1: journal params: device sda1, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30
ReiserFS: sda1: checking transaction log (sda1)
ReiserFS: sda1: Using r5 hash to sort names
VFS: Mounted root (reiserfs filesystem) on device 8:1.
Freeing unused kernel memory: 184k freed
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
INIT: version 2.87 booting

Gentoo Linux; http://www.gentoo.org/
Copyright 1999-2009 Gentoo Foundation; Distributed under the GPLv2

Press I to enter interactive boot mode

* Mounting proc at /proc ... [ ok ]
* Mounting sysfs at /sys ... [ ok ]
* Mounting /dev ... [ ok ]
* Starting udevd ... [ ok ]
* Populating /dev with existing devices through uevents ... [ ok ]
* Waiting for uevents to be processed ... [ ok ]
* Mounting devpts at /dev/pts ... [ ok ]
* Remounting root filesystem read-only ... [ ok ]
* Checking root filesystem ...Reiserfs super block in block 16 on 0x801 of format 3.6 with standard journal
Blocks (total/free): 1048576/82255 by 4096 bytes
Filesystem is clean
Filesystem seems mounted read-only. Skipping journal replay.
Checking internal tree..finished
[ ok ]
* Remounting root filesystem read/write ... [ ok ]
* Mounting local filesystems ... [ ok ]
* Activating (possible) swap ... [ ok ]
* Setting system clock using the hardware clock [xen] ... [ ok ]
* Configuring kernel parameters ... [ ok ]
* Cleaning /var/lock, /var/run ... [ ok ]
* Wiping /tmp directory ... [ ok ]
* Device initiated services: net.eth0
* Setting hostname to NetStarter ... [ ok ]
* Loading key mappings ... [ ok ]
* Setting user font ... [ ok ]
* Starting lo
* Bringing up lo
* 127.0.0.1/8
[ ok ]
* Adding routes
* 127.0.0.0/8 ... [ ok ]
* Starting eth0
* Bringing up eth0
* 192.168.5.5
[ ok ]
* Adding routes
* default via 192.168.5.1 ... [ ok ]
* Initializing random number generator ... [ ok ]
INIT: Entering runlevel: 3
* Starting sshd ... [ ok ]
* Starting vixie-cron ... [ ok ]
* Starting local ... [ ok ]

This is template.unknown_domain (Linux x86_64 2.6.34-xen) 13:13:31

template login:

Теперь мы имеем рабочую платформу виртуализации и машину-шаблон. Конечно XEN можно использовать не только для изучения операционных систем. Вы можете разворачивать новые машины с отлаженными сервисами для постоянной работы, а эксперименты никак не повлияют на их работу. Паравиртуальные гости XEN имеют производительность сравнимую с производительностью железа на котором они исполняются (95-98% от реального железа). Используемое мною железо может обслуживать более 10-ти гостей в домашних условиях. На производительность влияет количество ядер ЦПУ и объем оперативной памяти. Естественно - чем больше тем лучше.

9.77778
в среднем: 9.8 (9 votes)
Гость
Спасибо
9

Отличная статья, добавил в закладки. Еще бы было интересно почитать про работу с полноценными рейд контроллерами рейд массивами, в случае проблем с дисками в массиве.

Гость
Статья супер! Спасибо за
10

Статья супер! Спасибо за гигантскую работу, вас еще экспертом на oslinux.ru не назначили?

Просто, я смотрю, банера вашего нет.

nrg
nrg аватар
User offline. Last seen 1 год 21 неделя ago. Offline
Зарегистрирован: 09/24/2009
Благодарю за положительные

Благодарю за положительные отзывы.
Нет, не назначили, это моя первая статья.

Ждите продолжения :)

Гость
Надо же, на опеннет статью
10

Надо же, на опеннет статью взяли!

Гость
Поздравляем с первой
10

Поздравляю с первой публикацией!

sa
sa аватар
User offline. Last seen 5 дней 1 час ago. Offline
Зарегистрирован: 05/11/2008
nrg, прошу продолжить вашу
10

nrg, прошу продолжить вашу серию, понимаю что это хлопотно, но интересно!

Статус эксперта присваевается после 3-х публикаций

______________________________
In the world without walls, who needs windows?

Гость
гуд
10

При этом если один из дисков выйдет из строя, достаточно будет его заменить на испраный

Гость
про xen-bridge
9

статья отличная.
Я уже пару месяцев бьюсь над следующей проблемой:
устанавливал xen-3.4 ,xen-4.0 (с более старыми- xen-3.2 все нормально), причем не важно в какой системе, перепробовал кучу всевозможных систем разных версий - Ubuntu, Fedora, CentOS, Oracl VM-server. Проблема в следующем:
xen ставлю на iSCSI,
загрузку делал сначала ч/з сетевую карточку Intel PRO/1000 GT Desktop Adapter PWLA8391GT ч/з gPXE потом. решив что gPXE кривой,
взял Intel E1G42ET Dual Server Adapter (iSCSI remote boot).
Эффект один - в конце загрузки xen-a
он запускает xen-bridge и перемонтирует файловую систему- / (а на ней лежат и /var и /tmp) в состояние
read-only. После этого, естественно, сам xen полностью не стартует, идет ругань питоновских скриптов на
read-only /var и /tmp. При этом, после старта системы, mount показывает, что все ФС - rw, но попытка создать где-либо файл или директорию заканчивается выводом сообщения, что ФС - read-only.
Попытка перенести /var, /tmp на отдельные партиции, при инсталляции, ни к чему не привели.
Подскажите, пожалуйста - где отключить старт xen-овского bridg-a, чтобы использовать системный bridge?

nrg
nrg аватар
User offline. Last seen 1 год 21 неделя ago. Offline
Зарегистрирован: 09/24/2009
в
10

в /etc/xen/xend-config.sxp

зкоментировать все строки типа

(network-script network-bridge)
(vif-script vif-bridge)
(vif-script vif-nat)
(vif-script vif-route)

т.е. любые упоминания о сетях для гостевых систем

После чего xend не будет поднимать свой бридж. К сожалению я сразу не написал этого в статье, не смотря на то что использовал возможности ОС для поднятия бриджа. Свяжусь с администрацией и поправлю

srgaz аватар
User offline. Last seen 17 недель 1 день ago. Offline
Зарегистрирован: 05/14/2008
Замечательно.
10

Нравиться мне хавто на Gentoo, за то что, все до корня, все до мелочи. Установка на CentOS или Debian куда проще, но не все так до тютельки.
Уже доступна в RHEL связка SPICE+KVM, притом есть официальные дрова от мелких и красно шляпных, и клиенты для обоих ОЗ)). Вот опробую все в работе. Пока в тесте... все замечательно.

______________________________
Who killed Kenny ??

User offline. Last seen 1 год 10 недель ago. Offline
Зарегистрирован: 10/16/2010
Спасибо
10

Спасибо за материал, было интересно ознакомиться. Будете ли вы в дальнейшем развивать тематику? Может быть вам нужны редакторы для сайта? Готов внести свою лепту в ваше развития :)

sa
sa аватар
User offline. Last seen 5 дней 1 час ago. Offline
Зарегистрирован: 05/11/2008
> Готов внести свою лепту в

> Готов внести свою лепту в ваше развития :)

Добро пожаловать, пишите, у нас всегда пожалуйста.

______________________________
In the world without walls, who needs windows?