使用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。 获得帮助

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

$ virsh help

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

显示virsh命令帮助部分

您不必记住所有内容。 只需阅读要运行和使用的命令的说明。

这些命令分为以下几节:

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

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

$ 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

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

$ 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。 启动虚拟机

要启动虚拟机,例如“ centos8-uefi”,请运行:

$ virsh start centos8-uefi

您将看到类似以下的输出:

Domain centos8-uefi started

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

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

1.4。 保存虚拟机

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

$ virsh save centos8-uefi centos8-save

Domain centos8-uefi saved to centos8-save

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

1.5。 还原虚拟机

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

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

使用“列表”命令验证虚拟机是否已还原:

$ 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

使用“列表”命令验证它:

$ 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”命令访问KVM guest虚拟机,您需要在guest虚拟机中启用串行控制台访问。 请参考以下指南以启用virsh控制台访问:

  • 如何为KVM guest虚拟机启用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。 删除虚拟机

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

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

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

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

--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

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

样本输出:

<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

上面的命令将创建“默认”网络的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 guest虚拟机

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

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

结论

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

特色图片 埃里亚斯(Elias Sch。)的Pixabay

基于内核的虚拟机KVMKvm管理LinuxqemuVirsh命令虚拟机虚拟Shell

Sidebar