为什么要使用 QEMU monitor命令?

在前面学习ubuntu启动第一个虚拟机时,发现我们在使用启动QEMU之后,我们的终端会卡住。而现在我们在启动QEMU时使用了monitor,终端会进入monitor的控制台,通过这个控制台,我们可以与QEMU或者运行状态的虚拟机进行交互。

现在有很多图形界面的虚拟机管理工具,如virt-manager等。在monitor的控制台窗口输入命令似乎更符合Linux程序员的开发习惯,而且还能完成一些图形化管理工具所不具备的功能。

在monitor控制台中,可以完成很多常规操作,比如添加删除设备虚拟机音视频截取获取虚拟机运行状态更改虚拟机运行时配置等等。

QEMU monitor命令的使用

qemu monitor命令要在进入虚拟机之后使用

root@ubuntu:/home/img# qemu-system-x86_64 -enable-kvm -m 512 -smp 2 -boot order=c -hda ubuntu14.04.img -vnc :1 -monitor stdio
QEMU 2.5.0 monitor - type 'help' for more information
(qemu)

QEMU monitor 控制台的命令非常繁杂,并且由于QEMU是广受关注的开源项目,代码更新也特别迅速。同样,monitor命令也会时常得到更新和升级。概括的说,命令可以分为如下几个部分:

辅助类命令

  • help命令: 可以查询显示某个命令的简要帮助信息;
  • info命令:主要用来显示虚拟机的运行信息。

操作实例:

1、help命令显示moniter命令中的帮助信息

(qemu) help savevm 
savevm [tag|id] -- save a VM snapshot. If no tag or id are provided, a new snapshot is created
(保存一个VM快照。如果不提供标记或id,则创建一个新快照)

(qemu) help help
help|? [cmd] -- show the help (显示帮助)

(qemu) help info #查看info命令的帮助信息
info balloon  -- show balloon information
info block [-n] [-v] [device] -- show info of one block device or all block devices (-n: show named nodes; -v: show details)
(显示一个块设备或所有块设备的信息(-n:显示指定的节点; -v: 显示细节))
info block-jobs  -- show progress of ongoing block device operations
(显示正在进行的块设备操作的进度)
info blockstats  -- show block device statistics
(显示块设备统计信息)
info capture  -- show capture information
(显示捕捉信息)
info chardev  -- show the character devices
(显示字符设备)
 			- - - 省略- - -

2、info命令

显示一些例如cpu,block,vnc等等信息和状态。

(qemu) help info #查看info命令的帮助信息

info balloon  -- show balloon information

info block [-n] [-v] [device] -- show info of one block device or all block devices (-n: show named nodes; -v: show details)
(显示一个块设备或所有块设备的信息(-n:显示指定的节点; -v: 显示细节))

info block-jobs  -- show progress of ongoing block device operations
(显示正在进行的块设备操作的进度)

info blockstats  -- show block device statistics
(显示块设备统计信息)

info capture  -- show capture information
(显示捕捉信息)

info chardev  -- show the character devices
(显示字符设备)

info cpus  -- show infos for each CPU
(显示每个CPU的信息)

info cpustats  -- show CPU statistics
(显示CPU统计数据)

info history  -- show the command line history
(显示命令行历史记录)

info ioapic  -- show io apic state
(显示io apic状态)

info iothreads  -- show iothreads

info irq  -- show the interrupts statistics (if available)
(显示中断统计信息(如果可用)

info jit  -- show dynamic compiler info
(show dynamic compiler info)

info kvm  -- show KVM information
(显示KVM信息)

info lapic  -- show local apic state
(显示本地apic状态)

info mem  -- show the active virtual memory mappings
(显示活动虚拟内存映射)

info memdev  -- show memory backends
(显示内存后端)

info memory-devices  -- show memory devices
(显示内存设备)

info mice  -- show which guest mouse is receiving events
(显示哪个鼠标正在接收事件)

info migrate  -- show migration status
(显示迁移状态)

info migrate_cache_size  -- show current migration xbzrle cache size
(显示当前迁移xbzrle缓存大小)

info migrate_capabilities  -- show current migration capabilities
(显示当前的迁移功能)

info migrate_parameters  -- show current migration parameters
(显示当前迁移参数)

info mtree  -- show memory tree
(显示内存树)

info name  -- show the current VM name
(显示当前的VM名)

info network  -- show the network state
(显示网络状态)

info numa  -- show NUMA information
(显示NUMA信息)

info opcount  -- show dynamic compiler opcode counters
(显示动态编译器操作码计数器)

info pci  -- show PCI info
(显示PCI信息)

info pic  -- show i8259 (PIC) state
(显示i8259 (PIC)状态)

info profile  -- show profiling information
(显示配置信息)

info qdm  -- show qdev device model list
(显示qdev设备模型列表)

info qom-tree [path] -- show QOM composition tree
(显示QOM 合成树)

info qtree  -- show device tree
(显示设备树)

info registers  -- show the cpu registers
(显示cpu寄存器)

info rocker name -- Show rocker switch(开关)

info rocker-of-dpa-flows name [tbl_id] -- Show rocker OF-DPA flow tables(流程表)

info rocker-of-dpa-groups name [type] -- Show rocker OF-DPA groups(组)

info rocker-ports name -- Show rocker ports
(显示rocker端口)

info roms  -- show roms
(显示所有rom)

info snapshots  -- show the currently saved VM snapshots
(显示当前保存的VM快照)

info spice  -- show the spice server status
(显示spice服务器状态)

info status  -- show the current VM status (running|paused)
(显示当前VM状态(运行|暂停))

info tlb  -- show virtual to physical memory mappings
(显示虚拟到物理内存的映射)

info tpm  -- show the TPM device
(显示TPM设备)

info trace-events  -- show available trace-events & their state
(显示可用的跟踪事件及其状态)

info usb  -- show guest USB devices
(显示客户USB设备)

info usbhost  -- show host USB devices
(显示主机USB设备)

info usernet  -- show user network stack connection states
(显示用户网络堆栈连接状态)

info uuid  -- show the current VM UUID
(显示当前VM UUID)

info version  -- show the version of QEMU
(显示QEMU的版本)

info vnc  -- show the vnc server status
(显示vnc服务器状态)

info命令的使用

(qemu) info block
ide0-hd0 (#block121): ubuntu14.04.img (qcow2)
    Cache mode:       writeback

ide1-cd0: [not inserted]
    Removable device: not locked, tray closed

floppy0: [not inserted]
    Removable device: not locked, tray open

sd0: [not inserted]
    Removable device: not locked, tray closed

(qemu) info cpus 
* CPU #0: pc=0xffffffff8105d2b6 (halted) thread_id=4660
  CPU #1: pc=0xffffffff8105d2b6 (halted) thread_id=4661

(qemu) info roms
fw=genroms/kvmvapic.bin size=0x002400 name="kvmvapic.bin"
addr=00000000fffc0000 size=0x040000 mem=rom name="bios-256k.bin"
/rom@etc/acpi/tables size=0x200000 name="etc/acpi/tables"
/rom@etc/table-loader size=0x001000 name="etc/table-loader"
/rom@etc/acpi/rsdp size=0x000024 name="etc/acpi/rsdp"

(qemu) info kvm #显示KVM信息
kvm support: enabled(已开启)

# 启动虚拟机时未添加-enable-kvm参数:
(qemu) info kvm 
kvm support: disabled(未开启)

(qemu) info version (显示QEMU的版本号)
2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.43)

(qemu) info status 
VM status: running(运行中)

(qemu) info snapshots #(显示所有快照)
There is no snapshot available.(没有可用的快照。)

# 未开启vnc客户端
(qemu) info vnc #(显示vnc服务器状态)
Server:
     address: 0.0.0.0:5901
        auth: none
Client: none

# 开启vnc客户端
(qemu) info vnc
Server:
     address: 0.0.0.0:5901
        auth: none
Client:
     address: 192.168.70.1:14365
  x509_dname: none
    username: none

快照命令

QEMU运行的时候,如果指定-snapshot参数,则会允许虚拟机在运行的时候创建快照。

  • savevm命令 : (保存一个VM快照。如果不提供标记或id,则创建一个新快照)
  • loadvm命令 : (从标记或id恢复VM快照)
  • delvm命令: (从标记或id中删除VM快照)
(qemu) help savevm 
savevm [tag|id] -- save a VM snapshot. If no tag or id are provided, a new snapshot is created
(保存一个VM快照。如果不提供标记或id,则创建一个新快照)

(qemu) help loadvm
loadvm tag|id -- restore a VM snapshot from its tag or id
(从标记或id恢复VM快照)

(qemu) help delvm 
delvm tag|id -- delete a VM snapshot from its tag or id
(从标记或id中删除VM快照)

关于snapshot命令的实验

实验步骤

QEMU串口控制台 qemu monitor命令_monitor

1.首先用info snapshots查看当前已经存在的快照信息

(qemu) info snapshots 
There is no snapshot available.(没有可用快照)

2.(ubuntu14.04 server虚拟机内操作)在“/home/xyc”目录下,使用“touch file1”命令创建一个名称为“file1”的文件。

QEMU串口控制台 qemu monitor命令_kvm_02


3.然后用savevm命令创建一个名称为“test1”的快照。

(qemu) savevm  test1
(qemu) info snapshots 
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         test1                  194M 2020-05-22 00:11:02   00:23:57.296

4.(ubuntu14.04 server虚拟机内操作)在“/home/xyc”目录下,使用“touch file2”命令创建一个名称为“file2”的文件。

QEMU串口控制台 qemu monitor命令_ubuntu_03


5.然后用savevm命令创建一个名称为“test2”的快照。

(qemu) savevm  test2
(qemu) info snapshots 
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         test1                  194M 2020-05-22 00:11:02   00:23:57.296
2         test2                  194M 2020-05-22 00:11:50   00:24:42.847

6.(ubuntu14.04 server虚拟机内操作)在“/home/xyc”目录下,使用“touch file3”命令创建一个名称为“file3”的文件。

QEMU串口控制台 qemu monitor命令_linux_04


此时“/home/xyc”目录下有“file1 file2 file3”三个文件

7.使用命令“loadvm test2”还原到快照test2,进入虚拟机进行查看。

(qemu) loadvm test2

QEMU串口控制台 qemu monitor命令_kvm_05


此时“/home/xyc”目录下有“file1 file2”两个文件

8.使用命令“loadvm test1”还原到快照test1,进入虚拟机进行查看。

(qemu) loadvm test1

QEMU串口控制台 qemu monitor命令_ubuntu_06


此时“/home/xyc”目录下有“file1”一个文件

9.删除快照,然后查看

(qemu) delvm test1
(qemu) delvm test2
(qemu) info snapshots 
There is no snapshot available.

设备类命令

change命令 :能在虚拟机运行的时候动态更改虚拟机的配置。

(qemu) help change 
change device filename [format [read-only-mode]] -- change a removable medium, optional format
(更改可移动媒体,可选格式)

例:

change命令更改系统配置

1.将启动QEMU时指定的vnc :1端口更改为:2

(qemu) change vnc :2 
(修改完毕后可以ctrl+c关闭vncviewer窗口,再次打开时需要指定修改后的2端口)

2.将 ubuntu-14.04.4-server-amd64.iso作为虚拟CD插入到ide1-cd0中,最后将其弹出。可以通过info block来查看每步块设备的变化情况。

(qemu) info block
ide0-hd0 (#block165): ubuntu14.04.img (qcow2)
    Cache mode:       writeback

ide1-cd0: [not inserted]
    Removable device: not locked, tray closed

floppy0: [not inserted]
    Removable device: not locked, tray open

sd0: [not inserted]
    Removable device: not locked, tray closed

# 将 ubuntu-14.04.4-server-amd64.iso作为虚拟CD插入到ide1-cd0中
(qemu) change ide1-cd0 /home/img/ubuntu-14.04.4-server-amd64.iso

(qemu) info block
ide0-hd0 (#block165): ubuntu14.04.img (qcow2)
    Cache mode:       writeback

ide1-cd0: /home/img/ubuntu-14.04.4-server-amd64.iso
(raw, read-only)
    Attached to:      /machine/unattached/device[25]
    Removable device: locked, tray closed
    Cache mode:       writeback


floppy0: [not inserted]
    Removable device: not locked, tray open

sd0: [not inserted]
    Removable device: not locked, tray closed

# 弹出
(qemu) eject ide1-cd0

(通过观察ide1-cd0可以发现,插入光盘后,能够看到光盘的iso文件)

其它命令:

  • commit:由于块设备允许使用缓存,所以会有在虚拟机运行的时候可能会有某些写操作未实际写到设备上。commit命令将对块设备执行强制刷新操作。对于仍然在缓存中的数据,将会立即写入到块设备上。
  • system_reset/system_powerdown:对于虚拟机的开关控制,system_reset/system_powerdown 则相当于在电脑上的reset和powerdown按钮,将强制虚拟机进行重启和关机操作。
  • stop/cont:使得虚拟机进入/退出挂起状态。
  • quit:直接退出qemu