通过指令
virsh qemu-agent-command 虚拟机 --cmd '{"execute":"guest-info"}'
可以查看其所有支持的命令,返回的数据如下
{"return":{"version":"2.8.0",
"supported_commands": [
{"enabled":true,"name":"guest-sync-delimited","success-response":true},{"enabled":true,"name":"guest-sync","success-response":true},
{"enabled":true,"name":"guest-suspend-ram","success-response":false},
{"enabled":true,"name":"guest-suspend-hybrid","success-response":false},
{"enabled":true,"name":"guest-suspend-disk","success-response":false},
{"enabled":true,"name":"guest-shutdown","success-response":false},
{"enabled":true,"name":"guest-set-vcpus","success-response":true},
{"enabled":true,"name":"guest-set-user-password","success-response":true},
{"enabled":true,"name":"guest-set-time","success-response":true},
{"enabled":true,"name":"guest-set-memory-blocks","success-response":true},
{"enabled":true,"name":"guest-ping","success-response":true},
{"enabled":true,"name":"guest-network-get-interfaces","success-response":true},
{"enabled":true,"name":"guest-info","success-response":true},
{"enabled":true,"name":"guest-get-vcpus","success-response":true},
{"enabled":true,"name":"guest-get-time","success-response":true},
{"enabled":true,"name":"guest-get-memory-blocks","success-response":true},
{"enabled":true,"name":"guest-get-memory-block-info","success-response":true},
{"enabled":true,"name":"guest-get-fsinfo","success-response":true},
{"enabled":true,"name":"guest-fstrim","success-response":true},
{"enabled":true,"name":"guest-fsfreeze-thaw","success-response":true},
{"enabled":true,"name":"guest-fsfreeze-status","success-response":true},
{"enabled":true,"name":"guest-fsfreeze-freeze-list","success-response":true},
{"enabled":true,"name":"guest-fsfreeze-freeze","success-response":true},
{"enabled":false,"name":"guest-file-write","success-response":true},
{"enabled":false,"name":"guest-file-seek","success-response":true},
{"enabled":false,"name":"guest-file-read","success-response":true},
{"enabled":false,"name":"guest-file-open","success-response":true},
{"enabled":false,"name":"guest-file-flush","success-response":true},
{"enabled":false,"name":"guest-file-close","success-response":true},
{"enabled":false,"name":"guest-exec-status","success-response":true},
{"enabled":false,"name":"guest-exec","success-response":true}
]}}
返回为数据,其中supported_command 为所有命令的数组
其官方地址为:QEMU Guest Agent Protocol Reference
各命令含义如下:
1. guest-sync-delimited
宿主机发送一个int数字给qga,qga返回这个数字,并且在后续返回字符串响应中加入ascii码为0xff的字符。
2. guest-sync
回文唯一的整数,这个命令进行测试。
这个命令用于确保client与guest agent是同步的,不包含之前client的陈旧数据。直到返回特定的数字之前的guest agent响应都应被忽略。当含有client接收到陈旧数据时,这个命令并不能可靠的执行。一个特定的场景是,如果qemu-ga响应被逐个字符地输入到JSON解析器中。在这些情况下,使用guest-sync-delimited可能是最佳选择。对于逐行获取响应并将其转换为JSON对象的客户机,guest-sync应该足够了,但请注意,在通道不干净的情况下,一些解析响应的尝试可能会导致解析器错误。此类客户端还应该在此命令之前加上0xFF字节,以确保客户代理刷新前一个会话的部分读取的JSON数据。
Arguments:
id: int,随机生成的64-bit整数
Returns:
客户端发出的特定整数
测试:
virsh qemu-agent-command centos --cmd
'{"execute":"guest-sync", "arguments":{"id":1234567890}}'
{"return":1234567890}
3. guest-ping
Ping the guest agent,如果不返回错误信息,则成功
测试:
virsh qemu-agent-command centos --cmd
'{"execute":"guest-ping"}'
{"return":{}}
4. guest-get-time
获取虚拟机系统时间(相对于1970-01-01 in UTC);
Returns:
纳秒格式的时间
测试:
virsh qemu-agent-command centos --cmd
'{"execute":"guest-get-time"}'
{"return":1534345952638400000}
5. guest-set-time
设置虚拟机时间
Arguments:
time: int (optional)
时间格式为纳秒,相对于1970-01-01 in UTC
Returns:
成功则无返回值
6. guest-info
获取guest agent信息
Returns:
GuestAgentInfo对象
GuestAgentInfo对象用于描述agent guest 信息,其包含两个成员
version: string -- guest agent版本信息
supported_commands: array of GuestAgentCommandInfo -- guest agent命令信息
7. guest-shutdown
开启虚拟机关机任务,其为异步命令,不保证关机成功
Arguments:
mode: string (optional)
"halt", "powerdown" , "reboot"三种状态可以选择,powerdown为默认选项,命令成功执行无返回。成功的标志是,VM以0的推出状态推出,或使用QMP命令查询时返回VM状态为shutdown
8. guest-file-open
打开虚拟机内文件并返回文件句柄
Arguments:
path: string,虚拟机所打开文件完整路径
mode: string (optional),打开文件方式,与fopen()函数相同,默认为"r"
Returns:
执行成功则返回文件句柄
9. guest-file-close
关闭虚拟机文件
Arguments:
handle: int,guest-file-open所返回的文件句柄
Returns:
成功无返回值
10. guest-file-read
读取虚拟机中打开的文件(Data will be base64-encoded)
Arguments:
handle: int,guest-file-open所返回的文件句柄
count:int,最少读取位数(默认为64K)
Returns:
成功则返回GuestFileRead类
GuestFileRead对象包含如下成员
count: int,读取位数
buf-b64: string,base64-encoded bytes read
eof: boolean,读取操作时是否遇到EOF。
11. guest-file-write
写入虚拟机打开的文件
Arguments:
handle: int,guest-file-open所返回的文件句柄
count:int,最少读取位数(默认为64K)
buf-b64: string,表示要写入数据的base64编码字符串
count: int (optional),写入的位数,默认是在buffer中的全部位数
Returns:
成功返回GuestFileWrite类
GuestFileWrite为agent file-write命令返回结果,包含两个成员,
count: int,写入的位数
eof: boolean,写操作时是否遇到EOF。
12. guest-file-seek
同fseek()用法相同,seek到文件的指定位置,
Arguments:
handle: int,guest-file-open所返回的文件句柄
offset:int,文件位移量
whence: GuestFileWhence,描述offset
Returns:
成功则返回GuestFileSeek类
GuestFileSeek类包含如下成员
position: int,当前位置
eof: boolean,在seek过程中是否遇到EOF
GuestFileWhence包含两个成员
value: int,Integral value (0 for set, 1 for cur, 2 for end) 由于历史原因,可能与虚拟机不同
name: QGASeek,Symbolic name, and preferred interface
13. guest-file-flush
将用户缓冲区数据写入磁盘或内核缓冲区
Arguments:
handle: int,guest-file-open所返回的文件句柄
Returns:
成功则无返回值*
14. guest-fsfreeze-status
获取虚拟机文件冻结状态
Returns:
GuestFsfreezeStatus枚举,包括thawed,frozen两种状态
15. guest-fsfreeze-freeze
同步并冻结虚拟机文件系统
Returns:
返回目前冻结的文件个数,如果执行错误,则解冻当前所有文件。
16. guest-fsfreeze-freeze-list
同步和冻结指定的虚拟机文件,
Arguments:
mountpoints: array of string (optional),要冻结的文件系统挂载点数组。如果省略,每个挂载的文件系统都会被冻结。无效的挂载点被忽略。
17. guest-fsfreeze-thaw
解冻所有冻结的文件
Returns:
解冻的文件个数
18. guest-fstrim
文件系统未使用的硬盘空间
Arguments:
minimum: int (optional)
最小可丢弃的连续自由范围,单位为字节。通过增加这个值,fstrim操作将更快地完成具有严重碎片化的空闲空间的文件系统,尽管并非所有块都将被丢弃。默认值为零,意思是“丢弃所有空闲块”。
19. guest-suspend-disk
挂起虚拟机磁盘,如成功则不返回值
20. guest-suspend-ram
挂起虚拟机ram
21. guest-suspend-hybrid
将虚拟机状态写入磁盘,并挂起ram
22. guest-network-get-interfacesd
获取虚拟机IP地址,MAC地址,子网掩码
23. guest-get-vcpus
检索客户的逻辑处理器列表。这是一个只读操作。
Returns:
虚拟机的VCPUs列表,以GuestLogicalProcessor类形式返回
GuestLogicalProcessor类
logical-id: int,VCPU的唯一标识
online: boolean, VCPU 是否可用
can-offline: boolean (optional), VCPU 是否可以下线
24. guest-set-vcpus
尝试重新配置客户内部的逻辑处理器(当前:启用/禁用)。
Arguments:
vcpus: array of GuestLogicalProcessor
25. guest-get-fsinfo
获取在虚拟机中挂载的文件系统列表
26. guest-set-user-password
Arguments:
username: string,需要更改密码的用户名
password: string,新的密码(base64 encoded)
crypted: boolean,如果以被crypt()加密则为真,否则为false
Returns:
如成功则无返回值
27. guest-get-memory-block
获取虚拟机内存块信息,返回虚拟机所知的所有内存块,以GuestMemoryBlock对象展示
GuestMemoryBlock包含以下成员:
phys-index: int,内存块在虚拟机中的唯一标识
online: boolean,内存块在虚拟机中是否可用
can-offline: boolean (optional),内存块是否可以offline
28. guest-set-memory-blocks
设置虚拟机中的内存块信息
29. guest-exec-status
获取虚拟机中的进程状态,如进程退出,则获取其相关元数据。
Arguments:
pid: int
Returns:
成功则返回GuestExecStatus类对象
GuestExecStatus含有如下成员
exited: boolean,如进程已经终止则为真
exitcode: int (optional),进程退出码
signal: int (optional),异常终止代码
out-data: string (optional),程序stdout(base64-encoded)
err-data: string (optional),程序stderr(base64-encoded)
out-truncated: boolean (optional),如果由于大小限制而未完全捕获stdout,则为真。
err-truncated: boolean (optional),如果由于大小限制而没有完全捕获stderr,则为真。
30. guest-exec
在虚拟机中执行命令
Arguments:
path: string,执行的路径或名称
arg: array of string (optional),执行命令所需参数
env: array of string (optional),执行所需的环境变量
input-data: string (optional),所需数据
capture-output: boolean (optional),获取进程的stdout/stderr
Returns:
如执行成功则返回其PID
31. guest-get-host-name
返回机器名称
32. guest-get-timezone
获取虚拟机时区信息
33.guest-get-osinfo
获取操作系统信息
网友评论