Итак…имеем 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