LINUX.ORG.RU
ФорумAdmin

Не загружается ОС после переноса VM (qemu/KVM) c одного хоста на другой

 , , , ,


0

1

Добрый день!

Имеется физический сервер с установленным qemu-kvm и libvirt-bin. На сервере настроен RAID1+LVM, виртуальные машины используют тома LVM в качестве дисков (у каждой ВМ свой том).

<disk type='block' device='disk'>
    <driver name='qemu' type='raw'/>
    <source dev='/dev/vg0/virtual'/>
    <target dev='vda' bus='virtio'/>
    <alias name='virtio-disk0'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

При переносе ВМ другой физический сервер с аналогичной конфигурацией часть машин не запустилась после перезагрузки. Перенос выполнялся следующим образом:

server1# virsh dumpxml virtual > virtual.xml
server1# virsh save virtual virtual.state
server1# lvcreate --snapshot -L10G -n virtual-snap /dev/vg0/virtual
server1# virsh restore virtual.state
server1# dd if=/dev/vg0/virtual-snap bs=1M | gzip -c | pv -ptrb | ssh me@server2 "gunzip -c | dd of=/dev/vg0/virtual"
server1# scp virtual.xml me@server2:~/
server1# scp virtual.state me@server2:~/
server1# lvremove /dev/vg0/virtual-snap
server2# virsh define virtual.xml
server2# virsh restore virtual.state

У проблемных машин при перезагрузке происходит зависание Booting from hard disk.

Контрольные суммы (md5sum) у /dev/vg0/virtual на обоих физ.серверах совпадают.

Пробовал переносить другим способом:

#On source host...
qemu-img convert -p -O qcow2 /dev/vg0/my-vm-disk my-vm-disk.qcow2
scp my-vm-disk.qcow2 target.example.org:/home/myuser/
 
#On target host...
qemu-img convert -p -O raw my-vm-disk.qcow2 /dev/vg0/my-vm-disk

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

Подскажите в чем может быть проблема. Заранее спасибо!



Последнее исправление: Zaibatsu17 (всего исправлений: 4)

Скорее всего связано с изменением UUID логических томов, если в конфигурации загрузчика незагружающихся ВМ ссылки на разделы стоят в виде UUID.

frozen_twilight ★★
()
Ответ на: комментарий от frozen_twilight

На сколько я понимаю, ВМ ничего не знает о LVM и томе, который она использует. ВМ видит виртуальное блочное устройство /dev/vda, которое в действительности использует том /dev/vg0/virtual на хосте.

Соответственно, blkid внутри ВМ показывает одинаковые UUID до переноса и после.

Или я вас неправильно понял.

root@myvm:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  247M  0 rom
vda    254:0    0   60G  0 disk
├─vda1 254:1    0   59G  0 part /
├─vda2 254:2    0    1K  0 part
└─vda5 254:5    0 1021M  0 part [SWAP]
root@myvm:~# blkid
/dev/vda1: UUID="a5c4b5af-377a-4f33-9a31-f65e18145ab1" TYPE="ext4" PARTUUID="9d970a9d-01"
/dev/vda5: UUID="423cf84c-e0ee-430b-aa7c-9dc9c12ef3ac" TYPE="swap" PARTUUID="9d970a9d-05"
/dev/sr0: UUID="2015-09-06-11-12-07-00" LABEL="Debian 8.2.0 amd64 1" TYPE="iso9660" PTUUID="7714c637" PTTYPE="dos"
root@myvm:~# cat /boot/grub/grub.cfg | grep UUID
        linux   /boot/vmlinuz-3.16.0-4-amd64 root=UUID=a5c4b5af-377a-4f33-9a31-f65e18145ab1 ro  quiet
                linux   /boot/vmlinuz-3.16.0-4-amd64 root=UUID=a5c4b5af-377a-4f33-9a31-f65e18145ab1 ro  quiet
                linux   /boot/vmlinuz-3.16.0-4-amd64 root=UUID=a5c4b5af-377a-4f33-9a31-f65e18145ab1 ro single
Zaibatsu17
() автор топика
Ответ на: комментарий от Zaibatsu17

Да, верное замечание, я по привычке спроецировал особенности Xen PV, там UUID разделов снаружи и внутри совпадают.

Как насчёт загрузиться с LiveCD и переустановить загрузчик?

frozen_twilight ★★
()
Ответ на: комментарий от frozen_twilight

Т.к. после переноса и до перезагрузки ОС работает, пробовал без LiveCD.

grub-install /dev/vda не исправил ситуацию.

Zaibatsu17
() автор топика

Внес правку в описание, которая может иметь значение: LVM настроен поверх RAID1.

Zaibatsu17
() автор топика

Возможно, дело в разных процессорах на источнике и назначении. Сделай «virsh edit domain» и поколдуй с секцией «cpu». Убери всё лишнее (приведи к состоянию generic), почитай описание секции в либвиртовской вики. Как альтернатива - потыкай настройки VM CPU в вирт-менеджере.

nbw ★★★
()

dd if=/dev/vg0/virtual-snap bs=1M | gzip -c | pv -ptrb | ssh me@server2 «gunzip -c | dd of=/dev/vg0/virtual»

у меня вопрос. а почему просто файл образа нельзя перенести, зачем надо так извращаться с дд?

darkenshvein ★★★★★
()
Ответ на: комментарий от darkenshvein

Пробовал и так переносить, и в .img записывать сначала и его переносить, и в .cow2 конвертировать, переносить его и потом из него в lv заливать - результат один и тот же.

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

Zaibatsu17
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.