virsh save vm_name memdump
а потом virsh restore memdump
восстанавливает (работающую) виртуальную машину нормально.
Однако виртуальная машина отключается после virsh save
. Я пишу сценарий «живого» резервного копирования и восстановления для виртуальных машин KVM, поэтому в части резервного копирования мне, очевидно, нужна виртуальная машина, работающая после резервного копирования. Это не проблема сделать virsh restore memdump
сразу после резервного копирования, но это кажется мне по существу ненужным - я «должен» иметь возможность приостановить виртуальную машину, сохранить ее память в файл, а затем просто возобновить / отменить приостановку виртуальной машины.
На самом деле это не проблема с виртуальными машинами, у которых мало памяти, но если виртуальная машина имеет значительную рабочую память, это без надобности продлевает резервное копирование.
К сожалению, виртуальная машина отключается, даже если я virsh suspend
во-первых, до virsh save
.
Есть ли способ сделать это? (т.е. приостановить, сохранить, отменить)
Во-первых, я полностью согласен с @dyasny, трудно найти разумный вариант использования для «полного состояния виртуальной машины (он же с памятью)».
Но если вы действительно хотите 'virsh save vm_name memdump', не уничтожая виртуальную машину, вы можете попробовать
virsh snapshot-create-as ${domain} ${fake_snap} 'save vm while keep running' \
--no-metadata --atomic --live \
--memspec ${path_to_mem_dump_file},snapshot=external
Удачи :)
======== Обновление: (слишком долго для отправки ответа) ===============
О, может быть, это моя многословность, 'полное состояние виртуальной машины' == mem_state + disk_state, а 'mem_state' == 'физическая память vm' + 'vm cpu регистрирует' + 'состояние устройства vm в гипервизоре'.
Таким образом, это безопасно для 'virsh save' и 'virsh store', так как их нечего терять, 'save / restore' точно так же, как 'спящий ноутбук', обычно вы продолжаете работу вашего приложения после 'восстановления' vm .
Это катастрофа, если «mem_state» и «disk_state» не синхронизированы, поэтому «virsh save» накладывает «уничтожить» после «save mem».
Мое «сохранение virsh без уничтожения» на самом деле является «полной резервной копией виртуальной машины», disk_snapshot скрыт внутри исходного qcow2. Итак, вы просто видите mem_state. :)
Если у виртуальной машины много памяти, ее сохранение в любом случае будет означать, что на сохранение memstate будет потрачено много времени.
Если нет жестких требований к резервному копированию полного состояния виртуальной машины (поскольку обычно оно избыточно, вы получите ошибки при восстановлении из-за разницы во времени, и это может даже привести к сбою).
Обычно резервные копии виртуальных машин создаются следующим образом:
virsh dumpxml VM
)Теперь единственная часть, которая может быть сложной с kvm, - это последняя часть. Это вроде поддерживается с помощью blockpull
в большинстве текущих дистрибутивов, но это не будет объединять снимок с базовым образом, он будет делать наоборот - вытащить данные из базы в снимок, чтобы вы могли удалить базу. Лучшая команда blockcommit
, он перенесет измененные биты из снимка в базовый образ, однако он доступен только в самых передовых дистрибутивах. Надеюсь, он попадет в RHEL 7.1, посмотрим