21.5. Guest Virtual Machine Fails to Shutdown
通常,执行 virsh shutdown 命令会导致发送电源按钮 ACPI 事件,因此当有人在物理机上按下电源按钮时复制同样的操作。在每个物理计算机中,操作系统可以处理此事件。在过去的操作系统中,只会静默关闭。今天,最常见的操作是显示询问应做什么的对话框。有些操作系统甚至可以完全忽略此事件,特别是在没有用户登录的情况下。当在客户端虚拟机中安装此类操作系统时,运行 virsh shutdown 无法正常工作(它会被忽略,或者在虚拟机显示对话框)。但是,如果将 qemu-guest-agent 频道添加到客户机虚拟机,并且此代理正在客户端虚拟机操作系统中运行,则 virsh shutdown 命令将请求代理关闭客户端操作系统而不是发送 ACPI 事件。代理将从客户机虚拟机操作系统内部调用关机,一切均按预期运行。
过程 21.2. 在客户机虚拟机中配置客户机代理频道
- 停止 guest 虚拟机。
- 为客户机虚拟机打开域 XML 并添加以下片断:
图 21.1. 配置客户机代理频道
<channel type='unix'> <source mode='bind'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
- 通过运行 virsh start [domain] 来启动 guest 虚拟机。
- 在客户机虚拟机上安装 qemu-guest-agent (yum install qemu-guest-agent),并在每次引导时都作为服务(qemu-guest-agent.service)自动运行。如需更多信息,请参阅 第 10 章 qemu-img 和 QEMU 客户机代理。