Часть первая.
В комментариях к топику Системное администрирование. Начало. прочитал, что сообществу были бы интересны статьи о виртуализации. Довольно давно у меня на жёстком диске лежит описание процесса установки Xen hypervisor и гостевой ОС на сервер под управлением Ubuntu/Debian.
Большинство людей пользуют для виртуализации VmWare или VirtualBox редко кто Qemu.
В том числе и под Win x32\x64 платформой они очень популярны. Творение The Sun даже понимает аппаратную поддержку Intel VT.
Но я бы хотел поговорить о реальной альтернативе на Linux платформах — Xen.
Тем более что он присутствует в репозиториях Ubuntu\Debian.
Для полной совместимости и возможности использовать все функции нам нужна аппаратная поддержка со стороны сервера.
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 — поддерживается во всех Core2Duo, так что это не проблема. Желательно зайти в BIOS и проверить включен ли.
Аппаратная совместимость позволит нам запускать не модифицированные ОС (читай Win XP и прочее )
Получаем версию ядра — в моём случае 2.6.24-19-generic, это нам пригодится позже.
Ставим Xen на наш Ubuntu server 8.04.1 x64.
Все команды приведённые далее требуют привилегий root, поэтому для экономии времени полностью переходим в рутовую консоль:
Ставим Xen:
подтвердить установку всех запрошенных пакетов.
Ждем конца установки.
После старта сервера в удачном случае вы должны увидеть что система на новом ядре Xen.
Видим что теперь ядро называется — 2.6.24-19-xen — как раз то что нам нужно.
Гипервизор Xen запускает саму ОС Ubuntu уже на своем ядре.
Эта команда показывает что демон Xend запущен и работает, запустив основную систему и показывая ее состояние.
Система готова для инсталяции гостевых ОС (далее DomU)
Часть вторая.
Начнем по пунктам.
Конфиги складываем в директорию
Если папки config там нет — создаем.
И не забываем там держать конфиги всех систем и парочку чистых темплейтов.
Изначально я только за LVM — и потому что он быстрее чем просто образы прилепленные в
/dev/loop и потому что бекап их существенно проще и приятней чем все что может быть ;)
Остановлюсь на этом примере. Кому инетесно могу потом дополнить примером работы с физическим
образом.
Для того чтобы создать раздел LVM нам нужен отдельный раздел на винтчестере. Желательно его
наличие продумать изначально и с запасом места, потому как там будут храниться образы lvm и он
будет не доступен для хранения там чего-либо еще.
Допустим у нас есть такой раздел /dev/sdb6 и размер его 270 Гб.
Переходим в рутовую консоль (
Далее, нужно подгрузить модули LVM:
Инициализируем поддержку LVM этим разделом
Создаем группу томов которую назовем vg (virtual group)
Все, создаем образ который будет виден в системе как физический и можно ставить туда Win XP например.
В списке устройств появилось устройство /dev/vg/hdd
Все, можно начинать ставить. Винчестер у нас уже есть ;)
Прелесть LVM в том, что бекап с него делается быстро и безболезненно в любой момент без остановки операционки на LVM.
Предположим бекап остается у нас на винте, варианты куда положить оч индивидуальны.
Складывать мы будем в /mnt/backup
Первое что мы делаем — снепшот — снимок образа в «замороженном» состоянии.
А дальше знакомая всем команда dd
Если после этого вам необходимо будет восстановить из бекапа то:
Далее по желанию делаем скрипты для бекапа всех DomU и заносим в cron, тут уже каждый сам выбирает.
Итак.
У нас есть «харддрайв» под будующую WinXP виртуальную — /dev/vg/hdd — 10Gb
Теперь нам нужен образ Win для установки или CD-диск. Лучше образ — практичнее.
Допустим у вас лицензия WinXP и есть диск с ней.
Пишем конфиг будующей машины:
подробнее про конфиг можно узнать, набрав
Если вы хотите указать не cdrom физический, а например образ загрузочного диска с дистрибутивом системы то строку:
мы меняем на
предварительно смонтировав наш iso образ на вирутальное устройство /dev/loop1 (от 1 до N — смотря сколько свободных есть)
Назовем образ winxp.hvm
Старайтесь не использовать лишних знаков в именах конфигов и именах машин в конфиге name = «xp-test-1»
Напимер бывают глюки с "_" в этих местах.
Смотрим свободные loop девайсы:
Монтируем образ:
В мануале Xen написано что в конфиге можно было бы указать напрямую образ 'file:/full/path/to/vm1disk,hdc,r'
Но на bugzilla ubuntu можно найти кучу репортов на баг, который делает это невозможным.
И кстати на данный момент (28.10.2008) его не пофиксили. Так что монтируем в /dev/loop как диски cdrom так и образы винтов.
Теперь можно запускать установку WinXP:
Если у вас дистрибутив состоит из нескольких дисков — не беда, на лету можно перемаунтить источник cdrom на другой диск:
Для того чтоб попасть на гостевую систему, нужно поставить клиент VNC:
После этого виртуальная машина будет доступна на 0 порту vnc (соотв. следующая поднятая машина на 1,2,3 и т.д.)
Выполняем:
и если вы под Х, то у появится вид от первого лица на винду.
Если вы не под Х, а, например через ssh сидите — выход тоже есть — Xming.
Ставим эту программу туда где вы сидите под win. Она поможет вам отображать GUI окна запущенные в ssh.
Ставим Xming, запускаем ее.
На Ubuntu выставляем переменную окружения:
и теперь при запуске команды vncviewer через какую-нибудь putty вы получаете графическое окно из линукса.
Заканчиваем установку и радуемся вирутальной машине.
Статья написана ЖЖ-юзером felvis и мной во время собственно установки и настройки всего этого хозяйства для продакшен-использования.
Использованы материалы из книги «Professional Xen® Virtualization» от William von Hagen и мануал с сайта Xen.ru — Читать мануал.
Большинство людей пользуют для виртуализации 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 — поддерживается во всех Core2Duo, так что это не проблема. Желательно зайти в BIOS и проверить включен ли.
Аппаратная совместимость позволит нам запускать не модифицированные ОС (читай Win XP и прочее )
uname -a
Получаем версию ядра — в моём случае 2.6.24-19-generic, это нам пригодится позже.
Ставим Xen на наш Ubuntu server 8.04.1 x64.
Все команды приведённые далее требуют привилегий root, поэтому для экономии времени полностью переходим в рутовую консоль:
sudo su -
Ставим Xen:
aptitude install ubuntu-xen-server
подтвердить установку всех запрошенных пакетов.
Ждем конца установки.
sudo reboot
После старта сервера в удачном случае вы должны увидеть что система на новом ядре Xen.
uname -a
Видим что теперь ядро называется — 2.6.24-19-xen — как раз то что нам нужно.
Гипервизор Xen запускает саму ОС Ubuntu уже на своем ядре.
# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 2048 8 r----- 167826.8
Эта команда показывает что демон Xend запущен и работает, запустив основную систему и показывая ее состояние.
Система готова для инсталяции гостевых ОС (далее DomU)
Часть вторая.
Готовим систему к установке DomU
Начнем по пунктам.
1. Дальше следует определить места хранения конфиг. файлов
Конфиги складываем в директорию
/etc/xen/config
Если папки config там нет — создаем.
И не забываем там держать конфиги всех систем и парочку чистых темплейтов.
2. На каких носителях у нас будут DomU — LVM или физические образы дисков созданные dd или qemu.
Изначально я только за LVM — и потому что он быстрее чем просто образы прилепленные в
/dev/loop и потому что бекап их существенно проще и приятней чем все что может быть ;)
Остановлюсь на этом примере. Кому инетесно могу потом дополнить примером работы с физическим
образом.
Для того чтобы создать раздел LVM нам нужен отдельный раздел на винтчестере. Желательно его
наличие продумать изначально и с запасом места, потому как там будут храниться образы lvm и он
будет не доступен для хранения там чего-либо еще.
Допустим у нас есть такой раздел /dev/sdb6 и размер его 270 Гб.
Переходим в рутовую консоль (
sudo su -
) и ставим сам lvmaptitude install lvm2
Далее, нужно подгрузить модули LVM:
modprobe dm_mod modprobe dm_mirror modprobe dm_snapshot
Инициализируем поддержку LVM этим разделом
pvcreate /dev/sdb
Создаем группу томов которую назовем vg (virtual group)
vgcreate vg /dev/sdb
Все, создаем образ который будет виден в системе как физический и можно ставить туда Win XP например.
lvcreate -L10240M -n hdd vg
lvs
LV VG Attr LSize Origin Snap% Move Log Copy%
hdd vg -wi-a- 10.00G
В списке устройств появилось устройство /dev/vg/hdd
Все, можно начинать ставить. Винчестер у нас уже есть ;)
3. Бэкап. Как делать и куда складывать.
Прелесть LVM в том, что бекап с него делается быстро и безболезненно в любой момент без остановки операционки на LVM.
Предположим бекап остается у нас на винте, варианты куда положить оч индивидуальны.
Складывать мы будем в /mnt/backup
Первое что мы делаем — снепшот — снимок образа в «замороженном» состоянии.
lvcreate -L10G -s -n back-image /dev/vg/hdd
А дальше знакомая всем команда dd
dd if=/dev/vg/hdd bs=1024000 | gzip -cf > /mnt/backup/hdd.gz
Если после этого вам необходимо будет восстановить из бекапа то:
gunzip -c hdd.gz | dd of=/dev/vg/hdd bs=1024000
Далее по желанию делаем скрипты для бекапа всех DomU и заносим в cron, тут уже каждый сам выбирает.
Установка DomU.
Итак.
У нас есть «харддрайв» под будующую WinXP виртуальную — /dev/vg/hdd — 10Gb
Теперь нам нужен образ Win для установки или CD-диск. Лучше образ — практичнее.
Допустим у вас лицензия 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
подробнее про конфиг можно узнать, набрав
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 до N — смотря сколько свободных есть)
Назовем образ winxp.hvm
Старайтесь не использовать лишних знаков в именах конфигов и именах машин в конфиге name = «xp-test-1»
Напимер бывают глюки с "_" в этих местах.
Смотрим свободные loop девайсы:
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)
Монтируем образ:
losetup /dev/loop1 /home/felvis/distr.iso
В мануале Xen написано что в конфиге можно было бы указать напрямую образ 'file:/full/path/to/vm1disk,hdc,r'
Но на bugzilla ubuntu можно найти кучу репортов на баг, который делает это невозможным.
И кстати на данный момент (28.10.2008) его не пофиксили. Так что монтируем в /dev/loop как диски cdrom так и образы винтов.
Теперь можно запускать установку WinXP:
cd /etc/xen/config
xm create winxp.hvm
Using config file "./winxp.hvm".
VNC= 1
Started domain "xp-test-1"
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 на другой диск:
xm block-configure 1 phy:/dev/null hdс:cdrom r
losetup -d /dev/loop1
losetup /dev/loop1 /home/felvis/distr2.iso
xm block-configure 1 phy:/dev/loop1 hdс:cdrom r
Для того чтоб попасть на гостевую систему, нужно поставить клиент VNC:
aptitude install xtightvncviewer
После этого виртуальная машина будет доступна на 0 порту vnc (соотв. следующая поднятая машина на 1,2,3 и т.д.)
Выполняем:
vncviewer :0
и если вы под Х, то у появится вид от первого лица на винду.
Если вы не под Х, а, например через ssh сидите — выход тоже есть — Xming.
Ставим эту программу туда где вы сидите под win. Она поможет вам отображать GUI окна запущенные в ssh.
Ставим Xming, запускаем ее.
На Ubuntu выставляем переменную окружения:
export DISPLAY=ваш ip:0.0
и теперь при запуске команды vncviewer через какую-нибудь putty вы получаете графическое окно из линукса.
Заканчиваем установку и радуемся вирутальной машине.
Статья написана ЖЖ-юзером felvis и мной во время собственно установки и настройки всего этого хозяйства для продакшен-использования.
Использованы материалы из книги «Professional Xen® Virtualization» от William von Hagen и мануал с сайта Xen.ru — Читать мануал.
Комментариев нет:
Отправить комментарий