Вопрос или проблема
У меня запущен 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
, машина возвращается в то же состояние, в котором она была на момент создания соответствующего снимка.
Практическая часть
-
Переход в консоль QEMU
При управлении ВМ через стандартное графическое управление в QEMU, вы можете получить доступ к QEMU Monitor. Это специальный интерфейс, позволяющий выполнять различные управляющие команды. Для этого используйте сочетание
Ctrl-Alt-2
. Чтобы вернуться обратно к графическому интерфейсу ВМ, используйтеCtrl-Alt-1
. -
Использование команд управления снимками
В консоли QEMU Monitor доступны несколько команд, связанные со снимками:
savevm <имя>
— сохраняет текущее состояние ВМ с указанным именем снимка.loadvm <имя>
— загружает ранее сохраненный снимок с указанным именем.delvm <имя>
— удаляет существующий снимок.info snapshots
— показывает список всех текущих снимков.
Для выполнения вашего запроса, вы можете выполнить команду
savevm init_state
, гдеinit_state
— это произвольно выбранное вами имя снимка. -
Расположение снимков памяти
Снимки состояния машин сохраняются в образе диска (например,
guixsd.img
). Инструментqemu-img
позволяет работать с этими образами вне исполнения ВМ, что может быть полезно для управления снимками, когда ВМ не запущена. Используя команду:qemu-img snapshot -l guixsd.img
вы получите список всех доступных снимков в образе вашего диска.
-
Дополнительная конфигурация: Управление монитором через 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.