使用 Virsh 程序管理 KVM 虚拟机

维尔什, 短缺 病毒实际 ell,是用于管理虚拟客户机器的命令行用户界面。 Virsh 允许您创建、列出、编辑、启动、重新启动、停止、暂停、恢复、关闭和删除 VM。 目前支持 KVM、LXC、Xen、QEMU、OpenVZ、 VirtualBox 和 VMware ESX。 在本指南中,我们将讨论如何管理 虚拟机 Linux 中具有 Virsh 管理用户界面的虚拟机。

确保你已经在你的 Linux 机器上安装了 KVM 和 Virsh 实用程序。 以下指南解释了如何在基于 DEB 和 RPM 的系统上安装 KVM。

  • 在 Ubuntu 20.04 Headless Server 中安装和配置 KVM
  • 在 CentOS 8 服务器上安装和配置 KVM
  • 在 OpenSUSE Tumbleweed 中安装和配置 KVM

1. 使用 Virsh 命令管理 KVM 虚拟机

如果您是 Virsh 和 KVM 的新手,最好先阅读帮助手册。 它将给出如何使用 Virsh 的基本概念。

1.1。 获得帮助

Enter 以下命令可查看可用命令列表以及简要说明:

$ virsh help

您将看到大量可用的 virsh 命令列表,用于从命令行管理 KVM 虚拟机。

显示 virsh 命令帮助部分

您不必记住所有内容。 只需阅读您要运行并使用它的命令的描述。

这些命令分为以下部分:

  • 域管理,
  • 域监控,
  • 主机和管理程序,
  • 检查站,
  • 界面,
  • 网络过滤器,
  • 联网,
  • 节点设备,
  • 秘密,
  • 快照,
  • 备份,
  • 存储池,
  • 存储量,
  • 维尔什本身。

每个部分都包含与执行特定任务集相关的命令。 您可以查看组的帮助部分,例如 example 联网,如下所示:

$ virsh help Networking

您将看到与执行网络任务相关的命令:

 Networking (help keyword 'network'):
    net-autostart                  autostart a network
    net-create                     create a network from an XML file
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    destroy (stop) a network
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    network information in XML
    net-edit                       edit XML configuration for a network
    net-event                      Network Events
    net-info                       network information
    net-list                       list networks
    net-name                       convert a network UUID to network name
    net-start                      start a (previously defined) inactive network
    net-undefine                   undefine a persistent network
    net-update                     update parts of an existing network's configuration
    net-uuid                       convert a network name to network UUID
    net-port-list                  list network ports
    net-port-create                create a network port from an XML file
    net-port-dumpxml               network port information in XML
    net-port-delete                delete the specified network port

您还可以进一步显示特定命令的帮助部分。 为了 example我将显示帮助部分 “网名” 命令:

$ virsh help net-name
  NAME
    net-name - convert a network UUID to network name

  SYNOPSIS
    net-name <network>

  OPTIONS
    [--network] <string>  network uuid

1.2. 列出虚拟机

要查看处于运行或挂起模式的来宾虚拟机列表,请执行以下命令:

$ virsh list
Id Name State
--------------------

如您所见,运行或挂起模式下没有来宾。

您可以使用 –不活跃 列出非活动客人的选项。

要查看所有来宾机器,请运行:

$ virsh list --all
 Id   Name            State
--------------------------------
 -    centos8-uefi    shut off
 -    nginx_centos8   shut off

正如您在上面的输出中看到的,我有两个虚拟机,即“centos8-uefi”和“nginx_centos8”。 两者都断电。

1.3. 启动虚拟机

要启动虚拟机,对于 example “centos8-uefi”,运行:

$ virsh start centos8-uefi

您将看到如下输出:

Domain centos8-uefi started

要验证 VM 是否正在运行,请使用 “列表” 命令:

$ virsh list
 Id   Name           State
------------------------------
 1    centos8-uefi   running

1.4. Save 虚拟机

要保存正在运行的 VM 的当前状态,请运行:

$ virsh save centos8-uefi centos8-save

Domain centos8-uefi saved to centos8-save

此命令停止名为“centos8-uefi”的客户机并将数据保存到名为“centos8-save”的文件中。 这将需要一些时间,具体取决于您的来宾计算机使用的内存量。

1.5。 还原虚拟机

要恢复以前保存的 VM 状态,只需指定文件名,如下所示:

$ virsh restore centos8-save 
Domain restored from centos8-save

验证是否使用“list”命令还原了 VM:

$ virsh list
 Id   Name           State
------------------------------
 4    centos8-uefi   running

1.6. 重新启动虚拟机

要重新启动正在运行的 VM,请运行:

$ virsh reboot centos8-uefi
Domain centos8-uefi is being rebooted

1.7. 暂停/暂停虚拟机

要挂起正在运行的 VM,请执行以下操作:

$ virsh suspend centos8-uefi 
Domain centos8-uefi suspended

使用“list”命令验证它:

$ virsh list
 Id   Name           State
-----------------------------
 1    centos8-uefi   paused

1.8. 恢复虚拟机

要恢复暂停的 VM,请运行:

$ virsh resume centos8-uefi 
Domain centos8-uefi resumed

1.9。 停止活动的虚拟机

要强制停止活动的 VM,并使其处于非活动状态,请运行:

$ virsh destroy centos8-uefi
Domain centos8-uefi destroyed

您还可以优雅地停止 VM,而不是像下面这样强制它:

$ virsh destroy centos8-uefi --graceful
Domain centos8-uefi destroyed

1.10。 关闭虚拟机

要关闭正在运行的 VM,请执行以下操作:

$ virsh shutdown centos8-uefi
Domain centos8-uefi is being shutdown

1.11。 检索虚拟机 XML 转储

要在标准输出中显示 VM 的 XML 配置文件,请运行:

$ virsh dumpxml centos8-uefi

此命令将显示虚拟机的完整配置详细信息(软件和硬件):

显示虚拟机 XML 配置文件

您还可以将 XML 转储导出到文件中,而不仅仅是在标准输出中显示,如下所示:

$ virsh dumpxml centos8-uefi > centos8.xml

此命令会将 “centos8-uefi” XML 文件转储到名为 “centos8.xml” 的文件中,并将其保存在当前工作目录中。

1.12。 使用 XML 转储创建虚拟机

您可以使用来自以前创建的来宾的现有 XML 创建新的虚拟来宾计算机。 首先,如上所示创建一个 XML 转储,然后使用 XML 文件创建一个新 VM,如下所示:

$ virsh create centos8.xml 
Domain centos8-uefi created from centos8.xml

此命令将创建一个新 VM 并立即启动它。 您可以使用命令验证它:

使用 XML 转储创建虚拟机使用 XML 转储创建虚拟机

1.13。 编辑虚拟机 XML 配置文件

如果您想在来宾机器中进行任何更改,您可以简单地编辑其配置文件并根据需要进行更改。 来宾可以在运行时或离线时进行编辑。

$ virsh edit centos8-uefi

此命令将在您使用 $EDITOR 变量设置的默认编辑器中打开文件。

1.14。 为虚拟机启用控制台访问

创建 KVM 来宾机器后,您可以通过 SSH、VNC 客户端、Virt-viewer、Virt-manager 和 Cockpit Web 控制台等方式访问它们。但是,您无法使用“virsh console”命令访问它们。 console 命令用于连接来宾的虚拟串行控制台。 要使用“virsh console”命令访问 K​​VM 来宾,您需要在来宾计算机中启用串行控制台访问。 请参阅以下指南以启用 virsh 控制台访问:

  • 如何为 KVM 来宾启用 Virsh 控制台访问

1.15。 重命名虚拟机

如果您想重命名虚拟机,请参阅以下指南。

  • 如何重命名 KVM 来宾虚拟机

1.16。 显示虚拟机的域 ID

要查找正在运行的来宾虚拟机的域 ID,请运行:

$ virsh domid centos8-uefi
2

请注意,来宾应该正在运行以获取其域 ID。

1.17。 显示虚拟机的域名

要获取正在运行的 VM 的域名,请运行:

$ virsh domname <domain-id or domain-uuid>

例子:

$ virsh domname 2
centos8-uefi

这里, 2 是域 ID。

1.18。 显示虚拟机的 UUID

要查找客户机 UUID,请运行:

$ virsh domuuid <domain-name or domain-id>

例子:

$ virsh domuuid centos8-uefi

或者,

$  virsh domuuid 2

样本输出:

de4100c4-632e-4c09-8dcf-bbde29170268

1.19。 显示虚拟机详细信息

要显示来宾机器的信息,请使用域名、域 id 或域 uuid,如下所示:

$ virsh dominfo centos8-uefi

或者,

$ virsh dominfo 2

或者,

$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268

样本输出:

Id:             -
Name:           centos8-uefi
UUID:           de4100c4-632e-4c09-8dcf-bbde29170268
OS Type:        hvm
State:          shut off
CPU(s):         2
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0
显示虚拟机详细信息显示虚拟机详细信息

1.20。 显示 KVM 主机信息

要获取主机系统的信息,请运行:

$ virsh nodeinfo

样本输出:

CPU model:           x86_64
CPU(s):              4
CPU frequency:       1167 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         8058840 KiB

1.21。 显示虚拟 CPU 信息

要显示虚拟 CPU 信息,请运行:

$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>

例子:

$ virsh vcpuinfo centos8-uefi
VCPU: 0
CPU: 3
State: running
CPU time: 5.6s
CPU Affinity: yyyy

VCPU: 1
CPU: 1
State: running
CPU time: 0.0s
CPU Affinity: yyyy

1.22。 查找虚拟机的 IP 地址

查找虚拟机的 IP 地址并不是什么大问题。 如果您可以通过控制台访问虚拟机,则可以使用“ip”命令轻松找到其 IP 地址。 但是,也可以识别 KVM VM 的 IP 地址,而无需访问其控制台。 以下指南介绍了如何查找 KVM 虚拟机的 IP 地址。

  • 如何查找 KVM 虚拟机的 IP 地址

1.23。 删除虚拟机

如果您不再需要 VM,只需将其删除,如下所示:

$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi

如果 VM 已经在运行,第一个命令将强制停止 VM。 第二个命令将取消定义并完全删除它。

您还可以进一步使用以下选项来删除存储卷和快照。

--managed-save remove domain managed state file
--storage remove associated storage volumes (comma separated list of targets or source paths) (see domblklist)
--remove-all-storage remove all associated storage volumes (use with caution)
--delete-storage-volume-snapshots delete snapshots associated with volume(s)
--wipe-storage wipe data on the removed volumes
--snapshots-metadata remove all domain snapshot metadata (vm must be inactive)

2. 管理虚拟网络

希望您学会了如何在 Linux 中使用 Virsh 命令管理 KVM 虚拟机。 本节列出了使用 virsh 命令行实用程序在 Linux 中管理 KVM 虚拟网络的重要命令。

2.1。 列出虚拟网络

要列出可用的虚拟网络,请运行:

$ virsh net-list 
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

如您所见,我只有一个默认的虚拟网络。

2.2. 显示虚拟网络详细信息

要查看虚拟网络的详细信息,请运行:

$ virsh net-dumpxml default

在上述命令中将“default”替换为您的网络名称。

样本输出:

<network connections="1">
  <name>default</name>
  <uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
  <forward mode="nat">
    <nat>
      <port start="1024" end='65535'/>
    </nat>
  </forward>
  <bridge name="virbr0" stp='on' delay='0'/>
  <mac address="52:54:00:ee:35:49"/>
  <ip address="192.168.122.1" netmask='255.255.255.0'>
    <dhcp>
      <range start="192.168.122.2" end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

2.3. 启动虚拟网络

要启动非活动网络,请运行:

$ virsh net-start <Name-Of-Inactive-Network>

要自动启动网络:

$ virsh net-autostart <network-name>

2.4. 创建虚拟网络 XML 转储

要创建现有虚拟网络的 XML 配置文件,请运行:

$ virsh net-dumpxml default > default.xml

上述命令将创建“default”网络的 XML 配置并将其保存在当前目录中名为“default.xml”的文件中。

您可以使用 cat 命令查看 XML 文件:

$ cat default.xml 
<network connections="1">
  <name>default</name>
  <uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
  <forward mode="nat">
    <nat>
      <port start="1024" end='65535'/>
    </nat>
  </forward>
  <bridge name="virbr0" stp='on' delay='0'/>
  <mac address="52:54:00:ee:35:49"/>
  <ip address="192.168.122.1" netmask='255.255.255.0'>
    <dhcp>
      <range start="192.168.122.2" end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

2.5. 从 XML 文件创建新的虚拟网络

要使用现有 XML 文件创建新的虚拟网络并立即启动它,请运行:

$ virsh net-create <Name-of-XMLfile>

如果您想从 XML 文件创建网络但不想自动启动它,请运行:

$ virsh net-define <Name-of-XMLfile>

2.6. 停用虚拟网络

要停用活动网络,请运行:

$ virsh net-destroy <network-name>

2.7. 删除虚拟网络

要删除虚拟网络,请先将其停用,如上所示,然后运行:

$ virsh net-undefine <Name-Of-Inactive-Network>

Virsh 有很多命令和选项。 彻底学会使用 Virsh 命令行工具就足以在 Linux 中设置一个完整的虚拟环境。 您不需要任何 GUI 应用程序。

有关更多详细信息,请参阅 virsh 手册页。

$ man virsh

3. 以图形方式管理 KVM 来宾

记住所有 virsh 命令几乎是不可能的,也是不必要的。 如果您发现难以从命令行执行所有 KVM 管理任务,您可以尝试图形化 KVM 管理工具,例如 Virt-manager 和 Cockpit。

  • 使用 Cockpit Web 控制台管理 KVM 虚拟机
  • 如何使用 Virt-Manager 管理 KVM 虚拟机

结论

如果您知道如何在 Linux 中使用 Virsh 管理用户界面管理 KVM 虚拟机,那么您就已经成功管理企业级虚拟化环境了。 使用 virsh 命令设置 KVM 和管理 KVM 虚拟机对于所有 Linux 管理员来说都非常重要。

特色图片由 埃利亚斯施。关注.