documentation.suse.com / SUSE Linux Enterprise Server 文档 / 虚拟化指南 / 使用 libvirt 管理虚拟机 / 基本 VM Guest 管理
适用范围 SUSE Linux Enterprise Server 15 SP7

11 基本 VM Guest 管理

使用虚拟机管理器图形应用程序或者在命令行上使用 virsh 可以完成大部分管理任务,例如启动或停止 VM Guest。而要通过 VNC 连接到图形控制台,就只能从图形用户界面进行。

注意
注意:管理远程 VM 主机服务器上的 VM Guest

如果 VM 主机服务器上启动了虚拟机管理器、virshvirt-viewer 这些 libvirt 工具,则可以使用它们来管理主机上的 VM Guest。不过,您也可以管理远程 VM 主机服务器上的 VM Guest。这需要在主机上为 libvirt 配置远程访问权限。有关说明,请参见第 12 章 “连接和授权

要使用虚拟机管理器连接到此类远程主机,需要按照第 12.2.2 节 “使用虚拟机管理器管理连接”中所述设置连接。如果您通过 virshvirt-viewer 连接到远程主机,需要使用参数 -c 指定连接 URI(例如,virsh -c qemu+tls://saturn.example.com/systemvirsh -c xen+ssh://)。连接 URI 的格式取决于连接类型和超级管理程序 — 有关细节,请参见第 12.2 节 “连接到 VM 主机服务器”

本章列出的所有示例都不包含连接 URI。

11.1 列出 VM Guest

VM Guest 列表显示 VM 主机服务器上由 libvirt 管理的所有 VM Guest。

11.1.1 使用虚拟机管理器列出 VM Guest

虚拟机管理器的主窗口会列出它所连接的每台 VM 主机服务器的所有 VM Guest。每个 VM Guest 项都包含计算机的名称及其状态(正在运行已暂停已关闭),这些信息以图标、文本和 CPU 使用率条的形式显示。

11.1.2 使用 virsh 列出 VM Guest

使用 virsh list 命令可获取 VM Guest 的列表:

列出所有正在运行的 Guest
> virsh list
列出所有正在运行的 Guest 以及非活动的 Guest
> virsh list --all

有关详细信息和其他选项,请参见 virsh help listman 1 virsh

11.2 通过控制台访问 VM Guest

可以通过 VNC 连接(图形控制台)或串行控制台(如果受 Guest 操作系统的支持)访问 VM Guest。

11.2.1 打开图形控制台

打开与 VM Guest 连接的图形控制台可与该计算机交互,就如同通过 VNC 连接与物理主机交互一样。如果访问 VNC 服务器需要身份验证,系统会提示您输入用户名(如果适用)和口令。

当您单击进入 VNC 控制台时,光标将被捕获,不能再在控制台外部使用。要释放光标,请按 AltCtrl

提示
提示:无缝(绝对)光标移动

为防止控制台夺取光标,同时为了启用无缝光标移动,请向 VM Guest 添加绘图板输入设备。有关更多信息,请参见第 14.5 节 “输入设备”

某些组合键(例如 CtrlAltDel)由主机解释,不会传递给 VM Guest。要将此类组合键传递给 VM Guest,请在 VNC 窗口中打开发送键菜单,然后选择所需的组合键项。仅当使用虚拟机管理器和 virt-viewer 时,才能使用发送键菜单。借助虚拟机管理器,可以按照提示:将组合键传递给虚拟机中所述改用粘滞键功能。

注意
注意:支持的 VNC 查看器

理论上而言,所有 VNC 查看器都可连接到 VM Guest 的控制台。但如果您是使用 SASL 身份验证和/或 TLS/SSL 连接来访问 Guest 的,那么您的选择就比较有限。tightvnctigervnc 等常见 VNC 查看器既不支持 SASL 身份验证,也不支持 TLS/SSL。唯一可替代虚拟机管理器和 virt-viewer 的工具是 Remmina(请参见第 14.2 节 “Remmina:远程桌面客户端”)。

11.2.1.1 使用虚拟机管理器打开图形控制台

  1. 在虚拟机管理器中,右键单击某个 VM Guest 项。

  2. 从弹出菜单中选择打开

11.2.1.2 使用 virt-viewer 打开图形控制台

virt-viewer 是一个简单的 VNC 查看器,其中添加了用于显示 VM Guest 控制台的功能。例如,可以 wait 模式启动该查看器,在此情况下,它会先等待 VM Guest 启动,然后再建立连接。它还支持自动重新连接到重引导的 VM Guest。

virt-viewer 按名称、ID 或 UUID 对 VM Guest 进行寻址。使用 virsh list --all 可获取这些数据。

要连接到正在运行或已暂停的 Guest,请使用 ID、UUID 或名称。已关闭的 VM Guest 没有 ID — 您只能按 UUID 或名称与其建立连接。

连接到 ID 为 8 的 Guest
> virt-viewer 8
连接到名为 sles12 的非活动 Guest;Guest 启动后,连接窗口就会打开
> virt-viewer --wait sles12

如果使用 --wait 选项,即使 VM Guest 此刻未运行,也会保持连接。当 Guest 启动时,查看器即会启动。

有关更多信息,请参见 virt-viewer --helpman 1 virt-viewer

注意
注意:通过 SSH 建立远程连接时输入的口令

使用 virt-viewer 通过 SSH 来与远程主机建立连接时,需要输入 SSH 口令两次。第一次用于向 libvirt 进行身份验证,第二次用于向 VNC 服务器进行身份验证。第二个口令需要在启动 virt-viewer 的命令行上提供。

11.2.2 打开串行控制台

要访问虚拟机的图形控制台,需要在访问 VM Guest 的客户端上提供一个图形环境。或者,也可通过串行控制台和 virsh 在外壳中访问使用 libvirt 管理的虚拟机。要打开与名为 sles12 的 VM Guest 连接的串行控制台,请运行以下命令:

> virsh console sles12

virsh console 接受两个可选标志:--safe 确保以独占方式访问控制台,--force 在连接之前断开与所有现有会话的连接。这两个功能需受 Guest 操作系统的支持。

Guest 操作系统必须支持串行控制台访问,并且该操作系统也受到适当的支持,才能通过串行控制台连接到 VM Guest。有关详细信息,请参见 Guest 操作系统手册。

提示
提示:为 SUSE Linux Enterprise Guest 和 openSUSE Guest 启用串行控制台访问

SUSE Linux Enterprise 和 openSUSE 中默认会禁用串行控制台访问。要启用它,请执行下列步骤:

SLES 12、15 和 openSUSE

启动 YaST 引导加载程序模块并切换到内核参数选项卡。将 console=ttyS0 添加到可选内核命令行参数字段。

SLES 11

启动 YaST 引导加载程序模块,并选择要为其激活串行控制台访问的引导项。选择编辑,将 console=ttyS0 添加到可选内核命令行参数字段。此外,请编辑 /etc/inittab 并取消注释包含以下内容的行:

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

11.3 更改 VM Guest 的状态:启动、停止、暂停

可以使用虚拟机管理器或 virsh 来启动、停止或暂停 VM Guest。您还可以将 VM Guest 配置为在引导 VM 主机服务器时自动启动。

关闭 VM Guest 时,可将其正常关机或强制关机。后一种操作的效果等同于拔下物理主机上的电源插头,建议仅在没有其他办法时才这样做。强制关机可能导致 VM Guest 上的文件系统损坏或数据丢失。

提示
提示:正常关机

要能够执行正常关机,必须将 VM Guest 配置为支持 ACPI。如果 Guest 是使用虚拟机管理器创建的,则可在 VM Guest 中使用 ACPI。

根据 Guest 操作系统,能够使用 ACPI 可能还不足以执行正常关机。在生产环境中使用 Guest 之前,强烈建议先对其进行关机和重引导测试。例如,openSUSE 或 SUSE Linux Enterprise Desktop 可能需要获得 Polkit 授权才能关机和重引导。确保已在所有 VM Guest 上关闭此策略。

如果在安装 Windows XP/Windows Server 2003 Guest 期间启用了 ACPI,只在 VM Guest 配置中开启 ACPI 并不足够。有关更多信息,请参见:

无论 VM Guest 的配置如何,始终都可以从 Guest 操作系统内部实现正常关机。

11.3.1 使用虚拟机管理器更改 VM Guest 的状态

可以通过虚拟机管理器的主窗口或 VNC 窗口更改 VM Guest 的状态。

过程 11.1︰ 通过虚拟机管理器窗口更改状态
  1. 右键单击某个 VM Guest 项。

  2. 在弹出菜单中选择运行暂停或其中一个关机选项

过程 11.2︰ 通过 VNC 窗口更改状态
  1. 按照第 11.2.1.1 节 “使用虚拟机管理器打开图形控制台”中所述打开 VNC 窗口。

  2. 在工具栏或虚拟机菜单中,选择运行暂停或其中一个关机选项。

11.3.1.1 自动启动 VM Guest

您可以在引导 VM 主机服务器时自动启动 Guest。此功能默认未启用,需要为每个 VM Guest 单独启用。无法全局激活此功能。

  1. 在虚拟机管理器中双击 VM Guest 项以打开其控制台。

  2. 选择视图 › 细节打开 VM Guest 配置窗口。

  3. 选择引导选项,然后选中在主机引导时启动虚拟机

  4. 单击应用保存新配置。

11.3.2 使用 virsh 更改 VM Guest 的状态

以下示例会更改名为 sles12 的 VM Guest 的状态。

开始
> virsh start sles12
暂停
> virsh suspend sles12
恢复(已暂停的 VM Guest)
> virsh resume sles12
重引导
> virsh reboot sles12
正常关机
> virsh shutdown sles12
强制关机
> virsh destroy sles12
开启自动启动
> virsh autostart sles12
关闭自动启动
> virsh autostart --disable sles12

11.4 保存和恢复 VM Guest 的状态

保存 VM Guest 会保留其内存的确切状态。该操作类似于将计算机休眠。保存的 VM Guest 可以快速恢复到保存前的相同运行状况。

保存时,VM Guest 会暂停,其当前内存状态将保存到文件,然后该 Guest 停止。该操作不会复制 VM Guest 虚拟磁盘的任何一部分。保存虚拟机所需的时间取决于分配的内存量。成功保存后,VM Guest 的资源将释放回虚拟机主机服务器。

恢复操作将加载先前保存的 VM Guest 内存状态文件并启动该 Guest。该 Guest 不会引导,而是在以前保存它的位置继续运行。该操作类似于退出休眠状态。

libvirt 支持多种保存文件格式。默认格式称为 raw,由 VM Guest 内存页面的顺序流组成。raw 格式的顺序布局不太适合多读取器和写入器场景。

raw 保存文件格式外,libvirt 还支持多种压缩格式:zstdlzopgzipbzip2xz。与 raw 格式类似,压缩格式由 VM Guest 内存页的顺序流构成,但在写入保存文件或从中读取时,会通过指定的压缩算法进行压缩处理。这些格式可节省保存文件的存储空间,但会增加保存/恢复时间及主机 CPU 占用。

sparse 保存文件格式采用预计算的固定偏移量来读写 VM Guest 内存页。生成的保存文件逻辑大小约等于 VM Guest 的内存容量,实际磁盘占用空间则取决于 VM Guest 的实时内存使用情况。sparse 格式为 VM Guest 内存页预置固定偏移量,可完美支持多读写器并发操作,这对于大内存容量的 VM Guest 而言,能显著提升其保存与恢复操作的执行效率。

默认的保存文件格式可通过修改 /etc/libvirt/qemu.conf 中的 save_image_format 进行更改。此外,在使用 virsh 执行保存操作时也可指定格式。有关使用 virsh 进行保存和恢复的详细信息,请参见第 11.4.2 节 “使用 virsh 保存和恢复”

由于 VM Guest 的运行状态将保存至文件,请确保存储设备具备足够的可用空间。如果采用 sparse 保存文件格式,保存文件的逻辑大小约等于 VM Guest 分配的内存容量。但实际磁盘占用空间通常更小,具体取决于 VM Guest 的内存使用情况。VM Guest 中未使用的内存空间不会写入保存文件,因此我们称它为 sparse

对于 raw 保存文件格式,其逻辑文件大小与磁盘实际占用空间相同,两者均取决于 VM Guest 的内存使用情况。无论采用 raw 还是 sparse 格式,均可通过在 VM Guest 上执行以下命令估算保存文件的磁盘占用空间(以 MB 为单位):

> free -mh | awk '/^Mem:/ {print $3}'

采用压缩格式可减小磁盘占用空间,具体取决于指定的压缩算法的效率。

警告
警告:始终恢复保存的 Guest

成功执行保存操作后,如果通过恢复操作以外的方式启动 VM Guest,将导致已保存的状态文件失效。保存文件可能包含未完全写入磁盘的文件系统数据。如果在 VM Guest 通过其他方式执行后再尝试恢复保存的状态,可能会导致文件系统损坏。

请务必使用相同的应用程序进行 VM Guest 的保存与恢复操作。例如,如果使用 virsh 保存 VM Guest,则不要使用虚拟机管理器执行恢复。在这种情况下,请务必使用 virsh 进行恢复。

重要
重要:恢复 VM Guest 后同步其时间

如果您在保存 VM Guest 后,经过长时间(数小时)的暂停再恢复该 Guest,其时间同步服务(例如 chronyd)可能会拒绝同步其时间。在这种情况下,请手动同步 VM Guest 的时间。例如,对于 KVM 主机,可以使用 QEMU Guest 代理,并使用 guest-set-time 来指示 Guest 设置时间。有关更多详细信息,请参见第 22 章 “QEMU Guest 代理

11.4.1 使用虚拟机管理器保存/恢复

过程 11.3︰ 保存 VM Guest
  1. 打开 VM Guest 的 VNC 连接窗口。确保该 Guest 正在运行。

  2. 选择虚拟机 › 关机 › 保存

过程 11.4︰ 恢复 VM Guest
  1. 打开 VM Guest 的 VNC 连接窗口。确保该 Guest 未运行。

  2. 选择虚拟机 › 恢复

    如果 VM Guest 之前是使用虚拟机管理器保存的,则系统不会为您提供用于运行该 Guest 的选项。但请注意警告:始终恢复保存的 Guest中所述的有关使用 virsh 保存的计算机的注意事项。

11.4.2 使用 virsh 保存和恢复

与虚拟机管理器相比,libvirt 为保存与恢复操作提供了更精细的控制能力。virsh savevirsh restore 支持多个选项,可用于调整操作行为。基本的方式是通过指定 VM Guest 的名称、ID 或 UUID 以及文件名来保存 VM Guest。例如:

> virsh save openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav

执行基本的 VM Guest 恢复操作时,只需指定保存文件名即可。例如:

> virsh restore /virtual/saves/openSUSE-Leap.vmsav

当 VM Guest 内存容量增大时,为达到理想的传输速率,保存与恢复操作可能需要使用额外选项,尤其是在保存镜像文件存储于高吞吐量存储设备时。在此类场景中,VM 主机服务器的文件系统缓存往往适得其反,应当使用 bypass-cache 选项来避免。例如:

> virsh save --bypass-cache openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
> virsh restore --bypass-cache /virtual/saves/openSUSE-Leap.vmsav

通过多通道读写 VM Guest 内存页,可显著提升其在高吞吐量存储设备上的保存与恢复效率。如第 11.4 节 “保存和恢复 VM Guest 的状态”中所述,使用多通道必须采用 sparse 映像格式。选择通道数量时需谨慎,要确保操作不会对 VM 主机服务器上的其他工作负载产生负面影响。当 VM 主机服务器资源采用静态分区时,一般建议通道数设置为 VM Guest 专属物理 CPU 的核心数。由于保存操作启动时将停止 VM Guest 的 vCPU,因此这些 CPU 资源可安全地用于保存内存页。

以下示例使用 4 个通道(同时绕过 VM 主机服务器文件系统缓存)执行保存与恢复操作:

> virsh save --bypass-cache --image-format sparse --parallel-channels 4 openSUSE-Leap /virtual/saves/openSUSE-Leap.vmsav
> virsh restore --bypass-cache --parallel-channels 4 /virtual/saves/openSUSE-Leap.vmsav

映像格式已编码存储于保存映像文件中,执行恢复操作时无需指定。

有关保存/恢复操作及支持选项的更多信息,请参见 virsh help savevirsh help restoreman 1 virsh

11.5 创建和管理快照

VM Guest 快照是整个虚拟机的快照,包括 CPU、RAM、设备的状态,以及所有可写磁盘的内容。要使用虚拟机快照,所有挂接的硬盘均需使用 qcow2 磁盘映像格式,并且其中至少有一个硬盘需是可写的。

快照可让您将计算机恢复到特定时间点的状态。在撤消有错误的配置或者安装大量软件包时,此功能十分有用。启动一个在 VM Guest 处于关闭状态下创建的快照后,需要引导该 Guest。在该时间点之后写入磁盘的所有更改都将在启动快照时丢失。

注意
注意

快照仅在 KVM VM 主机服务器上受支持。

11.5.1 术语

有多个特定术语用于描述快照的类型:

内部快照

保存到原始 VM Guest 的 qcow2 文件中的快照。该文件包含保存的快照状态,以及自截取快照以来发生的更改。内部快照的主要优势是它们全都存储在一个文件中,因此方便在多个计算机之间复制或移动。

外部快照

创建外部快照时,会保存原始 qcow2 文件并将其设为只读,同时会创建一个新的 qcow2 文件用于存放更改。原始文件有时称为后备文件或基础文件,包含所有更改的新文件称为覆盖文件或派生文件。备份 VM Guest 时,外部快照很有用。但外部快照不受虚拟机管理器的支持,且无法直接通过 virsh 删除。有关 QEMU 中外部快照的详细信息,请参见第 36.2.4 节 “有效操作磁盘映像”

实时快照

当原始 VM Guest 正在运行时创建的快照。内部实时快照支持保存设备以及内存和磁盘状态,而使用 virsh 的外部实时快照则支持保存内存状态和/或磁盘状态。

脱机快照

基于已关闭的 VM Guest 创建的快照。由于 Guest 的所有进程已停止且未使用任何内存,因此此类快照可确保数据完整性。

11.5.2 使用虚拟机管理器创建和管理快照

重要
重要:仅限内部快照

虚拟机管理器仅支持实时或脱机的内部快照。

要在虚拟机管理器中打开快照管理视图,请按照第 11.2.1.1 节 “使用虚拟机管理器打开图形控制台”中所述打开 VNC 窗口。现在请选择视图 › 快照,或单击工具栏中的管理虚拟机快照

#1: 使用虚拟机管理器创建和管理快照

所选 VM Guest 的现有快照列表显示在窗口的左侧。上次启动的快照带有绿色对勾标记。窗口的右侧显示列表中当前标记的快照的细节。这些细节包括快照的标题和时戳、截取快照时 VM Guest 的状态以及说明。运行中 Guest 的快照还包括一个屏幕截图。可以直接在此视图中更改说明。其他快照数据不可更改。

11.5.2.1 创建快照

要截取 VM Guest 的新快照,请执行以下操作:

  1. (可选)关闭 VM Guest 以创建脱机快照。

  2. 单击 VNC 窗口左下角的添加

    创建快照窗口即会打开。

  3. 提供名称和说明(可选)。截取快照后将无法更改该名称。为方便以后识别该快照,请使用自述性名称

  4. 单击完成确认。

11.5.2.2 删除快照

要删除 VM Guest 的快照,请执行以下操作:

  1. 单击 VNC 窗口左下角的删除

  2. 单击确认删除。

11.5.2.3 启动快照

要启动快照,请执行以下操作:

  1. 单击 VNC 窗口左下角的运行

  2. 单击确认启动。

11.5.3 使用 virsh 创建和管理快照

要列出某个域(以下示例中为 admin_server)的所有现有快照,请运行 snapshot-list 命令:

> virsh snapshot-list --domain sle-ha-node1
 Name                 Creation Time             State
------------------------------------------------------------
 sleha_12_sp2_b2_two_node_cluster 2016-06-06 15:04:31 +0200 shutoff
 sleha_12_sp2_b3_two_node_cluster 2016-07-04 14:01:41 +0200 shutoff
 sleha_12_sp2_b4_two_node_cluster 2016-07-14 10:44:51 +0200 shutoff
 sleha_12_sp2_rc3_two_node_cluster 2016-10-10 09:40:12 +0200 shutoff
 sleha_12_sp2_gmc_two_node_cluster 2016-10-24 17:00:14 +0200 shutoff
 sleha_12_sp3_gm_two_node_cluster 2017-08-02 12:19:37 +0200 shutoff
 sleha_12_sp3_rc1_two_node_cluster 2017-06-13 13:34:19 +0200 shutoff
 sleha_12_sp3_rc2_two_node_cluster 2017-06-30 11:51:24 +0200 shutoff
 sleha_15_b6_two_node_cluster 2018-02-07 15:08:09 +0100 shutoff
 sleha_15_rc1_one-node 2018-03-09 16:32:38 +0100 shutoff

使用 snapshot-current command: 命令显示上次启动的快照:

> virsh snapshot-current --domain admin_server
Basic installation incl. SMT for CLOUD4

运行 snapshot-info 命令可以获取有关特定快照的细节:

> virsh snapshot-info --domain admin_server \
   -name  "Basic installation incl. SMT for CLOUD4"
Name:           Basic installation incl. SMT for CLOUD4
Domain:         admin_server
Current:        yes
State:          shutoff
Location:       internal
Parent:         Basic installation incl. SMT for CLOUD3-HA
Children:       0
Descendants:    0
Metadata:       yes

11.5.3.1 创建内部快照

要创建 VM Guest 的内部快照(实时或脱机快照),请如下所示使用 snapshot-create-as 命令:

> virsh snapshot-create-as --domain admin_server1 --name "Snapshot 1"2 \
--description "First snapshot"3

1

域名。必需。

2

快照的名称。建议使用自述性名称,这样可以更轻松地识别该快照。必需。

3

快照的说明。可选。

11.5.3.2 创建外部快照

使用 virsh 可以创建 Guest 内存状态和/或磁盘状态的外部快照。

要同时创建 Guest 磁盘的实时和脱机外部快照,请指定 --disk-only 选项:

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" --disk-only

可以指定 --diskspec 选项来控制外部文件的创建方式:

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" \
 --disk-only --diskspec vda,snapshot=external,file=/path/to/snapshot_file

要创建 Guest 内存的实时外部快照,请指定 --live--memspec 选项:

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" --live \
 --memspec snapshot=external,file=/path/to/snapshot_file

要创建 Guest 磁盘和内存状态的实时外部快照,请结合使用 --live--diskspec--memspec 选项:

> virsh snapshot-create-as --domain admin_server --name \
 "Offline external snapshot" --live \
 --memspec snapshot=external,file=/path/to/snapshot_file
 --diskspec vda,snapshot=external,file=/path/to/snapshot_file

有关更多细节,请参见 man 1 virsh 中的 SNAPSHOT COMMANDS 部分。

11.5.3.3 删除快照

无法使用 virsh 删除外部快照。要删除 VM Guest 的内部快照并恢复其占用的磁盘空间,请使用 snapshot-delete 命令:

> virsh snapshot-delete --domain admin_server --snapshotname "Snapshot 2"

11.5.3.4 启动快照

要启动快照,请使用 snapshot-revert 命令:

> virsh snapshot-revert --domain admin_server --snapshotname "Snapshot 1"

要启动当前快照(用于启动 VM Guest 的快照),使用 --current 便已足够,不需要指定快照名称:

> virsh snapshot-revert --domain admin_server --current

11.6 删除 VM Guest

默认情况下,使用 virsh 删除 VM Guest 只会去除其 XML 配置。由于默认不会删除挂接的存储设备,因此您可以在另一个 VM Guest 上重复使用该存储设备。使用虚拟机管理器还可以删除 Guest 的存储文件。

11.6.1 使用虚拟机管理器删除 VM Guest

  1. 在虚拟机管理器中,右键单击某个 VM Guest 项。

  2. 从上下文菜单中选择删除

  3. 一个确认窗口即会打开。单击删除会永久擦除该 VM Guest。该删除操作不可恢复。

    您还可以通过激活删除关联的存储文件来永久删除 Guest 的虚拟磁盘。该删除操作也不可恢复。

11.6.2 使用 virsh 删除 VM Guest

要删除 VM Guest,需先将其关闭。无法删除运行中的 Guest。有关关机的信息,请参见第 11.3 节 “更改 VM Guest 的状态:启动、停止、暂停”

要使用 virsh 删除 VM Guest,请运行 virsh undefine VM_NAME

> virsh undefine sles12

没有可自动删除挂接的存储文件的选项。如果这些文件由 libvirt 管理,请按照第 9.2.1.4 节 “从存储池中删除卷”中所述将其删除。

11.7 监控

11.7.1 使用虚拟机管理器进行监控

启动虚拟机管理器并连接到 VM 主机服务器后,所有运行中 Guest 的 CPU 使用率图表将会显示。

您也可以通过此工具获取有关磁盘和网络使用情况的信息,不过必须先在首选项中激活此功能:

  1. 运行 virt-manager

  2. 选择编辑 › 首选项

  3. 常规选项卡切换到轮询

  4. 选中要查看的活动类型对应的复选框:轮询磁盘 I/O轮询网络 I/O轮询内存统计

  5. 如果需要,还可以使用更新状态间隔:n 秒来更改更新间隔。

  6. 关闭首选项对话框。

  7. 视图 › 图表下选中应显示的图表。

此后,磁盘和网络统计数据也会显示在虚拟机管理器的主窗口中。

可以从 VNC 窗口获取更精确的数据。按照第 11.2.1 节 “打开图形控制台”中所述打开 VNC 窗口。在工具栏或视图菜单中选择细节。可以通过左侧树菜单中的性能项显示统计数据。

11.7.2 使用 virt-top 进行监控

virt-top 是一个命令行工具,与众所周知的进程监控工具 top 类似。virt-top 使用 libvirt,因此能够显示不同超级管理程序上运行的 VM Guest 的统计数据。建议使用 virt-top,而不要使用 xentop 等特定于超级管理程序的工具。

virt-top 默认会显示所有运行中 VM Guest 的统计数据。显示的数据包括已用内存百分比 (%MEM)、已用 CPU 百分比 (%CPU),以及 Guest 的运行时长 (TIME)。数据会定期更新(默认为每三秒更新一次)。下面显示了某台 VM 主机服务器上的输出,该服务器包含七个 VM Guest,其中有四个处于非活动状态:

virt-top 13:40:19 - x86_64 8/8CPU 1283MHz 16067MB 7.6% 0.5%
7 domains, 3 active, 3 running, 0 sleeping, 0 paused, 4 inactive D:0 O:0 X:0
CPU: 6.1%  Mem: 3072 MB (3072 MB by guests)

   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM    TIME   NAME
    7 R  123    1  18K  196  5.8  6.0   0:24.35 sled12_sp1
    6 R    1    0  18K    0  0.2  6.0   0:42.51 sles12_sp1
    5 R    0    0  18K    0  0.1  6.0  85:45.67 opensuse_leap
    -                                           (Ubuntu_1410)
    -                                           (debian_780)
    -                                           (fedora_21)
    -                                           (sles11sp3)

输出默认按 ID 排序。使用以下组合键可以更改排序字段:

ShiftP:CPU 使用率
ShiftM:Guest 分配的内存总量
ShiftT:时间
ShiftI:ID

要使用任何其他字段进行排序,请按 ShiftF 并从列表中选择一个字段。要切换排序顺序,请使用 ShiftR

virt-top 还支持基于 VM Guest 数据生成不同的视图,按以下键可以即时更改视图:

0:默认视图
1:显示物理 CPU
2:显示网络接口
3:显示虚拟磁盘

virt-top 支持使用更多热键来更改数据视图,并支持许多可以影响程序行为的命令行开关。有关详细信息,请访问 man 1 virt-top

11.7.3 使用 kvm_stat 进行监控

kvm_stat 可用于跟踪 KVM 性能事件。它会监控 /sys/kernel/debug/kvm,因此需要挂载 debugfs。SUSE Linux Enterprise Server 上默认应该已挂载 debugfs。如果未挂载,请使用以下命令:

> sudo mount -t debugfs none /sys/kernel/debug

可在三种不同的模式下使用 kvm_stat

kvm_stat                    # update in 1 second intervals
kvm_stat -1                 # 1 second snapshot
kvm_stat -l > kvmstats.log  # update in 1 second intervals in log format
                            # can be imported to a spreadsheet
例 11.1︰ kvm_stat 的典型输出
kvm statistics

 efer_reload                  0       0
 exits                 11378946  218130
 fpu_reload               62144     152
 halt_exits              414866     100
 halt_wakeup             260358      50
 host_state_reload       539650     249
 hypercalls                   0       0
 insn_emulation         6227331  173067
 insn_emulation_fail          0       0
 invlpg                  227281      47
 io_exits                113148      18
 irq_exits               168474     127
 irq_injections          482804     123
 irq_window               51270      18
 largepages                   0       0
 mmio_exits                6925       0
 mmu_cache_miss           71820      19
 mmu_flooded              35420       9
 mmu_pde_zapped           64763      20
 mmu_pte_updated              0       0
 mmu_pte_write           213782      29
 mmu_recycled                 0       0
 mmu_shadow_zapped       128690      17
 mmu_unsync                  46      -1
 nmi_injections               0       0
 nmi_window                   0       0
 pf_fixed               1553821     857
 pf_guest               1018832     562
 remote_tlb_flush        174007      37
 request_irq                  0       0
 signal_exits                 0       0
 tlb_flush               394182     148

有关如何解释这些值的更多信息,请参见 https://clalance.blogspot.com/2009/01/kvm-performance-tools.html

Documentation survey