Ubuntu 如何区分“virsh shutdown”和“virsh reboot”

Ubuntu 如何区分“virsh shutdown”和“virsh reboot”

我在 KVM 主机上运行 Ubuntu 14.04.1 ( ubuntu-14.04.1-server-amd64.iso) 客户机。主机运行的是 Ubuntu 16.04。我试图找出 Ubuntu 14.04.1 如何区分主机中发出的virsh shutdown和命令。我看到在这两种情况下客户机都从调用。使用 时,我没有看到运行级别 6 的变化(使用 echo 确认文件和)。virsh reboothalt -d -f -i -p -h/etc/rc0.d/S90haltvirsh reboot/etc/rc0.d/S90halt/etc/rc6.d/S90reboot

我还发现,在 Ubuntu 14.04.1 中,systemd-logind 处理 acpi 事件,然后执行 dbus 调用以systemd-shim运行,这会调用 shutdown 通过 upstart 将运行级别更改为“0”。如果您能帮助我们更好地理解这一点,我将不胜感激。

宾客详情:

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

主人详细信息:

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

答案1

我不是 100% 确定,但虚拟机管理程序可以通过模拟 ACPI 硬件事件(即触摸电源按钮)来命令客户操作系统关闭或重新启动。

据我所知,没有关机或重启的区分信号,只有普通的电源按钮。

这意味着virsh shutdown应该virsh reboot模拟由客户操作系统的 ACPI 守护程序注册的电源按钮点击并导致关机(默认在 Ubuntu 服务器上)或交互式提示(默认在 Ubuntu 桌面上)或者客户操作系统配置为处理此事件。

我认为,唯一的区别是,一旦虚拟机关闭,如果命令是,virsh shutdown它就会保持关闭状态,但如果命令是,virsh reboot它会立即重新启动。但这相当于冷启动,而不是热重启。

但是,查看man virsh手册后,似乎除了 ACPI 事件之外,还有更多不同的选项可以发送重启命令。但是,遗憾的是我无法告诉您有关这些的任何信息。

   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.

答案2

libvirt 首先使用 ACPI 电源按钮事件请求客户机在两种情况下(重启/关机)关闭。接下来,在重启的情况下,libvirt 本身会重新启动虚拟机。感谢 qemu-devel 的 Paolo Bonzini 指出了这一点

相关内容