Назад | Перейти на главную страницу

Ошибка virsh: домен уже приостановлен

Сценарий резервного копирования моей виртуальной машины не работает при создании снимка.

virsh snapshot-create-as --domain machine_1 snap --diskspec vda,file=/srv/test/test-snap.qcow2 --disk-only --atomic --no-metadata --quiesce
error: Requested operation is not valid: domain is already quiesced

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

Я думал, что quiesce означает зависание FS, но это не имеет смысла, так как я все еще могу писать в FS, когда захожу на неисправные виртуальные машины. И это не выдержит перезагрузки, правда?

Может быть, проблема со связью заставляет хост думать, что GA сообщает, что машина находится в состоянии покоя, в то время как это не так?

В любом случае, есть ли команда для запроса состояния покоя (помимо попытки сделать снимок и посмотреть, получаю ли я ошибку)?

Предполагая, что неисправные виртуальные машины перестали работать после невоспроизводимой ошибки, я мог бы исправить это, выйдя из приостановленного состояния, что бы это ни значило. Есть ли команда virsh для отмены стабилизации виртуальной машины?

Раньше вся процедура резервного копирования работала, и теперь она не работает на 2 виртуальных машинах, но все еще работает на 2 других, и я не могу придумать какой-либо существенной разницы между ними.

Версии программного обеспечения:

(Для записи сценарий резервного копирования здесь, на GitHub. По сути, он делает следующее: 1 / создает снимок, 2 / копирует, 3 / фиксирует снимок.)

Если я удалю quiesce из командной строки снимка, все работает гладко. Но очевидно, что это не идеально.

Основная причина - ошибка это было исправлено в libvirt 1.2.11.

Исправлено в апстриме:

commit 6085d917d5c5839b7ed351e99fadbbb56f5178fe
Author: Michal Privoznik <mprivozn@redhat.com>
Date: Thu Nov 27 11:43:56 2014 +0100

qemu: Don't track quiesced state of FSs

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

As of b6d4dad11b (1.2.5) we are trying to keep the status of FSFreeze
in the guest. Even though I've tried to fixed couple of corner cases
(6ea54769ba18), it occurred to me just recently, that the approach is
broken by design. Firstly, there are many other ways to talk to
qemu-ga (even through libvirt) that filesystems can be thawed (e.g.
qemu-agent-command) without libvirt noticing. Moreover, there are
plenty of ways to thaw filesystems without even qemu-ga noticing (yes,
qemu-ga keeps internal track of FSFreeze status). So, instead of
keeping the track ourselves, or asking qemu-ga for stale state, it's
the best to let qemu-ga deal with that (and possibly let guest kernel
propagate an error).

Moreover, there's one bug with the following approach, if fsfreeze
command failed, we've executed fsthaw subsequently. So issuing
domfsfreeze in virsh gave the following result:

virsh # domfsfreeze gentoo
Froze 1 filesystem(s)

virsh # domfsfreeze gentoo
error: Unable to freeze filesystems
error: internal error: unable to execute QEMU agent command 'guest-fsfreeze-freeze': The command guest-fsfreeze-freeze has been disabled for this instance

virsh # domfsfreeze gentoo
Froze 1 filesystem(s)

virsh # domfsfreeze gentoo
error: Unable to freeze filesystems
error: internal error: unable to execute QEMU agent command 'guest-fsfreeze-freeze': The command guest-fsfreeze-freeze has been disabled for this instance

Обновление до более новой версии исправляет это.