Журнал LinuxFormat - перейти на главную

LXF77:Xen

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

Содержание

Xen: виртуальный роман

виртуализуйте оборудование и удивите друзей своим мастерством. Пол Хадсон покажет, как справиться с установкой Xen.

Пускай у вас мощнейший компьютер – этакий Athlon FX-60, 4 ГБ ОЗУ, 1000 ГБ жесткого диска и Linux-система, и все таки единственная ошибка при обновлении операционной системы может вывести его из строя. Произошло повреждение файла настроек, обнаружились ошибки в Glibc или пропажа модуля ядра – и ваша ОС рухнула придется восстанавливать систему используя резервную копию.

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

Это только один из способов применения виртуализации, на самом деле их гораздо больше. виртуализация произвела революцию на рынке серверов, так как позволяет снизить объем неиспользованных ресурсов. к примеру, два сервера, допустим, с Apache и MySQL, загруженных на 25%, можно разместить на одном физическом сервере, организовав на нем две виртуальные машины – затраты на оборудование и обслуживание уменьшатся вдвое. Другой популярный пример использования виртуализации в бизнесе –создание кластеров и их использование для обеспечения дополнительной надежности, а также для отработки сложных сценариев на простых Пк.

Энтузиасты заинтересуются и просто шансом поиграть с новой технологией. владельцам домашних компьютеров виртуализация предоставляет возможность одновременно запустить несколько ОС, например, Fedora Core 4 и Fedora Core 5 Test 2, а также SUSe 10.0, NetBSD и в некоторых случаях Windows. Круто!

С чего начать

Самое свежее решение по виртуализации – программа Xen – явилось из мира Open Source. Мы рассказывали о Xen в LXF 67 и предположили, что за ней будущее виртуализации. так вот, это будущее настало!

Что особенного в данной технологии? Подход Xen сильно отличается от так называемой аппаратной виртуализации, применяемой в VMware и других укоренившихся продуктах. В VMware гостевая ОС остается в неведении о своем виртуальном статусе, а в Xen исходный код гостевой ОС должен быть немного подправлен, чтобы она понимала: ее место – под Xen. Это похоже на отношение симбиоза в природе: гостевая ОС знает о существовании Xen и реагирует на команды, а базовая ОС знает о своих гостях и получает от них информацию.

Новый подход окрестили «паравиртуализацией». На практике, паравиртуализация означает, что работа виртуальной машины (Virtual Machine, VM) не требует трудоемких операций, так как она осознает свой виртуальный статус и поэтому разделяет доступ ко всем ресурсам с остальными машинами без вмешательства Xen.

В результате скорость работы Xen VM всего лишь на 3–8% меньше, чем запуск системы на настоящем оборудовании, поэтому «почувствовать разницу» не удастся.

Принцип работы Xen

С тех пор, как мы рассказывали о Xen с десяток выпусков назад, она вошла в состав многих популярных дистрибутивов. SUSE, Fedora, Ubuntu, Gentoo и другие включили поддержку Xen, хотя качество поддержки зависит от дистрибутива. Xen негласно является одной из архитектур, под которые создается ядро Linux, наряду с x86, x86-64 и PowerPC.


Формально, когда вы устанавливаете Xen на компьютер, она становится главной операционной системой. Загрузка компьютера сопровождается загрузкой Xen OS, которая создает первоначальную виртуальную машину (известную как домен 0 или просто dom0), т.е. вашу базовую ОС. Все выглядит так, словно вы загружаете тот же Linux и затем X, как и до этого, но на самом деле вы используете виртуальную машину. Гостевая ОС dom0 является самой привилегированной, и поэтому имеет более высокий приоритет при доступе к оборудованию и вычислениях, чем другие гости. Этим гостям – обычно их называют непривилегированными доменами (domU) – требуется собственная порция оперативной памяти, а также постоянное место на диске для хранения своих данных.

Установка ядра

Хотя большинство дистрибутивов имеют поддержку Xen, мы потренируемся в сборке из исходных текстов, для гарантии, что вы сможете повторить процедуру установки с любым дистрибутивом. В данном руководстве мы будем использовать дистрибутив Fedora Core 4.

Прежде, чем мы начнем, необходимо сделать замечание: Xen должна работать с реальным оборудованием. Вы не сможете установить ее внутри Vmware или с использованием других средств виртуализации.

Как установить XEN

Хватит болтать – установим-ка Xen и запустим нашу основную ОС как виртуальную машину.

1. Устранение зависимостей

У Xen достаточно много зависимостей, и если вы хотите насладиться виртуализацией по максимуму, то их необходимо устранить. Вам потребуются полный набор для компиляции программ (GCC, make и др.), VNC (серверная и клиентская части), libvncserver, библиотека python-twisted, а также программа brctl, Curl (включая библиотеки разработки) и SDL (также включая библиотеки разработки).

Если вы устанавливаете Fedora Core 4, выберите Custom Setup. Отключите брандмауэр и SELinux (они могут вызывать проблемы), затем выберите следующие пакеты из предложенного списка:

  • Из категории X Window System выберите xorg-x11-Xnest.
  • Пометьте Development Tools (список выбранных пакетов по умолчанию нас устраивает)
  • Из категории System Tools выберите VNC.
  • Из Network Servers выберите vncserver.

Когда установка закончится, проведите первоначальную настройку системы. зайдите в систему и загрузите Gnome. Если вы используете не FC4, менеджер пакетов вашего дистрибутива наверняка может предложить эквиваленты вышеназванных программ. Установка Xnest необязательна, но без остальных пакетов не обойтись.

Теперь нам необходимо получить libvncserver, следовательно нам на сайт http://libvncserver.sourceforge.net. На момент написания статьи там была доступна для скачивания «предварительная версия» в виде файла LibVNCServer-0.8pre.tar.gz. Откройте терминал, перейдите в директорию, в которую скопировали его, и наберите

tar xpvfz LibVNCServer-0.8pre.tar.gz
cd LibVNCServer-0.8pre
./configure
Make
su -
make install

Если у вас Fedora Core, то остальные пакеты устанавливаются командой

yum install python-twisted bridge-utils curl  SDL-devel

При использовании другого дистрибутива, менеджер пакетов может предложить их аналоги. Если вы не можете найти пакет bridge-utils, то поищите тот, который предоставляет команду brctl.

Теперь пора установить Xen. С сайта http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads скачайте файл xen-3.0.0-src.tgz. Если доступна более новая версия, можете попробовать ее, но тогда мы не гарантируем, что дальнейшие инструкции будут работать. Наша версия находится на диске к журналу в директории Magazine/Xen.

2. Сборка ядра Xen

Получив файл с Xen, отправляйтесь обратно в терминал и выполните следующие команды:

tar xvpfz xen-3.0.0-src.tgz
cd xen-unstable

На диске в директории Magazine/Xen вы найдете специальную версию ядра Linux. Если вы скопируете ядро в свежесозданную директорию xen-unstable, Xen использует его для сборки своего образа. Если вы не скопируете наше ядро, то Xen скачает его из сети, да и вы сами можете поступить так же! Итак, ядро скопировано; перейдите в директорию xen-unstable и запустите

make world

Вне зависимости от способа установки ядра Linux, ядро будет извлечено, модифицировано для работы с Xen, а затем собрано дважды: сначала как xen0 (для dom0), а затем как xenU (для domU). Компиляция – процесс долгий, поэтому у вас будет достаточно времени на какие-нибудь другие дела.

После завершения компиляции можно двигаться дальше:

su
make install

Новые ядра Xen скопируются в директорию /boot, а файлы конфигурации – в вашу систему. Чтобы компьютер загружался с нашим ядром, необходимо создать образ начального RAM-диска, используя следующую команду

mkinitrd      /boot/initrd-2.6.12-xen0.img  2.6.12.6-xen0

Первый параметр – путь, куда надо сохранить образ диска, а второй – имя директории с модулями в /lib/modules.

3. Конфигурация загрузчика

Чтобы добавить ядро xen0 в загрузчик Grub, откройте в текстовом редакторе файл /boot/grub/menu.lst. По умолчанию в Fedora он выглядит следующим образом:

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu

title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,0)
kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.11-1.1369_FC4.img

Необходимо привести его к следующему виду

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu

title Xen 3.0/XenLinux 2.6
root (hd0,0)
kernel /xen-3.0.0.gz dom0_mem=131072
module /vmlinuz-2.6.12.6-xen0 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.12-xen0.img
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,0)
kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=/
dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.11-1.1369_FC4.img

Заметим, что теперь мы загружаем ядро Xen, а не Linux. Мы передаем имя Linux- ядра в Xen, и она запускает его в качестве гостевой ОС виртуальной машины dom0. Параметр dom0_mem определяет, сколько ОЗУ мы хотим выделить dom0. В нашем случае это 128 MБ. Можно указать любое другое значение, но не забудьте умножить количество мегабайт, которое вы хотите выделить виртуальной машине, на 1024.

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


Теперь войдите в систему, запустите консоль и наберите uname -a. 'xen0' в строке вывода результата команды сигнализирует о том, что вы теперь в домене 0. Переключитесь в режим root с помощью команды su - и запустите xend start, а потом xm list. Последняя команда выводит список всех работающих в данный момент виртуальных машин. В этом списке вы видите dom0, которой выделено 128 MБ ОзУ. Поздравляем! Ваша система заработала в Xen!

Cоздание виртуальной гостевой ОС

Работали мы, работали... и что вышло? Ваша система работает так же, как и до этого, верно? Нет, не совсем: теперь можно создавать непривилегированных гостей domU. Приступим...

1. Создание образов диска

Переключитесь в суперпользователя и запустите df -h, чтобы проверить, сколько свободного места в системе. Вам понадобится 4 ГБ свободной памяти, однако примите во внимание объем текущей инсталляции Linux. Чтобы запустить гостя domU, необходимо сначала создать образ для его корневого раздела, а также образ для раздела подкачки. Следующие две команды создадут образ корневого раздела. Выполнять их надо из директории /root:

dd if=/dev/zero of=vmdisk bs=1k seek=4096k count=1
mkfs.ext3 vmdisk

За запуском второй команды последует предупреждение, что файл не является специальным блочным устройством; для продолжения, просто нажмите [y]. Установка параметра seek как 4096k дает нам образ диска размером в 4 ГБ; вы можете менять размер по своему усмотрению: 1024 соответствует 1 ГБ, 2048 – 2 ГБ, 8192 – 8 ГБ и т.д. В данный момент диск отформатирован как ext3, но он совершенно пуст, поэтому необходимо сделать на нем клон нашей системы.

Следующие команды монтируют образ как loopback-устройство, а затем копируют на него вашу ОС. Если у вас много чего установлено или вы хотите скопировать только некоторые части системы, тогда придется быть более точным.

Прежде чем продолжить, ответьте на следующие вопросы:

  • Вы проверили, какой объем занимает ваша установленная система с помощью df -h?
  • Вы создали образ диска необходимого объема?
  • Вы создали файл vmdisk в каталоге /root?

Если ответом на все три вопроса было «да», тогда двигаемся дальше. Выполните следующие команды:

mkdir /mnt/vmdisk
mount –o loop vmdisk /mnt/vmdisk
cp –ax /{ bin,dev,etc,home,lib,sbin,usr,var} /mnt/vmdisk/
mkdir /mnt/vmdisk/{proc,sys,tmp,root}
chmod og+w /mnt/vmdisk/tmp

Команде cp -ax требуется ощутимое время для исполнения. Директории proc, sys, tmp и root копировать не нужно, они просто создаются командой mkdir. В некоторых дистрибутивах необходимо так-же скопировать каталог /opt, однако под Fedora этого не понадобится.

Последняя команда меняет права доступа к /tmp, разрешая программам записывать туда свои данные.

Гость dom0 имеет прямой доступ к оборудованию, в то время как гость domU будет использовать образ диска для хранения данных. Поэтому им необходимы разные настройки fstab. Откройте в текстовом редакторе файл /mnt/vmdisk/etc/fstab. В Fedora он будет выглядеть следующим образом:

# This file is edited by fstab-sync - see ‘man  fstab-sync’ for details
/dev/VolGroup00/LogVol00 	/ 		ext3 	defaults 1 1
LABEL=/boot 		/boot 		ext3 	defaults 1 2
/dev/devpts 			/dev/pts 	devpts 	gid=5,mode=620  0 0
/dev/shm 			/dev/shm 	tmpfs 	defaults 0 0
/dev/proc 			/proc 		proc 	defaults 0 0
/dev/sys 			/sys 		sysfs 	defaults 0 0
/dev/VolGroup00/LogVol01 swap 		swap  	defaults 0 0
/dev/hdc 			/media/cdrom 	auto 	pamconsole,exec,noauto,managed 0 0

Как видите, Fedora использует логические тома (LVM) для управления жесткими дисками, о чем говорит запись VolGroup00. Однако ваш файл fstab может просто использовать /dev/hda1 и /dev/hda2. В нашем случае необходимо отредактировать файл, чтобы он монтировал hda1 и hda2 в качестве корневого раздела и раздела подкачки соответственно. Исправленный файл должен выглядеть так:

/dev/hda1 	/ 		ext3 	defaults 		1 1
/dev/devpts 	/dev/pts 	devpts 	gid=5,mode=620 	0 0
/dev/shm 	/dev/shm 	tmpfs 	defaults 		0 0
/dev/proc 	/proc 		proc 	defaults 		0 0
/dev/sys 	/sys 		sysfs 	defaults 		0 0
/dev/hda2 	swap 		swap 	defaults 		0 0

Сохраните его и выполните unmout /mnt/vmdisk, чтобы размонтировать виртуальный образ. Это важно, т.к. Xen не может использовать файловые системы, которые уже смонтированы Linux. теперь создадим виртуальный диск для раздела подкачки объемом 256 MБ, следующим образом:

dd if=/dev/zero of=vmswap bs=1k seek=256k  count=1
mkswap vmswap

2. создание файла настройки

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

cp /etc/xen/xmexample1 ~/xmlinux1

В результате файл с примером конфигурации Xen скопируется в текущую директорию. Откройте его в текстовом редакторе.

Необходимо сделать несколько изменений – найдите следующие строки и исправьте их на указанные значения:

  • `kernel=` в /boot/vmlinuz-2.6.12-xenU.
  • `memory=` в 128
  • `name=` в Linux1
  • `disk=` в [ ‘file:/root/vmdisk,hda1,w’, ‘file:/root/vmswap,hda2,w’ ].

Если ваша версия ядра отличается от нашей, то подправьте файл соответствующим образом. Память измеряется в мегабайтах; мы работаем со 128 MБ ОЗУ и 256-MБ диском подкачки, однако если у вас система мощнее, можете определить собственные значения параметров. Имя Linux1 дано, чтобы отличить VM от других (к тому же его легко запомнить); у каждойVM должно быть уникальное имя.

Наконец, параметры диска определяют, что /root/vmdisk монтируется как hda1 (корневой раздел гостя domU) с правами запись/чтение, а /root/vmswap монтируется как hda2 (файл подкачки гостя domU), также с правами запись/чтение.

Теперь можно запустить новую VM!

xm create -c xmlinux1

Параметр –c позволяет определить наш файл конфигурации для новой виртуальной машины. Если появляется ошибка 'Error connecting to xend: Connection refused', значит, вы забыли выполнить xend start от имени root на предыдущем шаге. Также может появиться ошибка ‘File /root/vmdisk is loopback-mounted through /dev/loop0’. Она говорит о том, что вы не отмонтировали образ виртуального диска.

Ошибка ‘error creating domain: VM name ‘Linux1’ already in use` говорит сама за себя. Обычно она появляется после другой ошибки: Xen создает VM, пытается запустить ее и терпит неудачу, но созданную VM при этом не уничтожает. Выполнив xm list, вы увидите, что Linux1 находится в состоянии p (приостановлена). Уничтожьте ее с помощью xm destroy Linux1 и создайте заново.

Если не произошло ни одной ошибки (считайте себя счастливчиком!), вы увидите, как начнет загружаться новая машина. В конце концов появится приглашение войти в систему. Используйте ваш логин и пароль, т.к. мы скопировали /etc/passwd на виртуальный диск.

Работа с XEN

В данный момент у нас работает Linux на Linux, хотя и только в командной строке. Посмотрим, как можно переключиться в графический режим, а также как управлять и работать с Xen.

Управление CPU

В отличие от других техник виртуализации, при паравиртуализации, примененной в Xen, гостевая ОС знает о своем виртуальном статусе. На практике это означает, что мы может посылать гостевой ОС команды и получать от нее ответ. Например, откройте второй терминал (первый оставьте работать с гостевой ОС dom0), переключитесь в суперпользователя с помощью su - и выполните команду

xm shutdown Linux1

Нажав [enter], вы увидите, что на первом терминале появляются стандартные сообщения завершения работы Linux. Другими словами, Xen не выдернула VM из розетки: VM сама себя остановила и вернула контроль родительской ОС.

Этим команда shutdown отличается от команды destroy, которая как раз убивает VM. Уничтожение VM с помощью destroy может повредить диск, поэтому ее не рекомендуется пускать в ход, пока ваша VM не будет приостановлена.

Вернувшись в командную строку главной виртуальной машины и перейдя в режим суперпользователя, откройте в текстовом редакторе файл xmlinux1, найдите строку с параметром vcpus и установите его значение равным 4. Если перед параметром стоит знак комментария (символ #), удалите его. теперь перезапустите машину с помощью

xm create –c Linux1

и войдите под своей учетной записью. В выводе команды cat /proc/cpuinfo вы увидите, что в наличии имеется 4 CPU. Физически у нас всего лишь 1 процессор на материнской плате, но Xen это не волнует: она виртуализует столько CPU, сколько потребуется. Если у вас в системе физических процессоров несколько, можно изменить параметр `cpus` в файле xmlinux1 и указать количество процессоров, на которых должна работать VM.

Управление ОЗУ

С процессорами мы научились управляться, но как насчет ОЗУ? Наберите top внутри гостевой машины domU. В левом верхнем углу вы увидите строку, похожую на ‘Mem: 134900k total’. Это объем ОЗУ, который мы выделили машине. Теперь с другого терминала (вашей главной машины) запустите от имени суперпользователя xm list. Вы увидите, что домен Linux1 работает и ему действительно выделено 128 MБ ОзУ. Давайте поменяем объем RAM! Выполните следующую команду:

xm mem-set Linux1 64

Мы уменьшили объем доступной Linux1 памяти до 64 MБ.Снова запустите команду top в гостевой машине domU. Вы увидите ‘Mem: 65536k’, то есть то, что нам нужно. Посмотрим, как вы сделаете это в Vmware Workstation...


Команда mem-set позволяет изменять размер ОзУ, доступный виртуальной машине. Максимальный объем выделенной ОЗУ не может превышать значения, определенного в файле настройки. т.е. вы можете создать машину с 256 MБ ОзУ, а затем с помощью mem-set ограничить доступный объем до 8–16 MБ (в этом случае ядро начнет убивать процессы, чтобы высвободить память). можно увеличить объем до 128 MБ или даже установить начальное значение 256 MБ, однако попытки выйти за пределы 256 MБ будут проигнорированы. Если хотите достичь большей гибкости, рекомендуем создавать виртуальные машины с большими начальными значениями ОЗУ (для этого измените значение `memory =` в файле xmlinux1), а затем уменьшать ОЗУ до реально имеющихся. Если же объем ОЗУ потребуется увеличить, у вас будет запас для маневра.

Сохранение и перезагрузка

Теперь рассмотрим возможности поинтереснее: т.к. ядро Xen управляет гостями Linux, можно сохранить состояние выбранной VM перед ее отключением! По существу, происходит создание дампа оперативной памяти VM. Его размер будет равен объему ОЗУ, выделенного виртуальной машине. Если захотите вернуться в сохраненное состояние, то Xen просто скопирует дамп обратно в ОЗУ. Не меняйте расположение файлов vmdisk и vmswap после сохранения состояния виртуальной машины. Сохранение и восстановление виртуальных машин можно осуществлять следующими двумя командами:

xm save Linux1 Linux1.state
xm restore Linux1.state


Первая команда сохраняет машину Linux1 в файл Linux1.state, затем происходит ее выключение. Вторая команда восстанавливает машину (если файл Linux1.state не находится в том же каталоге, что и вы, в команде придется указать его полный путь).

Одна из особенностей Xen – ее виртуальные машины работают на уровне, отличном от уровня базовой машины (домен 0). После создания и запуска виртуальной машины с помощью xm create, вы сможете войти в нее. Однако если вы закроете терминальное окно, VM будет продолжать работу в фоновом режиме, как если бы ничего не случилось. Ваше соединение с ней напоминает удаленный терминал: вы свободно подключаетесь и отключаетесь, а она невозмутимо работает.

Вместо того, чтобы просто закрыть терминал, попробуйте нажать Ctrl + ] (правая квадратная скобка) для отсоединения от консоли VM и возврата в главную машину. Хотя VM работает, к ее выводу вы подсоединиться не можете. Чтобы вернуться в VM, наберите команду xm console Linux1. Возможно, потребуется нажать Enter еще раз, чтобы появилось приглашение команд- ной строки. Консоль VM – не то же самое, что настоящий удаленный терминал, потому что, запустив в двух терминалах

xm console Linux1

вы окажетесь в одной сессии консоли (проверьте: запустите в одном терминале uname –a, затем переключитесь в другой и нажмите стрелку вверх, чтобы увидеть последнюю запущенную команду; вы увидите, что это uname).

Если хотите использовать настоящий удаленный терминал, попробуйте SSH. Выполните /sbin/ifconfig в гостевом домене xenU, а затем из xen0 (ваша главная машина) подключитесь к xenU с помощью SSH.

Персональные инструменты
купить
подписаться
Яндекс.Метрика