qemu-guest-agent---介绍及安装
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了