qemu guest agent简称qga, 是在虚拟机中运行的守护进程,他可以管理应用程序,执行宿主机发出的命令。例如冻结或解冻文件系统,使系统进入挂起状态等。但是 guest agent(GA)并没有良好的安全保护,恶意的虚拟机可能发送虚假的回复
Setting QEMU GA up
目前QEMU通过串口发布GA。可以尝试的允许应用程序通过qume监视器与 GA进行通讯,但是需要virtio串口提供支持.
使用GA需要创建特别的串口,名为 org.qemu.guest_agent.0. 换句话说,需要在domain xml中的<devices>下添加如下内容:
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
如果使用libvirt1.0.6或者更新的的版本,可以省略<source>元素的path=" "属性。libvirt会进行自动配置。
Usage
Libvirt 不提供直接使用guest agent的任何支持,如果您不介意使用libvirt-qemu,则可以使用virDomainQemuAgentCommand API(由virsh qemu-agent-command公开);但需要注意,这是不受支持的,对agent所做的任何改变都会影响libvi,并可能会导致libvirt行为的不确定性。
同时,guest agent可以由几个支持的libvirt API内部使用,通常通过传递标志来发送请求。 例如,virDomainShutdownFlags:
VIR_DOMAIN_SHUTDOWN_DEFAULT = 0,
VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0),
VIR_DOMAIN_SHUTDOWN_GUEST_AGENT = (1 << 1),
同样使用于重启API
VIR_DOMAIN_REBOOT_DEFAULT = 0,
VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0),
VIR_DOMAIN_REBOOT_GUEST_AGENT = (1 << 1),
在virsh中,用户可以选择关机或重启的方式通过 -mode acpi|agent:
virsh reboot --mode agent $DOMAIN
virsh shutdown --mode agent $DOMAIN
如果用户正在创建快照,并希望在之前冻结并解冻文件系统,此时可通过为virDomainSnapshotCreate API指定VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE标志来完成,或者在virsh中设置:
virsh snapshot-create --quiesce $DOMAIN
virsh snapshot-create-as --quiesce $DOMAIN
警告:与任何监视器命令一样,GA命令可以无限期阻塞。Libvirt实现了一些基础性检测,以确定是否有qemu-ga实例在运行。 实际上,在每个有用的命令之前发出guest-sync命令。 如果它返回,则libvirt会认为guest agent已启动并正在运行,这时就会发送实际命令。 但是,guest agent可能会死亡或被终止。 guest-sync命令发出超时,如果命中guest agent则被认为不存在。
Configure guest agent without libvirt interference
在某些情况下,用户可能希望通过domain的XML配置guest agent,而不希望libvirt连接guest agent 的socket。 因为仅当其virtio channel 名为org.qemu.guest_agent.0时libvirt才可以连接到guest agent,
然而,可通过xml改变目标的名字
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
<target type='virtio' name='org.qemu.guest_agent.1'/>
</channel>
如果更改名字,则需要告知qemu GA
# qemu-ga -p /dev/virtio-ports/$name
Guest requirements
仅需要一件事,之前提到过得,需要在domain 中配置串口,同时,虚拟机必须安装GA,幸运的是其已经封装在rpm中。通过如下指令可以进行安装
yum install qemu-guest-agent
参考文献
wiki.libvirt.org