使用Virsh程序管理KVM虚拟机
Virsh是Virtual Shell的缩写,是用于管理虚拟客户机的命令行用户界面。
Virsh允许我们创建,列出,编辑,启动,重新启动,停止,挂起,恢复,关闭和删除VM。
它目前支持KVM,LXC,Xen,QEMU,OpenVZ,VirtualBox和VMware ESX。
在本教程中,我们将讨论如何在Linux中使用Virsh管理用户界面来管理KVM虚拟机。
确保已在Linux计算机上安装了KVM和Virsh实用程序。
使用Virsh命令管理KVM虚拟机
获得帮助
如果我们不熟悉Virsh交互式终端或者不知道如何使用它,请输入以下命令以查看可用命令列表以及简要说明。
$virsh help
我们将看到大量可用的virsh命令,用于从命令行管理KVM虚拟机。
我们不必记住所有内容。
只需阅读要运行和使用的命令的说明。
这些命令分为以下几节:
- 域管理
- 域监控,
- 主机和管理程序,
- 检查站,
- 界面,
- 网络过滤器
- 联网,
- 节点设备,
- 秘密,
- 快照
- 备份,
- 储存池
- 储存量
- 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
我们还可以进一步显示特定命令的帮助部分。
例如,我将显示“ net-name”命令的帮助部分:
$virsh help net-name NAME net-name - convert a network UUID to network name SYNOPSIS net-name <network> OPTIONS [--network] <string> network uuid
列出虚拟机
要以运行或者挂起模式查看来宾虚拟机的列表,请执行以下命令:
$virsh list Id Name State -------------------
如我们所见,没有来宾处于运行或者暂停模式。
我们可以使用--inactive选项列出不活动的来宾。
要查看所有来宾计算机,请运行:
$virsh list --all Id Name State ------------------------------- - centos8-uefi shut off - nginx_centos8 shut off
如我们在上面的输出中看到的,我有两个虚拟机,分别是“ centos8-uefi”和“ nginx_centos8”。
两者均已关闭电源。
启动虚拟机
要启动虚拟机,例如“ centos8-uefi”,请运行:
$virsh start centos8-uefi
我们将看到类似以下的输出:
Domain centos8-uefi started
要验证虚拟机是否正在运行,请使用“列表”命令:
$virsh list Id Name State ----------------------------- 1 centos8-uefi running
保存虚拟机
要保存正在运行的VM的当前状态,请运行:
$virsh save centos8-uefi centos8-save Domain centos8-uefi saved to centos8-save
该命令停止名为“ centos8-uefi”的guest虚拟机,并将数据保存到名为“ centos8-save”的文件中。
这将需要一些时间,具体取决于客户机所使用的内存量。
还原虚拟机
要恢复虚拟机以前保存的状态,只需指定文件名,如下所示:
$virsh restore centos8-save Domain restored from centos8-save
使用“ list”命令验证虚拟机是否已还原:
$virsh list Id Name State ----------------------------- 4 centos8-uefi running
重新启动虚拟机
要重新启动正在运行的VM,请运行:
$virsh reboot centos8-uefi Domain centos8-uefi is being rebooted
挂起/暂停虚拟机
要挂起正在运行的VM,请执行以下操作:
$virsh suspend centos8-uefi Domain centos8-uefi suspended
使用“列表”命令验证它:
$virsh list Id Name State ---------------------------- 1 centos8-uefi paused
恢复虚拟机
要恢复已暂停的VM,请运行:
$virsh resume centos8-uefi Domain centos8-uefi resumed
停止活动的虚拟机
要强制停止活动的VM,并使其保持非活动状态,请运行:
$virsh destroy centos8-uefi Domain centos8-uefi destroyed
我们也可以正常停止VM,而不必像下面这样强制它:
$virsh destroy centos8-uefi --graceful Domain centos8-uefi destroyed
关闭虚拟机
要关闭正在运行的VM,请执行以下操作:
$virsh shutdown centos8-uefi Domain centos8-uefi is being shutdown
检索虚拟机XML转储
要在标准输出中显示VM的XML配置文件,请运行:
$virsh dumpxml centos8-uefi
此命令将显示虚拟机的完整配置详细信息(软件和硬件):
我们还可以将XML转储导出到文件中,而不仅仅是在标准输出中显示它,如下所示:
$virsh dumpxml centos8-uefi > centos8.xml
此命令会将“ centos8-uefi” XML文件转储到名为“ centos8.xml”的文件中,并将其保存在当前工作目录中。
使用XML转储创建虚拟机
我们可以使用以前创建的来宾中的现有XML创建新的虚拟来宾计算机。
首先,如上所述创建一个XML转储,然后使用如下所示的XML文件创建一个新的VM:
$virsh create centos8.xml Domain centos8-uefi created from centos8.xml
此命令将创建一个新的VM并立即启动它。
我们可以使用以下命令验证它:
编辑虚拟机XML配置文件
如果要在来宾计算机中进行任何更改,则可以简单地编辑其配置文件并根据需要进行更改。
来宾可以在其运行时或者脱机时进行编辑。
$virsh edit centos8-uefi
此命令将在我们使用$EDITOR变量设置的默认编辑器中打开文件。
启用虚拟机的控制台访问
创建KVM来宾计算机后,我们可以通过SSH,VNC客户端,Virt-viewer,Virt-manager和Cockpit Web控制台等访问它们。
但是,我们不能使用“ virsh console”命令来访问它们。
console命令用于连接来宾的虚拟串行控制台。
要使用“ virsh console”命令访问KVM guest虚拟机,我们需要在guest虚拟机中启用串行控制台访问。
请参考以下教程以启用virsh控制台访问:
- 如何为KVM guest虚拟机启用Virsh控制台访问
重命名虚拟机
如果我们想重命名虚拟机,请参考以下教程。
- 如何重命名KVM来宾虚拟机
显示虚拟机的域ID
要查找正在运行的来宾虚拟机的域ID,请运行:
$virsh domid centos8-uefi 2
请注意,来宾应该正在运行以获取其域ID。
显示虚拟机的域名
要获取正在运行的VM的域名,请运行:
$virsh domname <domain-id or domain-uuid>
例子:
$virsh domname 2 centos8-uefi
其中2是域ID。
显示虚拟机的UUID
要查找来宾计算机UUID,请运行:
$virsh domuuid <domain-name or domain-id>
例子:
$virsh domuuid centos8-uefi
或者,
$ virsh domuuid 2
输出示例:
de4100c4-632e-4c09-8dcf-bbde29170268
显示虚拟机详细信息
要显示来宾计算机的信息,请使用域名,域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
显示主机信息
要获取主机系统的信息,请运行:
$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
显示虚拟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
查找虚拟机的IP地址
查找虚拟机的IP地址并不重要。
如果我们具有控制台访问虚拟机的权限,则可以使用“ ip”命令轻松找到其IP地址。
但是,也可以无需访问其控制台即可识别KVM VM的IP地址。
以下教程说明了如何查找KVM虚拟机的IP地址。
- 如何查找KVM虚拟机的IP地址
删除虚拟机
如果我们不再需要虚拟机,只需将其删除,如下所示:
$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)
管理虚拟网络
列出虚拟网络
要列出可用的虚拟网络,请运行:
$virsh net-list Name State Autostart Persistent ------------------------------------------- default active yes yes
如我们所见,我只有一个虚拟网络,这是默认网络。
显示虚拟网络详细信息
要查看虚拟网络的详细信息,请运行:
$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>
启动虚拟网络
要启动不活动的网络,请运行:
$virsh net-start <Name-Of-Inactive-Network>
自动启动网络:
$virsh net-autostart <network-name>
创建虚拟网络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>
从XML文件创建新的虚拟网络
要使用现有的XML文件创建新的虚拟网络并立即启动,请运行:
$virsh net-create <Name-of-XMLfile>
如果要从XML文件创建网络但不想自动启动它,请运行:
$virsh net-define <Name-of-XMLfile>
停用虚拟网络
要停用活动网络,请运行:
$virsh net-destroy <network-name>
删除虚拟网络
要删除虚拟网络,请首先禁用它,如上所示,然后运行:
$virsh net-undefine <Name-Of-Inactive-Network>
Virsh有很多命令和选项。
完全学习使用Virsh命令行足以在Linux中设置完整的虚拟环境。
我们实际上并不需要GUI应用程序。
有关更多详细信息,请参见virsh手册页。
$man virsh
以图形方式管理KVM来宾
记住所有virsh命令几乎是不可能的,也是不必要的。
如果发现很难从命令行执行所有Kvm管理任务,则可以尝试使用图形KVM管理工具,例如Virt-manager和Cockpit。
- 使用Cockpit Web控制台管理KVM虚拟机
- 如何使用Virt-Manager管理KVM虚拟机