Под капотом · Виртуализация · Работа и остановка

Сохранение состояния (гибернация ВМ)

Пользователь сохраняет состояние ВМ в файл и освобождает память. Для этого нужны две команды:

Команда
virsh managedsave vm1
virsh start vm1
libvirt API virDomainManagedSave · virDomainSave(path)

После выполнения команд память уходит в файл и возвращается обратно:

  • Команда 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-соединения могли истечь, но файлы и состояние - на месте.