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

Состояние ВМ после 'virsh save'

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 будет потрачено много времени.

Если нет жестких требований к резервному копированию полного состояния виртуальной машины (поскольку обычно оно избыточно, вы получите ошибки при восстановлении из-за разницы во времени, и это может даже привести к сбою).

Обычно резервные копии виртуальных машин создаются следующим образом:

  1. Файловые системы Quiesce Vm
  2. Сделать снимок диска (ов) виртуальной машины в реальном времени
  3. Сделайте резервную копию дисков и конфигурации виртуальной машины (virsh dumpxml VM)
  4. Объедините диски в реальном времени, чтобы моментальный снимок исчез

Теперь единственная часть, которая может быть сложной с kvm, - это последняя часть. Это вроде поддерживается с помощью blockpull в большинстве текущих дистрибутивов, но это не будет объединять снимок с базовым образом, он будет делать наоборот - вытащить данные из базы в снимок, чтобы вы могли удалить базу. Лучшая команда blockcommit, он перенесет измененные биты из снимка в базовый образ, однако он доступен только в самых передовых дистрибутивах. Надеюсь, он попадет в RHEL 7.1, посмотрим