Под капотом · Виртуализация · Работа и остановка
Сохранение состояния (гибернация ВМ)
Пользователь сохраняет состояние ВМ в файл и освобождает память. Для этого нужны две команды:
virsh managedsave vm1 virsh start vm1
После выполнения команд память уходит в файл и возвращается обратно:
- Команда managedsave пишет память и состояние устройств, ВМ останавливается;
- Команда start загружает файл обратно, и гость продолжает с того же места.
-
пользователь 1. Пользователь вводит команду сохранения состояния
virDomainManagedSave(dom) # или: virDomainSave(dom, "/backup/vm1.state")
Managed: файлом владеет libvirt. Обычный save: файлом владеет пользователь, а XML домена из файла читает virDomainSaveImageGetXMLDesc - ещё до восстановления.
-
libvirt 2. Демон готовит снимок памяти
память + состояние устройств → файл состояния
Снимка «только памяти» в API снапшотов нет: там память идёт только вместе с дисками.
-
QEMU 3. QEMU записывает состояние
RAM и состояние устройств → файл
В qcow2 аналогичные данные лежат в записи таблицы снапшотов - поле «Size of the VM state in bytes».
-
диск / RAM 4. Диски не копируются
образы остаются как есть ВМ остановлена
Именно поэтому восстановление сломается, если диски успели измениться.
-
libvirt 5. ВМ в списке, но «спит»
state → shut off (saved)
Внешне это выключенная ВМ, которая на самом деле помнит всё.
-
гость 6. Пользователь запускает - и продолжает
virsh start vm1 → память загружается обратно
Процессы живы; TCP-соединения могли истечь, но файлы и состояние - на месте.