Kvm虚拟化虚拟化技术linux答疑

qemu-agent-command 命令含义

2018-08-14  本文已影响42人  CC_06fa

通过指令

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

获取操作系统信息

参考官网链接

上一篇下一篇

猜你喜欢

热点阅读