qemu guest agent 用法

虚拟机内需要安装 qemu-guest-agent
并启动 systemctl start qemu-guest-agent

一,命令

virsh qemu-agent-command 虚拟机 --cmd 参数

参数说明:

说明中示例省略 virsh qemu-agent-command 虚拟机 --cmd 这部分

命令 说明 示例
guest-info 获取 agent 支持的命令 '{"execute":"guest-info"}'
guest-sync-delimited 宿主机发送一个 int 数字给 qga,qga 返回这个数字,并且在后续返回字符串响应中加入 ascii 码为 0xff 的字符。 '{"execute":"guest-sync-delimited"}'
guest-sync 示例1 示例1
guest-ping ping 虚机 agent,无错误返回表示成功 '{"execute":"guest-ping"}'
guest-get-time 获取虚拟机系统时间 '{"execute":"guest-get-time"}'
guest-set-time 设置虚机时间 示例2
guest-info 获取当前 qga 支持的命令列表以及版本信息等 '{"execute":"guest-info"}'
guest-shutdown 开启虚拟机关机任务,其为异步命令,不保证关机成功 示例3
guest-file-open 打开虚拟机内文件并返回文件 handle 示例3
guest-file-read 读取打开文件的内容 示例4
guest-file-write 写文件 示例5
guest-file-close 关闭打开的文件 '{"execute":"guest-file-close", "arguments":{"handle": 1000}}'
guest-file-seek fseek() 一样,查找文件中的某个位置,然后返回当前文件位置。还封装了 ftell() 的功能,offset=0,whence=1 示例6
guest-file-flush 将用户缓冲区数据写入磁盘或内核缓冲区 '{"execute":"guest-file-seek", "arguments":{"handle": 1000}}'
guest-fsfreeze-status 获取虚拟机文件冻结状态
thawed: 解冻
frozen:冻结
'{"execute":"guest-fsfreeze-status"}'
guest-fsfreeze-freeze 同步并冻结虚拟机文件系统

返回:
返回目前冻结的文件个数,如果执行错误,则解冻当前所有文件
'{"execute":"guest-fsfreeze-freeze"}'
guest-fsfreeze-freeze-list 同步和冻结指定的虚拟机文件 示例7
guest-fsfreeze-thaw 冻结所有文件 '{"execute":"guest-fsfreeze-thaw"}'
guest-fstrim 丢弃(或“修剪”)文件系统未使用的空间 示例8
guest-suspend-disk 挂起虚拟机磁盘,如成功则不返回值
尝试三种策略:
systemd hibernate
pm-utils (via pm-hibernate)
manual write into sysfs
'{"execute":"guest-suspend-disk"}'
guest-suspend-ram 挂起虚拟机 ram。策略同上 '{"execute":"guest-suspend-ram"}'
guest-network-get-interfaces 获取虚拟机IP地址,MAC地址,子网掩码 '{"execute":"guest-network-get-interfaces"}'
guest-get-vcpus 检索客户的逻辑处理器列表。这是一个只读操作

返回虚机所有 VCPU 的列表。无序
'{"execute":"guest-get-vcpus"}'
guest-set-vcpus 尝试重新配置客户内部的逻辑处理器(当前:启用/禁用)。 示例9
guest-get-fsinfo 获取在虚拟机中挂载的文件系统列表 '{"execute":"guest-get-fsinfo"}'
guest-set-user-password 设置用户密码 示例10
guest-get-memory-block 获取虚拟内存信息
guest-exec 执行命令 示例11
guest-exec-status 查看 guest-exec 执行后返回的 pid。获取数据 示例12
guest-get-host-name 返回机器名称 '{"execute":"guest-get-host-name"}'
guest-get-timezone 获取虚拟机时区信息 '{"execute":"guest-get-timezone"}'
guest-get-osinfo 获取操作系统信息 '{"execute":"guest-get-osinfo"}'

官方文档

二、命令示例

示例 1. guest-sync

以下为官方文档翻译
回文唯一的整数,这个命令进行测试。

这个命令用于确保 client 与 guest agent 是同步的,不包含之前 client 旧数据。在返回提供的唯一整数值之前, guest agent 忽略所有响应,并且由 client 以可以获取此响应的方式处理陈旧的全部或部分传递的 JSON 文本。

在 client 之前收到部分旧响应的情况下,这不能总是可靠地完成。一种特殊情况是,如果 qemu-ga 响应被逐个字符地馈送到 JSON 解析器中。在这些情况下,使用 guest-sync-delimited 可能是最佳选择。

对于逐行获取响应并将其转换为 JSON 对象的客户端,guest-sync 应该就足够了,但请注意,在通道脏的情况下,一些解析响应的尝试可能会导致解析器错误。

此类客户端还应在此命令之前使用 0xFF 字节,以确保来宾代理刷新来自先前会话的任何部分读取的 JSON 数据。

Arguments:
命令 说明
id 整数
示例:
virsh qemu-agent-command xxx --cmd '{"execute":"guest-sync", "arguments":{"id":123123}}'
# 成功返回
{"return":123123}

示例 2. guest-set-time

当 client 暂停或迁移后,client 操作系统时间会出现差值。根据间隔的时间长短,NTP 可能无法重新同步。此命令尝试将 client 的系统时间设置为给定值,然后将硬件时钟 (RTC) 设置为当前系统时间。

如果未指定时间,则从 RTC 读取要设置的时间。但是,并非所有平台(即 Windows)都支持此功能。

Arguments:
命令 说明
time 整数,这是一个纳秒的时间
示例:
virsh qemu-agent-command xxx --cmd '{"execute":"guest-set-time", "arguments":{"time": 1580637675389882900}}'
# 成功返回
{"return":{}}

示例 2. guest-shutdown

Arguments:
命令 说明
mode 参数:
halt:停止
powerdown:默认 断电
reboot:重启
示例:
virsh qemu-agent-command xxx --cmd '{"execute":"guest-set-time", "arguments":{"time": 1580637675389882900}}'
# 成功返回
{"return":{}}

示例 3. guest-file-open

Arguments:
命令 说明
path 文件在虚机内的完整路径
mode 打开模式,根据 fopen()r 是默认值。
示例:
virsh qemu-agent-command xxx --cmd '{"execute":"guest-file-ope", "arguments":{"path": "/root/123.txt"}}'
# 成功返回
{"return":1000}

示例 4. guest-file-read

Arguments:
命令 说明
handle guest-file-open 时返回的文件 handle
count 要读取的最大字节数(默认为 4KB,最大为 48MB)
示例:
virsh qemu-agent-command xxx --cmd '{"execute":"guest-file-read", "arguments":{"handle": 1000}}'
# 成功返回
{"return":{"count":535,"buf-b64":"IyEgL2Jpbi9i......yBkb25lCg==","eof":true}}

示例 5. guest-file-write

Arguments:
命令 说明
handle guest-file-open 时返回的文件 handle
buf-b64 文件内容,转化为 base64
count 要写入的字节数(实际字节数,base64-decode 之后),默认是 base64 解码后 buf-b64 缓冲区中的所有内容
示例:
virsh qemu-agent-command xxx --cmd '{"execute":"guest-file-write", "arguments":{"handle": 1000, "buf-b64": "IyEgL2Jpbi9i......yBkb25lCg=="}}'

示例 6. guest-file-seek

Arguments:
命令 说明
handle int 类型 guest-file-open 时返回的文件 handle
offset int 类型 文件流中要跳过的字节
whence int 类型 用于解释偏移的符号或数字代码
示例:
virsh qemu-agent-command i-prsqxjon --cmd '{"execute":"guest-file-seek", "arguments":{"handle": 1001, "offset": 10, "whence": 0}}'

# 成功返回
{"return":{"eof":false,"position":10}}

示例 7. guest-fsfreeze-freeze-list

Arguments:
命令 说明
mountpoints 冻结文件数组
示例:
virsh qemu-agent-command i-prsqxjon --cmd '{"execute":"guest-file-seek", "arguments":{"handle": 1001, "offset": 10, "whence": 0}}'

# 成功返回
当前冻结的文件系统数。出错时,所有文件系统都将被解冻。

示例 8. guest-fstrim

Arguments:
命令 说明
minimum int类型
要丢弃的最小连续可用范围,以字节为单位。小于此的自由范围可能会被忽略(这是一个提示,客人可能不会尊重它)。通过增加此值,fstrim 操作将更快地完成具有严重碎片可用空间的文件系统,尽管并非所有块都将被丢弃。默认值为零,表示“丢弃每个空闲块”。
示例:
virsh qemu-agent-command i-prsqxjon --cmd '{"execute":"guest-fstrim", "arguments":{"minimum": 10}}'

# 成功返回一个 GuestFilesystemTrimResponse,其中包含所有修剪路径的状态。

示例 9. guest-set-vcpus

Arguments:
命令 说明
vcpus 数组类型
参数:
logical-id: int VCPU 的 guest-specific 特定的唯一标识符。
online: boolean VCPU 是否启用。
can-offline: boolean 是否可以使 VCPU 脱机

示例 10. guest-set-user-password

Arguments:
命令 说明
vcpus 数组类型
参数:
logical-id: int VCPU 的 guest-specific 特定的唯一标识符。
online: boolean VCPU 是否启用。
can-offline: boolean 是否可以使 VCPU 脱机

示例 11. guest-exec

Arguments:
命令 说明
path 执行的路径或名称
arg array 执行命令所需参数
env array 执行所需的环境变量
input-data 要传递给进程标准输入的数据(base64 编码)
capture-output bool 标志以启用正在运行的进程的标准输出/标准错误的捕获。默认为 False。
示例:
virsh qemu-agent-command i-prsqxjon --cmd '{"execute":"guest-exec", "arguments":{"path":"ls","capture-output":true}}'
# 返回 pid
{"return":{"pid":19099}}

示例 11. guest-exec-status

Arguments:
命令 说明
pid guest-exec 返回的 pid
示例:
virsh qemu-agent-command i-prsqxjon --cmd '{"execute":"guest-exec-status", "arguments":{"pid":19099}}'

# 成功返回
{"return":{"exitcode":0,"out-data":"YmluZG......ZAo=","exited":true}}
返回参数
命令 说明
exited 如果进程已经终止,则为 true。
exitcode 如果正常终止,则处理退出代码。
signal 如果进程异常终止,信号编号 (linux) 或未处理的异常代码 (windows)。
out-data 进程的 base64 编码标准输出
err-data 进程的 base64 编码标准错误
:仅当为guest-exec 指定了 capture-output 时,才会出现 out-dataerr-data
out-truncated 如果由于大小限制而未完全捕获标准输出,则为 true。
err-truncated 如果由于大小限制而未完全捕获 stderr,则为 true。

你可能感兴趣的:(qemu guest agent 用法)