qemu-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:
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.0'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel> |
注意这里target的name要使用org.qemu.guest_agent.0
虚拟机内部:
yum install qemu-guest-agent setenforce systemctl restart qemu-guest-agent.service |
在宿主机上测试功能:
virsh virsh # qemu-agent-command centos '{"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:
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.1'/> <target type='virtio' name='org.qemu.guest_agent.1'/> </channel> |
不使用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的字符, |
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 Guest Agent
QEMU Guest Agent It is a daemon program running inside the domain which is supposed to help manageme ...
- 利用Qemu Guest Agent (Qemu-ga) 实现 Openstack 监控平台
经常使用vmWare的同学都知道有vmware-tools这个工具,这个安装在vm内部的工具,可以实现宿主机与虚拟机的通讯,大大增强了虚拟机的性能与功能, 如vmware现在的Unity mode下可 ...
- Apache日志配置详解(rotatelogs LogFormat)
logs/error_logCustomLog logs/access_log common--默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelogs ...
- virsh详解
来个表情包表达我此时的心情 man virsh virsh [options]... [<command_string>] virsh [options]... <command&g ...
- zabbix agent安装详解
安装 Installing repository configuration package Zabbix 2.2 for RHEL5, Oracle Linux 5, CentOS 5: rpm - ...
- 安装Cloudera manager agent步骤详解
安装Cloudera manager agent步骤详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要是针对:https://www.cnblogs.com/yinz ...
- cloudemanager安装时出现failed to receive heartbeat from agent问题解决方法(图文详解)
不多说,直接上干货! 安装cdh5到最后报如下错误: 安装失败,无法接受agent发出的检测信号. 确保主机名称正确 确保端口7182可在cloudera manager server上访问(检查防火 ...
- cloudemanager安装时出现8475 MainThread agent ERROR Heartbeating to 192.168.30.1:7182 failed问题解决方法(图文详解)
不多说,直接上干货! 问题详情 解决这个问题简单的,是因为有进程占用了.比如 # ps aux | grep super root ? Ss : : /opt/cm-/lib64/cmf/agen ...
- zabbix配置文件详解--服务(server)端、客户(agent)端、代理(proxy)端
在zabbix服务(server)端.客户(agent)端.代理(proxy)端分别对应着一个配置文件,即:zabbix_server.conf,zabbix_agentd.conf,zabbix_p ...
随机推荐
- python 串口 透传
python正常情况通过串口 serial 传输数据的时候,都是以字符串的形式发送的 str = ‘abcd’ ser.write(str.encode())#直接发送str报错,需要发送byte类 ...
- 1000 千米高空俯瞰 React Native
一.历史:React Native 从开始到现在 React Native 的定位是通过 React 构建原生 App: A framework for building native apps wi ...
- day24 面向对象与实例属性
编程进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定义了一个函数),便实现来代码重用,且代码从无结构走向了机构化, ...
- 4.String字符串类型操作
String类型操作 1.set key value 设置key对应的值为string类型的value 2.mset key1 value1 … keyN valueN 一次设置多个key的值 3. ...
- 【图机器学习】cs224w Lecture 13 & 14 - 影响力最大化 & 爆发检测
目录 Influence Maximization Propagation Models Linear Threshold Model Independent Cascade Model Greedy ...
- 从Student类和Teacher类多重派生Graduate类 代码参考
#include <iostream> #include <cstring> using namespace std; class Person { private: char ...
- 这个Maven依赖的问题,你敢说你没遇到过
Maven 依赖没处理好的话经常会导致发生一些问题,非常烦.今天给大家分享一个依赖相关的问题,说不定你之前就遇到过. 问题背景 有个 ES 搜索的项目,刚开始还是好好的状态,过了一段时间,然后就发现启 ...
- Rocket - diplomacy - NodeHandle相关类
https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA 介绍NodeHandle相关的类. 1. NoHandle 顶层类(tra ...
- Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)
561. 数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), -, (an, bn) ,使得从1 到 n 的 min(ai, bi ...
- Java实现 蓝桥杯VIP 算法训练 判断字符位置
判定字符位置 时间限制: 1Sec 内存限制: 128MB 提交: 487 解决: 251 题目描述 返回给定字符串s中元音字母的首次出现位置.英语元音字母只有'a'.'e'.'i'.'o'.'u'五 ...