Конвертация xva в KVM формат qcow2

Итак…имеем XenServer на котором крутятся виртуалки.
Задача: нужно перенести их в другое место. А под рукой есть только сервак с KVM

Заходим на Xenserver, делаем Snapshot и сохраняем его куда то.
Закидываем бекап на сервер с KVM
Наш файл имеет формат xva, это ни что иное как обычный архив

Распаковываем его

tar vxf vm1.xva
.....
tar: Ref:50/00008193: implausibly old time stamp 1970-01-01 01:00:00
tar: Ref:50/00008193.checksum: implausibly old time stamp 1970-01-01 01:00:00
...

Готовим скрипт

#!/bin/bash
 
dd if=/dev/zero of=blank bs=1024 count=1k
test -f $1.img && rm -f $1.img
touch $1.img
 
max=`ls ???????? | sort | tail -n1`
 
for i in `seq 0 $max`; do
        fn=`printf "%08d" $i`
        echo -n "$fn of $max"
        if [ -f "$fn" ]; then
                echo " - appending chunk"
                cat $fn >> $1.img
        else
                echo " - filling blank"
                cat blank >> $1.img
        fi
done
rm -f blank
echo "Done."

В результате работы tar получаем конфиг виртуалки vm1.xml и папку “Ref :50” в которой куски нашехо диска с контрольными сумами.

Кидаем туда наш скрипт, переходим сами и запускаем его

cp conv.sh Ref\:50/
cd Ref\:50/
./conv.sh vm1

Вывод будет типа таким

00015055 of 00015370 - appending chunk
00015056 of 00015370 - appending chunk
00015057 of 00015370 - appending chunk
00015058 of 00015370 - filling blank
00015059 of 00015370 - filling blank
00015060 of 00015370 - appending chunk
00015061 of 00015370 - filling blank
00015062 of 00015370 - filling blank
00015063 of 00015370 - filling blank
00015064 of 00015370 - filling blank
00015065 of 00015370 - filling blank

На выходе получим файл vm1.img который теперь можно подключить в KVM
Или сконвертить из raw в qcow2

qemu-img convert -f raw -O qcow2 vm1.img vm1.qcow2

Если при загрузке виртуалки залипает VNC, то в grub нужно убрать переопределение консоли console=hvc0

cat /boot/grub/grub.cfg 
.....
	linux	/boot/vmlinuz-3.2.0-4-686-pae root=UUID=91ff1d8e-1cb3-4bab-883f-29118815f95a ro single console=hvc0
.....

Если сыпет такая ошибка:

init: Id "co" respawning too fast: disabled for 5 minutes

Коментируем строку в inittab

nano /etc/inittab
co:2345:respawn:/sbin/getty hvc0 9600 linux

Добавить комментарий