Pull to refresh

Xen Cloud Platform: Как поселить чужую VM в новый дом

Reading time3 min
Views8.9K
XCP

Возникла у нас следующая задача:

  • Есть подготовленный и настроенный в VMware образ виртуальной машины, в нашем конкретном случае FreeBSD 8.1
  • Есть виртуальная платформа XCP 1.6 в которой уже крутятся наши виртуальные машинки

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

Первое, что нам нужно сделать, это получить сырой образ виртуальной машины

Мы получили из внешнего источника системные требования PIII 1000Mhz, 512RAM, 20Gb IDE и следующие файлы:
FreeBSD.nvram	8684
FreeBSD.vmdk	7131758592
FreeBSD.vmsd	0
FreeBSD.vmx	2234
FreeBSD.vmxf	262

Нужный нам файл — это образ диска FreeBSD.vmdk, который необходимо конвертировать в «сырой» формат. Для этого мы используем утилиту qemu-img из пакета app-emulation/qemu. Естественно устанавливать его на сервер нет необходимости, образ можно конвертировать на любой linux-машине. Предварительно убеждаемся, что формат образа vmdk. Если формат raw, то конвертировать ничего не нужно и просто переходим к следующему шагу.
$ qemu-img info FreeBSD.vmdk
image: FreeBSD.vmdk
file format: vmdk
virtual size: 20G (21474836480 bytes)
disk size: 6.6G

Далее собственно конвертация, после которой получаем бинарный образ жесткого диска размером 20 гигабайт:
$ qemu-img convert FreeBSD.vmdk -O raw FreeBSD.raw
FreeBSD.raw   21474836480


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

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

Восстановление диска виртуальной машины из бинарного образа

Заходим в шел сервера визуализации и находим UUID витальной машины:
$ xe vm-list
...
uuid ( RO)           : c681c725-xxxx-xxxx-xxxx-5d7cd920bdbf
    name-label ( RW): FreeBSD
    power-state ( RO): halted
...
$ export VMUUID=c681c725-xxxx-xxxx-xxxx-5d7cd920bdbf

устанавливаем загрузчик:
$ xe vm-param-set uuid=$VMUUID PV-bootloader=pygrub

жесткий диск делаем загрузочным, а виртуальный CD-привод не загрузочным:
$ xe vbd-param-set uuid=$(xe vbd-list vm-uuid=$VMUUID userdevice=0 --minimal) bootable=true
$ xe vbd-param-set uuid=$(xe vbd-list vm-uuid=$VMUUID type=CD --minimal) bootable=false

находим идентификатор VDI-диска свежесозданной виртуальной машины:
$ xe vm-disk-list uuid=$VMUUID
Disk 0 VBD:
uuid ( RO)             : 50adb0d9-xxxx-xxxx-xxxx-f8f64e5c4f19
    vm-name-label ( RO): FreeBSD
       userdevice ( RW): 0

Disk 0 VDI:
uuid ( RO)             : af85b950-xxxx-xxxx-xxxx-b5203ba45aae
       name-label ( RW): FreeBSD
    sr-name-label ( RO): Local storage
     virtual-size ( RO): 21474836480
$ export VDIID=af85b950-xxxx-xxxx-xxxx-b5203ba45aae

переходим в окружение, в котором доступен жесткий диск виртуальной машины:
$ /opt/xensource/debug/with-vdi $VDIID /bin/bash

теперь устройство /dev/$DEVICE — это жесткий диск виртуальной машины. Осталось накатить на него образ, который мы получили в самом начале:
$ /opt/xensource/libexec/sparse_dd -src /var/run/sr-mount/.../FreeBSD.raw -dest /dev/$DEVICE \
   -size 21474836480 -prezeroed
$ exit


Вот собственно и все, можно стартовать виртуальную машину.

UPD:
В некоторых случаях при копировании образа жесткого диска может возникать следующая ошибка:
Device /var/run/sr-mount/.../<образ.img> has an unknown driver

Возникает это потому, что разные системы виртуализации возможно по-разному понимают что такое гигабайт. Приведу пример. Я переносил виртуальную машину linux с двумя дисками 6Гб и 2Гб с Hyper-V на XCP. Все в точности аналогично описанному в данной статье. После конвертации я получил следующие бинарные файлы жестких дисков:
-rwxrwx--- 1 1000 1000 6442426368 Sep 10 16:51 sda.raw
-rwxrwx--- 1 1000 1000 2147484160 Sep 10 17:00 sdb.raw

А диски свежесозданной VM выглядят так:
# xe vm-disk-list uuid=$VMUUID
Disk 0 VBD:
uuid ( RO)             : 6e81420a-xxxx-xxxx-xxxx-98b4fc8a5fd4
    vm-name-label ( RO): linux
       userdevice ( RW): 1

Disk 0 VDI:
uuid ( RO)             : 3af76842-xxxx-xxxx-xxxx-b78dca108b22
       name-label ( RW): linux-sdb
    sr-name-label ( RO): Local storage
     virtual-size ( RO): 2147483648

Disk 1 VBD:
uuid ( RO)             : 28784fa2-xxxx-xxxx-xxxx-6100d97ccc29
    vm-name-label ( RO): linux
       userdevice ( RW): 0

Disk 1 VDI:
uuid ( RO)             : f858579c-xxxx-xxxx-xxxx-5fc0493269fa
       name-label ( RW): linux-sda
    sr-name-label ( RO): Local storage
     virtual-size ( RO): 6442450944

Как можно убедиться, бинарный файл sda.raw чуть меньше чем 6ГБ, а sdb.raw — чуть больше 2Гб. Почему так происходит, можно только гадать. Я просто взял при копировании меньшую из двух величин. Не знаю, на сколько такое решение корректно и/или универсально, в моем случае VM корректно стартовала и никаких проблем не наблюдается.

Источники:

  1. www.howtoforge.com/how-to-convert-a-xen-virtual-machine-to-vmware
  2. serverfault.com/questions/471958/how-to-migrate-from-xen-to-xcp
Tags:
Hubs:
Total votes 11: ↑10 and ↓1+9
Comments0

Articles