qeum guest agent详解

qemu guest agent简称qga, 是运行在虚拟机内部的一个守护程序(qemu-guest-agent.service),他可以管理应用程序,执行宿主机发出的命令。

QEMU为宿主机和虚拟机提供了一个数据通道(channel),这个通道的两端分别是在虚拟机内看到的串口和在宿主机上看到的unix socket文件。

宿主机与虚拟机内的qga通讯就扩展了对虚拟机的控制能力,例如在宿主机上获取虚拟机的ip地址等。

libvrit提供了专门的virDomainQemuAgentCommand API(对应virsh qemu-agent-command命令)来和qemu-guest-agent通讯,

另外有些libvirt内置api也可以支持qga,例如reboot、shutdown等。

下面的实践分为两种方式,虚拟机的channel的target的name使用org.qemu.guest_agent.0和不是用org.qemu.guest_agent.0。

两种方式在libvirt和宿主机中的qemu-guest-agent中都有所不同。

【使用org.qemu.guest_agent.0】

宿主机上libvirt的虚拟机xml配置channel:

<channeltype=‘unix’>

<sourcemode=‘bind’ path=’/var/lib/libvirt/qemu/org.qemu.guest_agent.0’/>

<targettype=‘virtio’ name=‘org.qemu.guest_agent.0’/>

注意这里target的name要使用org.qemu.guest_agent.0

虚拟机内部:

yum install qemu-guest-agent

setenforce0

systemctl restart qemu-guest-agent.service

在宿主机上测试功能:

virsh
virsh #qemu-agent-commandcentos ‘{“execute”:“guest-info”}’

virsh #qemu-agent-commandcentos ‘{“execute”:“guest-network-get-interfaces”}’

virsh # reboot --mode agent centos

上面的命令直接读出了虚拟机中的ip地址信息。

【不使用org.qemu.guest_agent.0】

如果在宿主机上libvirt的xml配置channel中target的name不是org.qemu.guest_agent.0,例如下面的org.qemu.guest_agent.1。

那么在宿主机上的libvirt将不会建立与socket建立连接。在虚拟机上qemu-guest-agent服务也无法运行。

宿主机上的libvirt的xml:

<channeltype=‘unix’>

<sourcemode=‘bind’ path=’/var/lib/libvirt/qemu/org.qemu.guest_agent.1’/>

<targettype=‘virtio’ name=‘org.qemu.guest_agent.1’/>

不使用org.qemu.guest_agent.0的情况下怎么处理呢?

首先,在虚拟机内部通讯串口的名字变为了org.qemu.guest_agent.1,此时需要手动修改/lib/systemd/system/qemu-guest-agent.service文件,把所有的默认org.qemu.guest_agent.0改为用户配置的名字org.qemu.guest_agent.1。

其次,在宿主机上自己去连接socket文件:

[root@node2 ~]#socat unix-connect:/var/lib/libvirt/qemu/org.qemu.guest_agent.1 readline

{“execute”: “guest-info”}

【功能简单介绍】

注:带*指的是win也支持

guest-sync-delimited*

宿主机发送一个int数字给qga,qga返回这个数字,并且在后续返回字符串响应中加入ascii码为0xff的字符,
其作用是检查宿主机与qga通信的同步状态,主要用在宿主机上多客户端与qga通信的情况下客户端间切换过程的状态同步检查,
比如有两个客户端A、B,qga发送给A的响应,由于A已经退出,目前B连接到qga的socket,所以这个响应可能被B收到,如果B连接到socket之后,立即发送该请求给qga,响应中加入了这个同步码就能区分是A的响应还是B的响应;
在qga返回宿主机客户端发送的int数字之前,qga返回的所有响应都要忽略。

guest-sync*

与上面相同,只是不在响应中加入0xff字符

guest-ping*

Ping the guest agent, a non-error return implies success

guest-get-time*

获取虚拟机时间(返回值为相对于1970-01-01 in UTC,Time in nanoseconds.)

guest-set-time*

设置虚拟机时间(输入为相对于1970-01-01 in UTC,Time in nanoseconds.)

guest-info*

返回qga支持的所有命令

guest-shutdown*

关闭虚拟机(支持halt、powerdown、reboot,默认动作为powerdown)

guest-file-open

打开虚拟机内的某个文件(返回文件句柄)

guest-file-close

关闭打开的虚拟机内的文件

guest-file-read

根据文件句柄读取虚拟机内的文件内容(返回base64格式的文件内容)

guest-file-write

根据文件句柄写入文件内容到虚拟机内的文件

……

qemu guest agent 是一种用于在宿主机和虚拟机之间进行通信和交互的工具。它提供了各种功能,例如文件拷贝、虚拟机状态查询、运行命令等。当我们需要与运行在qemu虚拟机中的操作系统进行交互时,可以通过在宿主机和虚拟机之间建立通信管道来使用qemu guest agent。 要下载qemu guest agent,可以按照以下步骤进行: 1. 首先,我们需要在宿主机上安装qemu软件包。可以使用系统包管理工具(如apt、yum等)来安装,也可以从qemu官方网站上下载安装包进行安装。 2. 安装完成后,我们需要进入qemu软件包的目录,找到并下载qemu guest agent的安装包。在官方网站的下载页面上可以找到适用于不同操作系统的安装包,选择适合你的操作系统版本进行下载。 3. 下载完成后,解压安装包并进入解压后的目录。 4. 根据操作系统的不同,执行不同的安装命令。通常情况下,可以运行类似于"./configure"、"make"、"make install"等命令来进行安装。 5. 安装完成后,我们可以在虚拟机的配置文件中添加一些参数启用qemu guest agent。这些参数可以用来指定通信管道的类型、路径等。保存并关闭配置文件后,重启虚拟机即可使配置生效。 通过以上步骤,我们就可以成功下载和安装qemu guest agent。安装完成后,我们可以使用相关命令或API来与虚拟机进行交互,并获得更好的虚拟化体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值