Экспорт установленной системы в домен Xen

Материал из Xgu.ru

(Перенаправлено с xen/export)
Перейти к: навигация, поиск


Автор: Сергей Черепенин

Автор: Игорь Чубин
Короткий URL: xen/export

На этой странице описывается как выполнять систему, установленную на одном компьютере, с помощью исполняющегося на другом компьютере эмулятора QEMU или домена Xen.

Может быть полезно при консолидации и виртуализации систем, при работе с устаревшими системами, при тестировании.


Содержание

[править] Идея

В связи с постоянным увеличением вычислительной мощности и объёма оперативной памяти машин, наблюдающимся в настоящее время, большую популярность приобретает идея виртуализации систем. В особенности популярным этот подход становится при построении серверной инфраструктуры.

Виртуализированная серверная инфраструктура редко строится с нуля. Чаще всего существует парк физических (не виртуализированных) серверов, которые безостановочно работают, выполняя возложенные на них задачи. Нередко для хранения информации (операционной системы, программного обеспечения и данных) эти серверы используют не внешние хранилища, а собственные жёсткие диски.

Виртуализация сервера в данном случае может быть выполнена одним из указанных способов:

  1. Миграция служб. В виртуальной системе новый сервер разворачивается с нуля. Затем на него переносятся службы старого сервера. После чего старый сервер выводится из эксплуатации.
  2. Миграция операционной системы. Старый сервер останавливается, а затем на нём по сети (с компакт-диска или другого внешнего носителя информации) запускается другая операционная система, которая экспортирует установленный в сервере жёсткий диск системе виртуализации. Система виртуализации исполняет операционную систему, проинсталированную на этом диске. При условии, что виртуализация удалась, данные переносятся на хранилище системы виртуализации и старый сервер выключается.

Последний способ проще и быстрее, но он должен допускать возможность временной, непродолжительной остановки сервера (на время запуска другой операционной системы, экспорта, запуска виртуальной машины поверх экспортированных данных). В случае правильного выполнения всех операций простой в этом случае составит до 10 минут.

Icon-caution.gif

Обратите внимание что данные, расположенные на жёстком диске, при загрузке новой операционной системы, выполняющей экспорт, никак не используются. Загрузка выполняется по сети, с компакт-диска или другого внешнего носителя. Диск экспортируется для доступа к нему системы виртуализации. Изменения на диске может делать только сама операционная система, установленная на этом же диске, после того как она запущена в виртуальном домене.

Ниже детально рассматривается процесс миграции, выполненный по второму сценарию.

[править] Постановка задачи

Пусть есть две системы:

  • Старая система (old) — система, которая должна быть экспортирована.
  • Xen-система (xen) — система, внутри которой должен исполняться домен под управлением экспортированной системы.

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

[править] Запуск второй операционной системы в домене Xen установленной на том же компьютере

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

Если на компьютере установлено две операционные системы, и одна из них это Xenolinux (Xen + Linux), то вторую можно запустить как пользовательский домен Xen.

Note-icon.gif

Запуск систем, не работающих в паравиртуальном домене Xen, внутри Xen возможен только в том случае, если центральный процессор системы поддерживает аппаратную виртуализацию. В противном случае вместо Xen можно использовать QEMU.

Операционная система, загруженная в родном режиме:

Win2003 native.JPG

Конфигурационный файл домена Xen:

%$ egrep -v '^#|^\ *$' /etc/xen/win2003 
kernel = "hvmloader"
builder='hvm'
memory = 512
shadow_memory = 8
name = "win2003"
acpi=1
vif = [ 'type=ioemu, bridge=br0' ]
disk = ['phy:/dev/hda,hda,w' ]
device_model = 'qemu-dm'
boot="c"
sdl=0
vnc=1
vnclisten="127.0.0.1"
stdvga=0
serial='pty'
soundhw='sb16'

В данном случае операционная система Windows установлена на жёсткий диск IDE, подключённый в системе в режиме Primary Master (блочное устройство /dev/hda).

Старт домена выполняется стандартным образом:

%# xm create win2003
%# vncviewer 127.0.0.1:0

Здесь вместо 0 может быть указан другой номер, в зависимости от номера VNC-сеанса, который будет соответствовать заданному домену Xen. Подробнее см. руководство пользователя Xen.

Домен Xen, загруженный с жёсткого диска:

  • Процессор AMD 3000+
  • 512 Mb ОЗУ

W2003 xen.png

На домен, в котором работает установленная операционная система распространяются все те же законы, которые распространяются на систему, которая установлена в домен с нуля традиционным способом. Подробнее:

[править] Запуск домена с экспортированного образа

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

Процедура:

  • Выполнить бездисковую загрузку старой системы old под управлением Linux;
  • Выполнить экспорт диска загруженной системы old с помощью AoE или iSCSI;
  • На работающей Xen-системе xen запустить домен, который будет использовать экспортированный старой машиной.

[править] Подготовка сервера бездисковой загрузки

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

[править] DHCP

Конфигурация демона dhcpd в файле /etc/default/dhcp:

%$ egrep -v '^#|^\ *$' /etc/default/dhcp 
INTERFACES="br0"

Сам конфигурационный файл /etc/dhcpd.conf:

%$ egrep -v '^#|^\ *$' /etc/dhcpd.conf 
option domain-name "clinika.com";
option domain-name-servers 82.144.192.130, 82.144.192.131, 82.144.192.32, 82.144.192.30;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.7.0 netmask 255.255.255.0 {
  range 192.168.7.200 192.168.7.220;
  option routers 192.168.7.254;
  filename "pxelinux.0";
}
host clinika {
  hardware ethernet 00:13:8f:49:b0:31;
  fixed-address 192.168.7.253;
}


[править] TFTP

%$ egrep -v '^#|^\ *$' /etc/default/tftpd-hpa 
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot/ltsp/i386/"

[править] PXE

Наполнение каталога TFTP-сервера. Здесь присутствуют файлы загрузчика PXELINUX.

%$ ls -l /var/lib/tftpboot/ltsp/i386/
итого 10690
-rw-r--r-- 1 root root     203 2007-10-04 21:35 boot.msg
-rw-r--r-- 1 root root   80023 2007-07-11 09:55 config-2.6.21-2-486
lrwxrwxrwx 1 root root      23 2007-10-04 21:09 initrd.img -> initrd.img-2.6.21-2-486
-rw-r--r-- 1 root root 3691052 2007-10-04 21:09 initrd.img-2.6.21-2-486
-rw-r--r-- 1 root root    9519 2007-10-04 21:35 logo.16_1
lrwxrwxrwx 1 root root      20 2007-10-04 21:09 nbi.img -> nbi.img-2.6.21-2-486
-rw-r--r-- 1 root root 5019136 2007-10-04 21:09 nbi.img-2.6.21-2-486
-rw-r--r-- 1 root root   13944 2007-10-04 21:09 pxelinux.0
drwxr-xr-x 2 root root     104 2007-10-05 15:00 pxelinux.cfg
-rw-r--r-- 1 root root  780664 2007-07-11 09:55 System.map-2.6.21-2-486
lrwxrwxrwx 1 root root      20 2007-10-04 21:09 vmlinuz -> vmlinuz-2.6.21-2-486
-rw-r--r-- 1 root root 1319152 2007-07-11 09:55 vmlinuz-2.6.21-2-486

Конфигурационный файл загрузчика PXELINUX:

clint:Dom0~$ cat /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
DISPLAY boot.msg
TIMEOUT 150 
DEFAULT vmlinuz
PROMPT 1

LABEL 2.6.21.2
KERNEL vmlinuz
APPEND nfsdir=192.168.7.254:/opt/ltsp/i386 lang=ru ramdisk_size=1000000 root=/dev/nfs rw nfsroot=192.168.7.254:/opt/ltsp/i386/ ip=dhcp initrd=initrd.img 

[править] Корневая файловая система, загружаемая по сети

В каталоге /opt/ltsp/i386/ развёрнута операционная система Linux. Инсталляция выполняется с помощью debootstrap или аналогичным способом.

В системе должны быть установлены пакеты:

  • vblade

[править] Экспорт диска старой машины по сети

Сервер, который будет экспортирован, перезагружается и загружается по сети.

После этого необходимо выполнить следующие действия.

Icon-caution.gif

Будем считать, что экспорт выполняется с помощью протокола ATA over Ethernet. Можно использовать другой протокол доступа к диску по сети.

Убедитесь, что загружен модуль aoe:

ltsp:~# lsmod | grep aoe
aoe                    24416  0

Экспортируйте диск /dev/hda (или другой -- тот, на котором установлена система) с помощью vblade:

ltsp:~# vblade 1 0 eth0 /dev/hda
pid 3344: e1.0, 78165360 sectors O_RDWR

[править] Запуск домена с экспортированного образа

На системе виртуализации загрузите модуль aoe:

clint:Dom0~$ ls -l /dev/etherd
ls: /dev/etherd: Heт такого файла или каталога
%# modprobe aoe
aoe: aoe_init: AoE v22 initialised.
aoe: 00138f49b031 e1.0 v400c has 78165360 sectors
%# sudo lsmod | grep aoe
aoe                    23456  0

При этом в /var/log/messages должны появиться сообщения:

Oct  5 21:46:29 serzh kernel: aoe: aoe_init: AoE v22 initialised.
Oct  5 21:46:29 serzh kernel: aoe: 00138f49b031 e1.0 v400c has 78165360 sectors
Oct  5 21:46:29 serzh kernel:  etherd/e1.0: p2 < p5 p6 p7 p8 p9 > p3

В каталоге /dev/etherd должны появиться новые файлы устройств, соответствующие обнаруженным дискам ATA over Ethernet:

%# ls -l /dev/etherd/
итого 0
c-w--w---- 1 root disk 152,   3 2007-10-05 21:46 discover
brw-rw---- 1 root disk 152, 256 2007-10-05 21:57 e1.0
brw-rw---- 1 root disk 152, 258 2007-10-05 21:46 e1.0p2
brw-rw---- 1 root disk 152, 259 2007-10-05 21:46 e1.0p3
brw-rw---- 1 root disk 152, 261 2007-10-05 21:46 e1.0p5
brw-rw---- 1 root disk 152, 262 2007-10-05 21:46 e1.0p6
brw-rw---- 1 root disk 152, 263 2007-10-05 21:46 e1.0p7
brw-rw---- 1 root disk 152, 264 2007-10-05 21:46 e1.0p8
brw-rw---- 1 root disk 152, 265 2007-10-05 21:46 e1.0p9
cr--r----- 1 root disk 152,   2 2007-10-05 21:46 err
c-w--w---- 1 root disk 152,   4 2007-10-05 21:46 interfaces
c-w--w---- 1 root disk 152,   5 2007-10-05 21:46 revalidate

Далее необходимо создать конфигурационный файл нового домена Xen или модифицировать существующий.

%$ egrep -v '^#|^\ *$' /etc/xen/win2k 
kernel = "hvmloader"
builder='hvm'
memory = 512
shadow_memory = 8
name = "win2k"
acpi=1
vif = [ 'type=ioemu, bridge=br0' ]
disk = ['phy:/dev/etherd/e1.0,hda,w' ]
device_model = 'qemu-dm'
boot="c"
sdl=0
vnc=1
vnclisten="127.0.0.1"
stdvga=0
serial='pty'
soundhw='sb16'

После чего запустить домен:

%@ xm create win2k

[править] Результат запуска

Старая машина, загруженная самостоятельно.

  • Процессор Sempron 2600
  • 457968KB ОЗУ

W2k.jpg

Домен Xen, загруженный удалённо с жёсткого диска старой системы:

  • Процессор AMD 3000+
  • 523800KB ОЗУ

W2k 2.png


Другие изображения:

W2k 0.png W2k 1.png


[править] Перенесение образа старой машины

Если старый сервер должен быть выведен из эксплуатации, необходимо скопировать данные на новое место.

Icon-caution.gif

Домен соответствующий виртуализируемому серверу должен быть потушен в момент копирования!

Например, если перенос выполняется на том LVM:

%# lvcreate -L 20G -n server2003 /dev/XEN
%# dd if=/dev/etherd/e1.0 of=/dev/XEN/server2003
%# sed -i -e s@/dev/etherd/e1.0@/dev/XEN/server2003@ /etc/xen/win2003

DRBD-OS-Migration.png

[править] Загрузка системы в качестве паравиртуальной

Если виртуализирована система, работающая под управлением Linux или другой операционной системы, которая может быть паравиртуализирована, есть смысл подумать о том что бы превратить эту систему из HVM в паравиртуальную.

Подробнее:

Если в системе присутствует ядро Xen, можно загружать его непосредственно из этой системы (а не из домена 0). Для этого используется программа pygrub.

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

Подробнее:

Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure