Как сохранить состояние машины QEMU VM, запущенной с использованием qemu-system-x86_64?

Вопрос или проблема

У меня запущен VM с использованием:

qemu-system-x86_64 -m 8192 -smp 3 \
  -net user -net nic,model=virtio -boot menu=on \
  -drive file=guixsd-usb-install-0.13.0.x86_64-linux \
  -drive file=guixsd.img

согласно руководству по установке GuixSD в VM (с некоторыми незначительными изменениями, такими как использование ОЗУ, имена файлов и количество выделенных ядер ЦП). Я хотел бы сохранить состояние машины, чтобы потом можно было его восстановить (точно таким же, как оно было до сохранения, прямо в середине выполнения команды guix system init .... Нечто вроде опции “Сохранить состояние машины” для виртуальных машин в VirtualBox. Я видел этот ответ https://unix.stackexchange.com/a/361015/27613, но он требует имя VM, а выполнение virsh list --all не показывает имена VM, запущенные через эту команду. Поиск в DuckDuckGo не дал результата, так как большинство результатов связаны с запуском VM из virt-manager.

Кажется, ваш qemu отображает окно. Если это так, нажмите ctrl-alt-2, чтобы переключиться на интерфейс монитора (и ctrl-alt-1, чтобы вернуться обратно).

Вы должны увидеть приглашение (qemu), теперь вы можете ввести следующие команды:

  • loadvm <имя снимка>
  • savevm <имя снимка>
  • delvm <имя снимка>
  • info snapshots

Пока qemu не запущен, вы можете просмотреть сохраненные состояния с помощью qemu-img snapshot -l guix.img.

Вы можете загрузить снимок напрямую при запуске qemu, добавив переключатель

-loadvm <имя снимка>

к командной строке.

Для более удобного доступа к интерфейсу монитора добавьте директиву

-monitor telnet:127.0.0.1:1234,server,nowait

к командной строке. Затем вы можете использовать telnet localhost 1234, чтобы общаться с qemu. Внимание: не вводите q или quit, чтобы выйти оттуда, так как это приведет к завершению работы эмулятора! Вместо этого нажмите ctrl-] и тогда введите q.

Ответ или решение

Сохранение состояния виртуальной машины (ВМ) в QEMU, запущенной с помощью команды qemu-system-x86_64, позволяет вам вернуться в точное состояние системы, в котором она находилась на момент сохранения. Это особенно полезно для долгосрочных операций или сложных конфигураций, таких как установка системы с помощью guix system init, как в вашем случае. Давайте подробно рассмотрим, как это сделать.

Теоретическая часть

QEMU, будучи мощным инструментом виртуализации, предоставляет функциональность для создания снимков состояния ВМ, что позволяет сохранить её оперативное и хранилищное состояние в файл для последующего восстановления. Это аналогично "снимкам" или "проверенным точкам" в других гипервизорах, таких как VirtualBox или VMware. Снимки могут значительно ускорить процесс тестирования и разработки, позволив быстро вернуться к рабочему состоянию системы.

Как работает союз savevm и loadvm

Команда savevm в QEMU сохраняет текущее состояние виртуальной машины в виде снимка. Эти снимки включают состояние памяти, регистров и всех текущих подключенных устройств. Когда вы задаете команду loadvm, машина возвращается в то же состояние, в котором она была на момент создания соответствующего снимка.

Практическая часть

  1. Переход в консоль QEMU

    При управлении ВМ через стандартное графическое управление в QEMU, вы можете получить доступ к QEMU Monitor. Это специальный интерфейс, позволяющий выполнять различные управляющие команды. Для этого используйте сочетание Ctrl-Alt-2. Чтобы вернуться обратно к графическому интерфейсу ВМ, используйте Ctrl-Alt-1.

  2. Использование команд управления снимками

    В консоли QEMU Monitor доступны несколько команд, связанные со снимками:

    • savevm <имя> — сохраняет текущее состояние ВМ с указанным именем снимка.
    • loadvm <имя> — загружает ранее сохраненный снимок с указанным именем.
    • delvm <имя> — удаляет существующий снимок.
    • info snapshots — показывает список всех текущих снимков.

    Для выполнения вашего запроса, вы можете выполнить команду savevm init_state, где init_state — это произвольно выбранное вами имя снимка.

  3. Расположение снимков памяти

    Снимки состояния машин сохраняются в образе диска (например, guixsd.img). Инструмент qemu-img позволяет работать с этими образами вне исполнения ВМ, что может быть полезно для управления снимками, когда ВМ не запущена. Используя команду:

    qemu-img snapshot -l guixsd.img

    вы получите список всех доступных снимков в образе вашего диска.

  4. Дополнительная конфигурация: Управление монитором через Telnet

    Для более удобного доступа к интерфейсу QEMU Monitor, возможно задание параметра командной строки:

    -monitor telnet:127.0.0.1:1234,server,nowait

    Это позволит вам подключиться к QEMU по Telnet, используя команду:

    telnet localhost 1234

    Важно помнить, что для выхода из сеанса Telnet без завершения QEMU вам нужно использовать Ctrl-], а затем ввести quit.

Применение на практике

Теперь, имея теоретическую и практическую основу, вы можете применить знания для улучшения эффективности работы с QEMU. При разработке сложных систем или тестировании гипотез использования снимков может значительно сократить время на повторные конфигурации и тестирование.

Представьте, что у вас запускается долгосрочный процесс установки, который может неожиданно прерваться. Используя savevm, вы сохраняете состояние системы до критического шага, а затем безопасно вернуться к нему при необходимости. Это особенно полезно в образовательных и исследовательских целях, где каждая итерация процесса может дать новую информацию.

В итоге, возможность сохранения состояний машин в QEMU обеспечивает гибкость и надёжность работы со сложными виртуализационными задачами. Благодаря этому вы можете стратегически планировать работу и минимизировать возможные потери времени и усилий.

Советуем регулярно проверять документацию и ресурсы сообщества для получения актуальной информации и оптимальной работы с инструментами виртуализации, такими как QEMU.

Оцените материал
Добавить комментарий

Капча загружается...