martedì 19 luglio 2011

(libvirt) Timed out during operation: cannot acquire state change lock

Bell'errore di stamattina, durante un tentativo di migrazione di una VM da un host all'altro.
Sembra che il problema sia un non meglio identificato bug di libvirt versione 0.8, e sembra che sparisca dalla 0.9:

https://bugzilla.redhat.com/show_bug.cgi?id=676205

Ma per chi come me è su una Debian Squeeze e non ha voglia di iniziare la trafila del backport dei pacchetti a neanche due mesi dall'aggiornamento, non è che sia di molta consolazione.
Comunque a quello che ho visto è un qualcosa che manda a funghi libvirt. Il sintomo principale non è tanto il messaggio del titolo, quanto che libvirt non dà più la situazione corretta. Per verificarlo basta vedere la dissonanza tra:

# virsh --connect qemu:///system list --all

e

# ps -elf | grep qemu

Dei due, è il secondo che ha ragione.

La soluzione è stata riavviare libvirt, ma se in uno dei due server la cosa è andata liscia con
# /etc/init.d/libvirt-bin restart
l'altro non voleva saperne di morire. Quindi:
# kill -9 <piddilibvirt>
(sì, ok, andava bene anche pkill libvirt-bin).

Restano un processo nc (netcat, che si individua con ps -elf | grep libvirt), anche quello da killare, e due socket: /var/run/libvirt-sock e /var/run/libvirt-sock-ro, entrambi da cancellare.

A questo punto, riavviato libvirtd, la situazione è allineata e la migrazione funziona. Per la cronaca, via ssh con:
# virsh --connect qemu:///system migrate --live <vm> qemu+ssh://<altro>/system

Nessun commento:

Posta un commento