Преобразование HVM-домена Xen в паравиртуальный

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

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

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


Короткий URL: xen/hvm2pv

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


Содержание

[править] Способы подготовки к паравиртуализации

Самый простой способ: загрузиться непосредственно в реальной машине и подготовить её к паравиртуализации. Однако, этот способ не всегда доступен. Например, исходной машины уже может не быть или она может быть занята и недоступна для экспериментов, а образ её есть. Можно загрузить этот образ в HVM-домене или эмуляторе, однако быстрее будет непосредственно обратиться к образу и подготовить его к запуску в паравиртуальном режиме.

[править] Подготовка к паравиртуализации запущенной системы

Оригинал: Паравіртуалізация RHEL5, Олександр Юдін (укр.)

Устанавливаем RHEL5 в HVM-домен, для того чтобы потом паравиртуализировать его. Код инсталляции берём у наших заокеанских товарищей на странице: http://cyclops.iastate.edu/pub/RHEL5-README.txt Нас интересует сервер, поэтому вводим: a41b-566a-a41f-1d56 (спасибо тебе, Америка).

В ходе инсталляции нам понадобятся навыки работы с консолью VNC, касающиеся замены ISO-образов дистрибутива в виртуальном CDROM.

"В VNC-окне нажать ctr-alt-2, что переключит вас на консоль qemu. Дальше использовать eject и прочие команды для смены диска. После того как образ заменён, нажать ctrl-alt-1 (не F1! не путайте!) для возврата в консоль (графическую) гостевой операционной системы. По умолчанию в новых версиях Xen эта возможность отключена. Для того чтобы её включить, нужно указать в конфигурационном файле домена monitor=1"

(qemu) eject hdc
(qemu) change hdc /root/xenimages/rhel-5-server-i386-disc2.iso

После того как у нас "завёлся" RHEL5 в HVM-домене, устанавливаем в него паравиртуальное ядро. Пакет с ядром находится на первом диске дистрибутива RHEL5.

rpm -i kernel-xen-2.6.18-8.el5.i686.rpm

Обновим initrd, добавив в него необходимые драйверы. В дальнейшем для загрузки PV-домена будем использовать его.

mkinitrd /boot/initrd-2.6.18-8.el5xenU.img 2.6.18-8.el5xen --fstab /mnt/etc/fstab --with xenblk --with xennet --preload xenblk --preload xennet

Для того, чтобы не переносить паравиртуальное ядро и initrd в dom0, используем pygrub. Конфигурационный файл домена будет выглядеть так:

bootloader='/usr/lib/xen-3.2-1/bin/pygrub'
memory = 512
name = "bifit"
vcpus=1
vif = [ 'bridge=xenbr4,mac=00:16:3e:01:12:c1' ]
disk = ['phy:/dev/drbd/bifit,hda,w']
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Конфигурационный файл GRUB внутри домена DomU выглядит следующим образом:

default=0
timeout=5
title Red Hat Enterprise Linux Server (2.6.18-8.el5xen)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.18-8.el5xen ro root=/dev/hda1
    initrd /boot/initrd-2.6.18-8.el5xenU.img

[править] Паравиртуализация системы без её запуска

[править] Доступ к файловой системе виртуальной машины

Машина должна быть выключена. Иначе можно повредить файловые системы.

С помощью losetup нужно подключить диск виртуальной машины к блочному устройству.

   %$ losetup /dev/loop0 virtual-disk

После этого посмотреть информацию о диске с помощью fdisk:

    %$ fdisk -l -u /dev/loop0

    Disk /dev/loop0: 8388 MB, 8388608000 bytes
    255 heads, 63 sectors/track, 1019 cylinders, total 16384000 sectors
    Units = sectors of 1 * 512 = 512 bytes

        Device Boot      Start         End      Blocks   Id  System
    /dev/loop0p1   *          63      208844      104391   83  Linux
    /dev/loop0p2          208845    16370234     8080695   8e  Linux LVM

Здесь есть какой-то маленький раздел (вероятно /boot) и LVM.

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

Например, для раздела /boot:

   %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
   %$ mount /dev/loop1 /mnt

Ключ -o указывает отступ, который нужно сделать от начала файла при подключении образа к loop-файлу.

Если мы хотим подмонтировать файловые системы, которые находятся внутри LVM, то нужно сделать так.

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

   %$ losetup -o $$(208845*512) /dev/loop2 /dev/loop0

Во-вторых, сказать LVM-системе, что loop-устройства тоже могут содержать тома LVM, и что сканировать и их.

Для этого нужно отредактировать файл /etc/lvm/lvm.conf и найти строку types. Скорее всего она будет закомментирована, а в комментариях будут указаны значения по умолчанию.

   # types = [ “fd”, 16]

Измените её на строку:

   types = [ “fd”, 16, “loop”, 1]

и выполните сканирование:

    $ vgscan

    ACTIVE            '/dev/system/root' [14.62 GB] inherit
    ACTIVE            '/dev/system/home' [97.66 GB] inherit
    ACTIVE            '/dev/system/tmp' [512.00 MB] inherit
    ACTIVE            '/dev/system/swap' [4.00 GB] inherit
    inactive          '/dev/VolGroup00/LogVol00' [5.75 GB] inherit
    inactive          '/dev/VolGroup00/LogVol01' [1.94 GB] inherit

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

    $ vgchange -a y

    4 logical volume(s) in volume group "system" now active
    2 logical volume(s) in volume group "VolGroup00" now active

    $ mount /dev/VolGroup00/LogVol01 /mnt/

[править] Изменение гостевой системы

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

  %# cp -a /lib/modules/`uname -r` /mnt/lib/modules

(если мы будем запускать паравиртуальный домен не с тем ядром, которое используем сейчас, то нужно заменить `uname -r` на версию нужного ядра).

Установите libc6-xen или другим способом отключите использование TLS-библиотек.

   mv /mnt/lib/tls /mnt/lib/tls.disabled

Вы можете стереть записи udev, касающиеся сетевого интерфейса, поскольку MAC-адрес виртуального сетевого адаптера будет отличаться от реального, который использовался раньше, и который был запомнен udev. Если этого не делать, нужно отредактировать настройки сети (/etc/network/interfaces для Debian GNU/Linux) и указать новое название интерфейсов. Иначе при старте домена сеть настроена не будет.

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

[править] Приведение хост-системы в исходное состояние

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

    $ umount /mnt
    $ vgchange –activate n VolGroup00
    $ losetup -d /dev/loop2
    $ losetup -d /dev/loop1
    $ losetup -d /dev/loop0

Можно также привести файл /etc/lvm/lvm.conf в исходное состояние.


[править] Важные замечания

  • LVM имена должны быть уникальными в пределах системы! Поэтому имена в виртуальной и реальной машинах не должны повторяться!
  • Если нужно изменить UUID для виртуального диска, почитайте как это сделать в файле uuidgen.py из дистрибутива Xen
  • Для решения описанной выше задачи можно использовать не losetup, а kpartx (подробнее: LVM)

[править] Дополнительная информация


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