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

Перезагрузка

Пользователь перезагружает гостя, не перезапуская процесс QEMU. Вот какую команду он использует:

Команда
virsh reboot vm1
libvirt API virDomainReboot(dom) QMP system_reset

После выполнения команды сбрасывается только гость - процесс QEMU и файловые дескрипторы остаются на месте.

  • пользователь 1. Пользователь вводит команду перезагрузки
    virDomainReboot(dom)

    Это не reboot изнутри гостя: сброс инициируется снаружи, и гость получает его как нажатие reset.

  • libvirt 2. Демон просит QEMU сделать сброс
    QMP system_reset

    По умолчанию QEMU делает system_reset - жёсткий сброс. Флаги ACPI_POWER_BTN, GUEST_AGENT и PARAVIRT меняют путь: тогда гость узнаёт о перезагрузке сам.

  • QEMU 3. Сбрасывается состояние гостя
    CPU и RAM сбрасываются загрузчиком
    процесс и fd сохраняются

    Отличие от destroy: процесс QEMU не перезапускается, меняется только гость.

  • гость 4. Гость загружается заново
    прошивка → загрузчик → ОС
    # uptime гостя с нуля

    Uptime процесса QEMU продолжается - это видно в ps.