QEMU Guest Agent 配置
QEMU Guest Agent 是一个运行在虚拟机(Guest)上的守护进程,它允许主机(Host)通过 QEMU 的虚拟通道(virtio channels)获取关于虚拟机状态和执行某些操作的命令。这使得主机能够执行诸如获取虚拟机磁盘使用情况、获取网络信息、挂载/卸载ISO映像等操作,而无需在虚拟机内部执行。这对于自动化管理和监控任务非常有用
安装 QEMU Guest Agent
首先,需要在虚拟机上安装 QEMU Guest Agent。安装步骤取决于操作系统。
对于 Linux 虚拟机
-
Ubuntu/Debian 系统:
| Bash |
|---|
| sudo apt-get update
sudo apt-get install qemu-guest-agent
|
-
CentOS/RHEL 系统:
| Bash |
|---|
| sudo yum install qemu-guest-agent
|
-
运行服务:
| Bash |
|---|
| # 检查服务状态
systemctl status qemu-guest-agent
# 如果未运行,启动服务
systemctl start qemu-guest-agent
systemctl enable qemu-guest-agent
|
在宿主机
| Bash |
|---|
| # 查看虚拟机配置是否包含guest agent通道,(Rocky-template 是虚拟机名字)
virsh dumpxml Rocky-template | grep -A 5 -B 5 guest_agent
# 或者查看整个devices部分
virsh dumpxml Rocky-template | grep -A 100 "<devices>"
# 正确的配置应该包含:
<channel type='unix'>
<source mode='bind'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
|
如果没有配置,添加Guest Agent支持
| Bash |
|---|
| # 编辑虚拟机配置
virsh edit Rocky-1
# 在 <devices> 部分添加:
<channel type='unix'>
<source mode='bind'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
|
重启虚拟机以使配置生效
| Bash |
|---|
| virsh destroy Rocky-template
virsh start Rocky-template
# 在宿主机测试agent
virsh qemu-agent-command Rocky-template '{"execute":"guest-ping"}'
# 尝试获取网络信息
virsh qemu-agent-command Rocky-template '{"execute":"guest-network-get-interfaces"}'
# 默认网络,使用domifaddr也可以查看IP地址
virsh domifaddr Rocky-template
|
查看qemu-guest-agent工具信息
| Bash |
|---|
| # 列出版本与支持的命令
virsh qemu-agent-command ubuntu-1 '{"execute":"guest-info"}' | jq -r '.return.supported_commands[]'
virsh qemu-agent-command ubuntu-1 '{"execute":"guest-info"}'|jq
{
"return": {
"version": "8.2.2",
"supported_commands": [
{
"enabled": true,
"name": "guest-get-cpustats",
"success-response": true
},
{
"enabled": true,
"name": "guest-get-diskstats",
"success-response": true
},
{
"enabled": true,
"name": "guest-ssh-remove-authorized-keys",
"success-response": true
},
....
|
常用命令
| Bash |
|---|
| # 系统信息类
# 获取主机名 - 基本都支持
virsh qemu-agent-command Rocky-1 '{"execute":"guest-get-host-name"}'
# 获取用户列表 - 基本都支持
virsh qemu-agent-command Rocky-1 '{"execute":"guest-get-users"}'
# 获取时区信息
virsh qemu-agent-command Rocky-1 '{"execute":"guest-get-timezone"}'
# 获取操作系统信息
virsh qemu-agent-command Rocky-1 '{"execute":"guest-get-osinfo"}'
# 网络类
# 获取网络接口信息 - 基本都支持
virsh qemu-agent-command Rocky-1 '{"execute":"guest-network-get-interfaces"}'
# 文件系统类
# 文件系统冻结/解冻 - 用于创建一致性快照
virsh qemu-agent-command Rocky-1 '{"execute":"guest-fsfreeze-freeze"}'
virsh qemu-agent-command Rocky-1 '{"execute":"guest-fsfreeze-thaw"}'
# 获取文件系统信息
virsh qemu-agent-command Rocky-1 '{"execute":"guest-get-fsinfo"}'
# 系统控制类
# 安全关机/重启
virsh qemu-agent-command Rocky-1 '{"execute":"guest-shutdown", "arguments":{"mode":"powerdown"}}'
virsh qemu-agent-command Rocky-1 '{"execute":"guest-shutdown", "arguments":{"mode":"reboot"}}'
|