Под капотом · Виртуализация · Снимки
Снимок с памятью (полный)
Пользователь снимает диски вместе с памятью, чтобы потом вернуться как было. Для этого он вводит команду:
virsh snapshot-create-as vm1 snap1 \ --memspec file=/var/lib/libvirt/save/vm1.snap1.mem,snapshot=external \ --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/vm1.snap1.qcow2 \ --atomic
После выполнения команды сначала фиксируется память, и только потом диски - поэтому снимок дороже и дольше.
-
пользователь 1. Пользователь вводит команду полного снимка
virDomainSnapshotCreateXML(xml, 0) // без флагов = full system snapshot
Отличие от снимка диска - ровно в наличии памяти.
-
libvirt 2. Демон уточняет, куда писать память
<memory snapshot="internal"/> # внутрь qcow2 <memory snapshot="external" file="/path/vm1.mem"/>
Для выключенной ВМ и для снимка без памяти допустимо только snapshot="no".
-
QEMU 3. Сначала сохраняется память
память + состояние устройств
Порядок зафиксирован: диск снимается только после того, как память собрана целиком.
-
QEMU 4. Затем снимаются диски
снимок диска (оверлей или запись в qcow2)
Иначе диск уйдёт вперёд памяти и состояние будет противоречивым.
-
диск / RAM 5. На диске появляется результат
оверлей + файл памяти | или qcow2 + запись VM state
Для внешнего варианта файл памяти надо беречь вместе с цепочкой образов.
-
libvirt 6. Демон фиксирует состояние
<state>running</state> <domain>…конфигурация на момент снимка…</domain>
При откате состояние берётся из снимка, если не переопределено флагами.
-
гость 7. После отката
процессы живы, окна на месте TCP-соединения могли истечь
Документация прямо говорит: файлы и процессы не теряются, но сеть могла отвалиться.