почему libvirt virdomain guest os может игнорировать запрос на перезагрузку или выключение? - PullRequest
0 голосов
/ 18 мая 2018

функция перезагрузки класса virdomain из libvirt-domain:

def reboot(self, flags=0):
        """Reboot a domain, the domain object is still usable thereafter, but
        the domain OS is being stopped for a restart.
        Note that the guest OS may ignore the request.
        Additionally, the hypervisor may check and support the domain
        'on_reboot' XML setting resulting in a domain that shuts down instead
        of rebooting.

        If @flags is set to zero, then the hypervisor will choose the
        method of shutdown it considers best. To have greater control
        pass one or more of the virDomainRebootFlagValues. The order
        in which the hypervisor tries each shutdown method is undefined,
        and a hypervisor is not required to support all methods.

        To use guest agent (VIR_DOMAIN_REBOOT_GUEST_AGENT) the domain XML
        must have <channel> configured.

        Due to implementation limitations in some drivers (the qemu driver,
        for instance) it is not advised to migrate or save a guest that is
        rebooting as a result of this API. Migrating such a guest can lead
        to a plain shutdown on the destination. """
        ret = libvirtmod.virDomainReboot(self._o, flags)
        if ret == -1: raise libvirtError ('virDomainReboot() failed', dom=self)
        return ret

и мой qemu / kvm vm не отвечает на запрос перезагрузки или выключения, а отвечает на запрос сброса.Я хочу знать, почему и что я могу сделать.спасибо ~

1 Ответ

0 голосов
/ 18 мая 2018

Вы не упоминаете, какой гипервизор вы используете, поэтому в своем ответе я приму QEMU / KVM.

Существует два способа shutdown и reboot.

Подход по умолчанию, используемый libvirt / QEMU, заключается в том, чтобы внедрить событие кнопки питания ACPI.Большинство гостевых ОС построены так, что что-то увидит событие ACPI и начнет постепенное завершение работы, но это не всегда так.Для перезагрузки libvirt сделает то же самое инъекцию кнопки питания ACPI, но когда гость завершит свою последовательность выключения, он будет сброшен, чтобы он снова загрузился.

Второй необязательный подход - установить гостевой агент QEMU вгостевая ОС.Затем вы можете указать virsh использовать гостевой агент для запуска выключения / перезагрузки.Однако гостевой агент доступен только для определенных ОС, современных Linux и Windows, если вы установили пакет драйверов virtio.

A virsh reset совершенно другой - он просто выполняет немедленный сброс виртуальных процессоров, вызываямгновенный перезапуск гостя без постепенного завершения работы.

...