Como o Ubuntu diferencia entre “virsh shutdown” e “virsh reboot”?

1

Eu tenho o Ubuntu 14.04.1 ( ubuntu-14.04.1-server-amd64.iso ) guest em execução em um host KVM. O host está executando o Ubuntu 16.04. Estou tentando descobrir como o Ubuntu 14.04.1 diferencia entre os comandos virsh shutdown e virsh reboot emitidos no host. Vejo que em ambos os casos, o convidado chama halt -d -f -i -p -h de /etc/rc0.d/S90halt . Eu não vejo uma mudança para runlevel 6 quando virsh reboot é usado (confirmado usando echo para arquivo em /etc/rc0.d/S90halt e /etc/rc6.d/S90reboot ).

Eu também descobri que no Ubuntu 14.04.1 o systemd-logind processa o evento acpi e por sua vez faz uma chamada dbus para obter systemd-shim running, que chama shutdown para obter o runlevel alterado para '0' através do upstart. Qualquer ajuda na compreensão disso é muito apreciada.

Detalhes do convidado:

srinij@ubuntu:/$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

Detalhes do anfitrião:

srinij@ubuntu-server-16x:~/Downloads$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04 LTS
Release:        16.04
Codename:       xenial
srinij@ubuntu-server-16x:~/Downloads$ virsh version
Compiled against library: libvirt 1.3.1
Using library: libvirt 1.3.1
Using API: QEMU 1.3.1
Running hypervisor: QEMU 2.5.0
    
por SriniJ 25.09.2016 / 15:09

2 respostas

0

O libvirt primeiro solicita que o convidado seja desligado nos dois casos (Reinicialização / Desligamento) usando o evento de botão liga / desliga da ACPI. Em seguida, em caso de reinicialização, a própria libvirt reinicia a VM. Obrigado a Paolo Bonzini da qemu-devel por apontar isso

    
por SriniJ 27.09.2016 / 03:41
0

Não tenho 100% de certeza, mas o hipervisor pode ordenar que o sistema operacional convidado encerre ou reinicialize, emulando um evento de hardware da ACPI, ou seja, tocando no botão liga / desliga.

Não há sinal diferenciado para o desligamento ou reinicialização, tanto quanto eu sei, apenas o botão de energia normal.

Isso significa que virsh shutdown e virsh reboot devem emular um toque no botão liga / desliga que é registrado pelo daemon ACPI do sistema operacional guest e resulta em um desligamento (no servidor Ubuntu por padrão) ou um prompt interativo (no desktop Ubuntu padrão) ou, no entanto, o sistema operacional convidado está configurado para manipular este evento.

A única diferença, eu acho, é que, uma vez que a VM foi desligada, se o comando foi virsh shutdown , ela permanece desligada, mas se foi virsh reboot , ela é ligada novamente imediatamente. Isso seria igual a uma inicialização a frio, não uma reinicialização a quente.

No entanto, olhando para o manual man virsh , parece que há mais opções diferentes para enviar um comando de reinicialização que não seja apenas um evento ACPI. No entanto, não posso dizer nada sobre isso, infelizmente.

   reboot domain [--mode MODE-LIST]
       Reboot a domain.  This acts just as if the domain had the reboot
       command run from the console.  The command returns as soon as it
       has executed the reboot action, which may be significantly before
       the domain actually reboots.

       The exact behavior of a domain when it reboots is set by the
       on_reboot parameter in the domain's XML definition.

       By default the hypervisor will try to pick a suitable shutdown
       method. To specify an alternative method, the --mode parameter can
       specify a comma separated list which includes "acpi", "agent",
       "initctl", "signal" and "paravirt". The order in which drivers will
       try each mode is undefined, and not related to the order specified
       to virsh.  For strict control over ordering, use a single mode at a
       time and repeat the command.
    
por Byte Commander 25.09.2016 / 15:43