如何向 QEMU 来宾 (OpenBSD) 发送关闭事件?

如何向 QEMU 来宾 (OpenBSD) 发送关闭事件?

我仅使用虚拟化将 OpenBSD 安装到裸硬件上,在安装过程中,未配置到串行端口的重定向,因此,我最终使系统运行,但无法登录并执行干净的操作关闭。

kvm -m 6144 -smp 4 -drive file=/dev/sda,if=ide \
    -drive file=/dev/sdb,if=scsi -drive file=/dev/sdc,if=scsi \
    -cdrom install52.iso -boot d -nographic

如何向此会话发送关闭事件? AFAIK,Ctrl-a x如图所示这里或者 apkill kvm还不会完全关闭。

或者,如何从-nographic模式切换到-curses模式?

答案1

也许Ctrl-a csystem_powerdown

应该可以工作,尽管它在我的情况下似乎不起作用;也许 OpenBSD 和 QEMU ACPI 的交互不够好。

答案2

libvirt知道如何处理这个问题。如果您不介意安装libvirtdvirsh,那么您可以使用:

virsh list

显示客人的姓名。并且,要正常关闭 name 的来宾guest_001,请使用以下命令:

virsh shutdown guest_001

答案3

原则上:向 QEMU 监视器发送“system_powerdown”(请参阅​​其他答案)将向来宾操作系统发出关闭电源的信号(就像您按下电源按钮一样)。您需要进行设置powerdown=YES才能/etc/rc.shutdown真正完全关闭机器。

不幸的是,在我的实际设置中,虽然这对于真实的硬件机器来说效果很好,但虚拟机在接收事件时会冻结powerdown。 (这是使用QEMU-KVM 1.1.2 on Debian Wheezy/amd64 and OpenBSD 5.5 amd64 GENERIC.SP)所以您可以做的是将shutdown -h now或发送halt -p到(OpenBSD)控制台。

答案4

qemu 向 VM 发送 acpi 关闭事件,如果它无法解释此调用,则不会关闭。在Linux中这意味着你需要acpid运行,至于BSD,我想类似的东西一定存在

相关内容