qemu向外界暴露的唯一接口就是 qemu monitor, 通过monitor可以 查询虚拟机信息, 控制虚拟机。传输数据方式是网络套结字。 qemu monitor 支持几种协议类型: qmp 和 hmp ; 通过monitor能够完成查询虚拟机的内部状态,进行设备的热插拔,虚拟机的迁移/备份/快照等功能。
qmp (Qemu Monitor Protocol)是一种基于JSON格式的传输协议,定义了与虚拟机的交互规范,底层支撑了QM的实现;
hmp(human monitor) 是一个方便用户阅读的协议,不必关心他的底层JSON;
一般手工维护大部分都是用 hmp 方式,而做自动化工具维护或者二次定制就需要基于QMP进行封装。

直接使用 qemu 启动时可以通过 tcp 和 unix socket 来指定 qemu monitor 的接口,而通过 virt-manager/libvirtd 启动的虚拟机只能通过 virsh 来进行虚拟机交互。

hmp接口使用

使用-monitor 通过 qmp 方式进行交互:

tcp socket 方式

./qemu-system-x86_64 -m 2048 -hda /home/linux/virt/xxxx.qcow2 -enable-kvm -monitor tcp:localhost:1234,server,nowait

使用telnet连接localhost:1234之后就可以使用qmp的命令和虚拟机交互了

[linux@localhost qemu]$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
QEMU 2.12.0 monitor - type 'help' for more information
(qemu) help
help
__com.redhat_drive_add id=name,[file=file][,format=f][,media=d]... -- Create a drive similar to -drive if=none.
__com.redhat_qxl_screendump id filename -- save screen from qxl device 'id' into PPM image 'filename'

unix socket 方式

./qemu-system-x86_64 -m 2048 -hda /root/centos6.img -enable-kvm -monitor unix:/tmp/qmp-test,server,nowait

使用nc连接该socket,之后就一样了。

[root@localhost qmp]# nc -U /tmp/qmp-test
QEMU 2.12.0 monitor - type 'help' for more information
(qemu) info
info balloon  -- show balloon information

hmp 的详细命令格式可以在qemu的代码树主目录下面的hmp-commands.hx hmp-commands-info.hx中找到。

qmp接口使用

使用 -qmp 指定通过 json 方式进行交互:

./qemu-system-x86_64 -m 2048 -hda /home/linux/virt/xxxx.qcow2 -enable-kvm -qmp tcp:localhost:1234,server,nowait

使用telnet连接localhost:1234之后就可以使用qmp的命令和虚拟机交互了。但是QMP基于json格式,所以在命令行里手动输入json就不是很方便。

[linux@localhost qemu]$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
{"QMP": {"version": {"qemu": {"micro": 0, "minor": 12, "major": 2}, "package": "v2.12.0-41-ga481765"}, "capabilities": []}}

其他方式和 hmp 中接口类似,不再赘述。

qemu 源码中提供了对QMP的封装示例scripts/qmp/ 提供了一些 demo

[linux@localhost qemu]$ ls ./scripts/qmp/
__init__.py  qemu-ga-client  qmp  qmp.py  qmp.pyc  qmp-shell  qom-fuse  qom-get  qom-list  qom-set  qom-tree

通过libvirt启动时使用qemu monitor

不能再通过端口直接连接qemu,而是需要通过 virsh -> libvirtd -> qemu 中转数据,可以通过如下方式使用qemu monitor

virsh qemu-monitor-command debian10 --hmp "x/128i 0x98000000012fbf09"

常用用法

查询cpu类型和machine类型

qemu-system-mips64el -cpu ?
qemu-system-mips64el -machine ?

cpu热插拔

通过qemu启动,并且开放qemu monitor端口: -monitor tcp:localhost:1234,server,nowait

# telnet 127.0.0.1 1234
(qemu) info hotpluggable-cpus
Hotpluggable CPUs:type: "Loongson-3A4000-COMP-mips64-cpu"vcpus_count: "1"CPUInstance Properties:node-id: "0"core-id: "3"type: "Loongson-3A4000-COMP-mips64-cpu"vcpus_count: "1"CPUInstance Properties:node-id: "0"core-id: "2"type: "Loongson-3A4000-COMP-mips64-cpu"vcpus_count: "1"qom_path: "/machine/unattached/device[1]"CPUInstance Properties:node-id: "0"core-id: "1"type: "Loongson-3A4000-COMP-mips64-cpu"vcpus_count: "1"qom_path: "/machine/unattached/device[0]"CPUInstance Properties:node-id: "0"core-id: "0"
(qemu) device_add driver=Loongson-3A4000-COMP-mips64-cpu,node-id=0,core-id=3,id=cpu2

官方链接: https://wiki.qemu.org/Features/CPUHotplug#cpu-add_interface

链接

gentoo官网: https://wiki.gentoo.org/wiki/QEMU/OptionsBoot_order
qemu官网: https://www.qemu.org/docs/master/system/invocation.html
suse virsh官网: https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/cha-qemu-monitor.html

qemu monitor相关推荐

  1. qemu monitor和qemu agent的实现

    虚拟机配置中: <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> < ...

  2. QEMU monitor控制台使用详解

    为什么要使用 QEMU monitor命令? 在前面学习ubuntu启动第一个虚拟机时,发现我们在使用启动QEMU之后,我们的终端会卡住.而现在我们在启动QEMU时使用了monitor,终端会进入mo ...

  3. QEMU支持的网络模式

    网络是现代计算机系统不可或缺的一部分,QEMU也对虚拟机提供丰富的网络支持.qemu-kvm中主要给客户机提供了如下4种不同模式的网络. (1)基于网桥(Bridge)的虚拟网卡 (2)基于NAT(N ...

  4. KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)...

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  5. 【KVM系列08】使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机

    第八章 使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 1. QEMU/KVM 迁移的概念 1.1 迁移效率的衡量 1.2 KVM 迁移的原理 1.3 使用命令行的方式做动态迁移 ...

  6. 【KVM系列07】使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照

    第七章 使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 1. QEMU/KVM 快照 1.1 概念 1.2 使用 virsh 实验 1.3 外部快照的删除 2. OpenSt ...

  7. 欢迎使用 QEMU 的文档!| 目录

    Welcome to QEMU's documentation! - QEMU documentationhttps://qemu-project.gitlab.io/qemu/ About QEMU ...

  8. linux下三台虚拟机互联,Linux下虚拟机qemu的使用

    Linux下虚拟机qemu的使用,设置qemu, 安装WinXP从桌面菜单启动qemu-launcher后, 1. 取消Snapshot Mode, 因为这个选项表示只有你按 虚拟机qemu的使用 R ...

  9. qemu里pci设备的热插拔

    qemu里pci设备的热插拔 -v0.1 2019.2.17 Sherlock Init -v0.2 2019.2.21 Sherlock Add all related command 本文讨论li ...

最新文章

  1. Linux中的文件系统和磁盘管理
  2. 如何更改gridview中任意单元格颜色或者内容。
  3. IOS TableView实现省市联动
  4. Android零基础入门第33节:Android事件处理概述
  5. ant使用指南详细入门教程
  6. poj 2823 单调队列
  7. magento 瘦身数据库
  8. Angular 发布首个正式的路线图
  9. 复制两个类的相同属性
  10. Locating Elements(一)
  11. 歌词 —— 那些花儿
  12. 27. 使用distance和advance将容器的const_iterator转换成iterator
  13. 1.空间中直线交点坐标问题,2.已知球面三点求球心问题以及Matlab实现
  14. 制作 Eset Nod32 离线升级包
  15. 汇编语言属于计算机科学,汇编语言是一种依赖于计算机的低级程序设计语言吗...
  16. 微型计算机与原理与接口技术第四版,微机原理与接口技术(第4版)
  17. QCC302X/QCC303X蓝牙对讲与蓝牙扩音器
  18. Linux 平台上的软件包管理
  19. Anaconda安装中failed to create menus
  20. 行业新生态,从区块链系统开发开始

热门文章

  1. 用JAVA计算平方根
  2. 百度网盘再次回收免费空间!21日前赶紧登录下!网友评:想钱想疯了?
  3. Python学习日记(十六) time模块和random模块
  4. 入门图形学:UI抗锯齿
  5. mac home brew 安装不同版本的gradle
  6. Mac根目录下创建文件夹
  7. HDMI PL驱动开发记录
  8. mysql 用set插入数据_在MySQL中使用SET子句插入多个数据?
  9. 你一个网管连华为路由器配置都搞不定?
  10. 有关并发和并行的问题解析