?

Log in

xen_hypervisor

Xen server своими руками

« previous entry |
Oct. 24th, 2008 | 03:23 pm
posted by: felvis in xen_hypervisor

Большинство людей пользуют для виртуализации VmWare или VirtualBox редко кто Qemu.
В том числе и под Win x32\x64 платформой они очень популярны. Творение The Sun даже понимает аппаратную поддержку Intel VT.
Но я бы хотел поговорить о реальной альтернативе на Linux платформах - Xen.
Тем более что он присутствует в репозиториях Ubuntu\Debian.


Ставим Xen на сервер


Для полной совместимости и возможности использовать все функции нам нужна аппаратная поддержка со стороны сервера.
Intel VT (Virtualization Technology, aka Vanderpool): Selected Pentium 4 and Pentium D,
Xeon 5000 and later, Xeon LV, Core Duo, Core 2 Duo, and Core 2 Quad processors
AMD - V/SVM (Virtualization/Secure Virtual Machine, aka Pacifica): Selected Athlon, Opteron,
and Turion Socket F and AM2 processors

Intel VT - поддерживается во всех Cor2Duo, так что это не проблема. Желательно зайти в BIOS и проверить включен ли.
Аппаратная совместимость позволит нам запускать не модифицированные ОС (читай Win XP и прочее )

sudo uname -a
получаем версию ядра - 2.6.24-19-generic, это нам пригодится позже

Ставим Xen на наш Ubuntu server 8.04.1 x64

sudo aptitude ubuntu-xen-server

подтвердить установку всех запрошенных пакетов.
Ждем конца установки.

sudo reboot

После старта сервера в удачном случае вы должны увидить что система на новом ядре Xen.
sudo uname -a

Видим что теперь ядро называется - 2.6.24-19-xen - как раз то что нам нужно.

Гипервизор Xen запускает саму Ос Ubuntu уже на своем ядре.

felvis@felvis-desktop:/home# sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   2048    8     r----- 167826.8


Эта команда показывает что демон Xend запущен и работает, запустив основную систему и показывая ее состояние.

Система готова для инсталяции гостевых ОС (далее DomU)

Готовим систему к установке DomU


Начнем по пунктам.

1. Дальше следует определить места хранения конфиг. файлов
Конфиги складываем в раздел </h2>
/etc/xen/config - папки config там нет - создаем.
И не забываем там держать конфиги всех систем и парочку чистых.

2. На каких носителях у нас будут DomU - Lvm или физические образы диском созданные dd или qemu.
Изначально я только за LVM. и потому что они быстрее чем просто образы прилепленные в
/dev/loop и потому что бекап их существенно проще и приятней чем все что может быть ;)
Остановлюсь на этом примере. Кому инетесно могу потом дополнить примером работы с физическим
образом.

Для того чтобы создать раздел LVM нам нужен отдельный раздел на винтчестере. Желательно его
наличие продумать изначально и с запасом места, потому как там будут храниться образы lvm и он
будет не доступен для хранения там чего-либо еще.
Допустим у нас есть такой раздел /dev/sdb6 и размер его 270 Гб.

Ставим сам lvm

sudo aptitude install lvm2

sudo reboot (не требуется, скорее на всякий случай)

Если после ребута LVM выдает ошибку то нада подгрузить модуль в ядро:

sudo modprobe dm_mod modprobe dm_mirror modprobe dm_snapshot

Актуально для Ubuntu 8.04.1 в том числе.

После перезагрузки инициализируем поодержку LVM этим разделом

felvis@felvis-desktop:~$ sudo pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created


Создаем группу томов которую назовем vg (раз уж это называет virtual group)
felvis@felvis-desktop:~$ sudo vgcreate vg /dev/sdb
  Volume group "vg" successfully created


Все, создаем образ который будет виден в системе как физический и можно ставить туда Win XP например.

felvis@felvis-desktop:/home# sudo lvcreate -L10240M -n hdd vg
  Logical volume "hdd" created

felvis@felvis-desktop:/home# sudo lvs
  LV           VG   Attr   LSize  Origin Snap%  Move Log Copy%
  hdd          vg   -wi-a-  10.00G


В списке устройств появилось устройство /dev/vg/hdd
Все, можно начинать ставить. Винтчестер у нас уже есть ;)


3. Бэкап. как делать и куда складывать.

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

Предположим бекап остается у нас на винте, варианты куда положить оч индивидуальны.
Складывать мы будем в /mnt/backup
Первое что мы делаем - снепшот - снимок образа в "замороженном" состоянии.
sudo lvcreate -L10G -s -n back-image /dev/vg/hdd
   Logical volume "back-image" created


А дальше знакомая всем команда dd

sudo dd if=/dev/vg/hdd bs=1024000 | gzip -cf > /mnt/backup/hdd.gz;

Если после этого вам необходимо будет восстановить из бекапа то ...

sudo gunzip -c hdd.gz | dd of=/dev/vg/hdd bs=1024000

Далее по желанию делаем скрипты для бекапа всех DomU и заносим в cron, тут уже каждый сам выбирает.



Установка DomU.

Итак.
У нас есть "харддрайв" под будующую WinXP виртуальную - /dev/vg/hdd - 10Gb
Теперь нам нужен образ Win для установки или диск. Лучше образ - практичнее.
Допустим у вас лицензия WinXP и есть диск с ней.
теперь пишем конфиг будующей машины

import os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'
kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
# сколькол памяти выделять будующей машине
memory = 386
# имя в xm list
name = "xp-test-1"
# кол-во процессоров с кот он будет работать
vcpus=2
#acpi=1
#apic=1
# мак адресс и через что он будет видеть сеть
vif = [ 'type=ioemu, mac=aa:3c:40:b0:01:11, bridge=xenbr0' ]
# физический диск (наш образ кот мы делали в lvm) и сдром (тут физический девайс cdrom основного сервака)
disk = [ 'phy:/dev/vg/hdd,ioemu:hda,w', 'phy:/dev/cdrom,ioemu:hdc:cdrom,r' ]
device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
# способ загрузки - dc - грузимся по умолчанию с сдрома, если там не загрузочный - с винта
boot="dc"
# всегда вывешивать vnc порт для доступа с основого сервера 
sdl=0
vnc=1
vncviewer=1
vncpasswd=''
ne2000=0


подробнее про конфиг можно узнат набрав
sudo xm create --help_config

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

disk = [ 'phy:/dev/vg/hdd,ioemu:hda,w', 'phy:/dev/cdrom,ioemu:hdc:cdrom,r' ]

мы меняем на

disk = [ 'phy:/dev/vg/hdd,ioemu:hda,w', 'phy:/dev/loop1,ioemu:hdc:cdrom,r' ]

предварительно смонтировав наш iso образ на вирутальное устройство /dev/loop1 (от 1 до 7 - смотря сколько свободных есть)

Назовем его winxp.hvm
Старайтесь не использовать лишних знаков в именах конфигов и именах машин в конфиге name = "xp-test-1"
Напимер бывают глюки с "_" в этих местах.

felvis@felvis-desktop:/etc/xen# losetup -a
/dev/loop4: [0801]:5955594 (/home/backup/daily/xp_second.dd)
/dev/loop6: [0801]:5955586 (/home/backup/daily/arch_back.dd)
/dev/loop7: [0801]:5955588 (/home/backup/daily/arch_17_00.dd)

felvis@felvis-desktop:/etc/xen# losetup /dev/loop1 /home/felvis/distr.iso



В мануале Xen написано что можно было бы указать напряму образ 'file:/full/path/to/vm1disk,hdc,r'
Но на bugzilla ubuntu можно найти кучу репортов на баг ... который делает это невозможным .
и кстати на данный момент не пофиксили. Так что мантируем в /dev/loop как диски cdrom так и образы винтов.

Теперь можно запускать установку WinXP )
cd /etc/xen/config
felvis@felvis-desktop:/etc/xen# sudo xm create arch-wiki.hvm
Using config file "./winxp.hvm".
VNC= 1
Started domain "xp-test-1"
felvis@felvis-desktop:/etc/xen# sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   577     8     r----- 186810.6
xp-test-1                                    1   386     2     -b----     15.1





Если у вас дистрибутив состоит из нескольких дисков, не беда
на лету можно перемаунтить источник cdrom на другой диск

felvis@felvis-desktop:/etc/xen# sudo xm block-configure 1 phy:/dev/null hdс:cdrom r
felvis@felvis-desktop:/etc/xen# sudo losetup -d /dev/loop1
felvis@felvis-desktop:/etc/xen# sudo losetup /dev/loop1 /home/felvis/distr2.iso
felvis@felvis-desktop:/etc/xen# sudo xm block-configure 1 phy:/dev/loop1 hdс:cdrom r



для того чтобы доставить ее, точнее вообще как-то попасть на нее нужно поставить пакет

sudo aptitude install xtightvncviewer

после этого виртуальная машина будет доступна на 0 порту vnc (соотв следующая поднятая машина на 1,2,3 и т.д.)

felvis@felvis-desktop:/etc/xen# vncviewer :0

и если вы под Х то у вас появится вид от первого лица на винду.
Если вы не под Х, а например через ssh сидите выход тоже есть - Xming.
Ставим эту программу туда где вы сидите под win. Она поможет вам отображать GUI окна запущенные в ssh.
Ставим Xming, запускаем ее.
На Ubuntu прописываем такую строку export DISPLAY=ваш ip:0.0
и теперь при запуске команды vncviewer через какую-нибудь putty вы получаете графическое окно из линукса.

Заканчиваем установку и радуемся вирутальной машине.


зыЖ для составляения материала была прочитана книга Professional Xen® Virtualization от William von Hagen
и мануал с сайта Xen.ru - Читать мануал

Link | Leave a comment | Share

Comments {5}

Vasiliy aka Br0ziliy

(no subject)

from: br0ziliy
date: Oct. 24th, 2008 04:52 pm (UTC)
Link

Поправь:
Ставим Xen на наш Ubuntu server 8.04.1 x64

sudo aptitude ubuntu-xen-server

Не хватает параметра install для aptitude.

И эта. Нафиг sudo, по любому 90% команд, что ты привёл требуют привилегий root и для экономии времени в самом начале установки делаем просто sudo su -

Далее, uname работает без sudo (ну это так, JFYI)

И ещё.
Ребут машины, на которой крутиться GNU/Linux, при прочих нормальных условиях, нужен только если ты хочешь накатить новое ядро. В остальных случаях - абсолютно лишнее действие.
И то, есть уже специальные патчи для ядра, которые позволяют выкатить новое ядро вообще без перезагрузки. :)

В остальном - всё ок вроде.

С твоего позволения - сделаю кросспост в свой standalone блог.

Reply | Thread

dead_rockabillyman

(no subject)

from: felvis
date: Oct. 24th, 2008 08:49 pm (UTC)
Link

да ) не вапрос, копирай поставь ;)
с инсталл поправлю, а вот с судо - я знаю, строил на примере убуны...а там это норма.
кому лень ясно дело - в su ;)

Reply | Parent | Thread

Vasiliy aka Br0ziliy

(no subject)

from: br0ziliy
date: Oct. 24th, 2008 10:44 pm (UTC)
Link

http://br0ziliy.org.ua/blog/2008/10/xen-server-svoimi-rukami.html#more

Немного стиль и орфографию поправил :)

Reply | Parent | Thread

(no subject)

from: hamlet_karamou
date: Jul. 11th, 2010 12:24 am (UTC)
Link

felvis- o_O

Reply | Thread

dead_rockabillyman

(no subject)

from: felvis
date: Jul. 11th, 2010 08:02 pm (UTC)
Link

га ?

Reply | Parent | Thread