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

cns*_*nst 16 kvm openbsd qemu

我仅使用虚拟化将 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
Run Code Online (Sandbox Code Playgroud)

如何向此会话发送关闭事件?AFAIK,Ctrl-a x如此处所示否则pkill kvm还不会完全关闭。

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

cns*_*nst 9

也许Ctrl-a csystem_powerdown

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


小智 6

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

virsh list
Run Code Online (Sandbox Code Playgroud)

显示客人的姓名。并且,要优雅地关闭带有 name 的来宾guest_001,请使用以下命令:

virsh shutdown guest_001
Run Code Online (Sandbox Code Playgroud)


小智 5

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

不幸的是,在我这里的实际设置中,虽然这对于真正的硬件机器非常有效,但 VM 在接收powerdown事件时会冻结。(这是与QEMU-KVM 1.1.2 on Debian Wheezy/amd64 and OpenBSD 5.5 amd64 GENERIC.SP) 所以你可以做的是发送一个shutdown -h noworhalt -p到(OpenBSD)控制台。