virsh命令速查表来管理KVM来宾虚拟机

时间:2020-02-23 14:31:29  来源:igfitidea点击:

这是全面的virsh命令速查表:Virsh是virsh来宾域的管理用户界面。 Virsh可用于创建,暂停,重新启动和关闭域。此外,virsh可用于列出虚拟化管理程序平台中可用的当前域。

Virsh与Libvirt交互,后者是一个旨在提供长期稳定的C API的库。它目前支持Xen,QEMU,KVM,LXC,OpenVZ,VirtualBox和VMware ESX。

Virsh命令速查表

在此virsh命令速查表中,"错误"显示了最常用的virsh命令来管理在KVM或者Xen Hypervisor上运行的来宾虚拟机。

大多数virsh用法的基本结构是:

virsh [OPTION]... <command> <domain> [ARG]...

Virsh显示节点信息:

这是我们的virsh命令速查表上的第一项。这将显示主机节点信息和支持虚拟化过程的计算机。

$sudo virsh nodeinfo 
CPU model:           x86_64
CPU(s):              8
CPU frequency:       2200 MHz
CPU socket(s):       1
Core(s) per socket:  4
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         12238908 KiB

Virsh列出所有域

要列出非活动域和活动域,请使用以下命令:

sudo virsh list --all
 Id    Name                           State
 ---------------------------------------------------
-     admin                          shut off
-     cloudstack                     shut off
-     hyperv                         shut off
-     ipa                            shut off
-     katello                        shut off
-     node1                          shut off
-     node2                          shut off
-     node3                          shut off
-     server1                        shut off
-     server2                        shut off
-     test                           shut off
-     ubuntu14.04                    shut off
-     win12k                         shut off
-     xen                            shut off
-     zenoss                         shut off

仅列出活动域

要仅使用virsh命令列出活动域,请使用:

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

Virsh启动虚拟机

这是有关如何使用virsh命令启动来宾虚拟机的示例。将要启动上面显示的test域:

$sudo virsh start test
Domain test started

$sudo virsh list      
 Id    Name                           State
 ---------------------------------------------------
  3     test                           running

Virsh自动启动VM

要将虚拟机设置为在系统启动时自动启动,请执行以下操作:

$sudo virsh autostart test
Domain test marked as autostarted

$sudo virsh dominfo test  
Id:             9
Name:           test
UUID:           a943ed42-ba62-4270-a41d-7f81e793d754
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       144.6s
Max memory:     2048 KiB
Used memory:    2048 KiB
Persistent:     yes
Autostart:      enable
Managed save:   no
Security model: none
Security DOI:   0

请注意选项"自动启动:启用"。

Virsh自动启动禁用

禁用虚拟机的自动启动功能:

$virsh autostart --disable test
 Domain test unmarked as autostarted

 $virsh dominfo test
 Id:             
 Name:           test
 UUID:           a943ed42-ba62-4270-a41d-7f81e793d754
 OS Type:        hvm
 State:          shut off
 CPU(s):         2
 Max memory:     2048 KiB
 Used memory:    2048 KiB
 Persistent:     yes
 Autostart:      disable
 Managed save:   no
 Security model: none
 Security DOI:   0

Virsh停止vm,virsh关闭vm

要正常关闭正在运行的虚拟机,请使用:

$sudo virsh shutdown test
Domain test is being shutdown

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

Virsh强制关闭vm

我们可以使用以下命令强制关闭活动域:

$sudo virsh destroy test

Virsh停止所有正在运行的VM

如果我们想关闭所有正在运行的域,只需发出以下命令:

$for i in `sudo virsh list | grep running | awk '{print }'` do
    sudo virsh shutdown $i
done

Virsh重新启动vm

要重新启动名为" test"的虚拟机,使用的命令是:

$sudo virsh reboot test

Virsh删除虚拟机

要干净地删除虚拟机及其存储列,请使用以下命令。域" test"应替换为要删除的实际域。

$sudo virsh destroy test 2> /dev/null
$sudo virsh undefine  test
$sudo virsh pool-refresh default
$sudo virsh vol-delete --pool default test.qcow2

在此示例中,存储卷名为/var/lib/libvirt/images/test.qcow2

Virsh创建一个虚拟机

如果要使用virsh创建新的虚拟机,则要使用的相关命令是`virt-install。这是至关重要的,不能错过virsh命令速查表库。以下示例将从CentOS 7 ISO镜像安装新的操作系统。

sudo virt-install \
--name centos7 \
--description "Test VM with CentOS 7" \
--ram=1024 \
--vcpus=2 \
--os-type=Linux \
--os-variant=rhel7 \
--disk path=/var/lib/libvirt/images/centos7.qcow2,bus=virtio,size=10 \
--graphics none \
--location $HOME/iso/CentOS-7-x86_64-Everything-1611.iso \
--network bridge:virbr0  \
--console pty,target_type=serial -x 'console=ttyS0,115200n8 serial'

Virsh连接到虚拟机控制台

要连接到访客控制台,请使用以下命令:

$sudo virsh console test

如果提供的域存在活动的控制台会话,这将返回失败消息。

Virsh编辑vm xml文件

要编辑vm xml文件,请使用:

# To  use vim text editor

$sudo EDITOR=vim virsh edit test 

# To use nano text editor

$sudo EDITOR=nano virsh edit test

Virsh挂起vm,virsh恢复vm

要使用virsh命令挂起一个名为test的来宾,运行:

$sudo virsh suspend test
Domain test suspended

注意:域处于挂起状态时,它仍会占用系统RAM。来宾挂起时,不会发生磁盘和网络I/O。

恢复来宾虚拟机:

要使用virsh选项恢复使用virsh挂起的来宾,请执行以下操作:

$sudo virsh resume test
Domain test resumed

Virsh保存虚拟机

使用virsh命令将虚拟机的当前状态保存到文件中:

语法为:

$sudo virsh save test test.saved
Domain test saved to test.save

$ls -l test.save 
-rw------- 1 root root 328645215 Mar 18 01:35 test.saved

恢复已保存的虚拟机

要从文件恢复保存的虚拟机:

$virsh restore test.save 
Domain restored from test.save

$sudo virsh list
 Id    Name                           State
 ---------------------------------------------------
  7     test                           running

virsh命令速查表的下一部分将介绍使用virsh命令管理卷:

Virsh管理卷

这里很好地介绍了如何创建存储卷,将其连接到vm,将其与vm分离以及如何删除卷。

Virsh创建卷

要在默认存储池上创建名为" test_vol2"的" 2GB"卷,请使用:

$sudo virsh vol-create-as default  test_vol2.qcow2  2G
Vol test_vol2.qcow2 created

$sudo du -sh /var/lib/libvirt/images/test_vol2.qcow2
2.0G/var/lib/libvirt/images/test_vol2.qcow2

默认值:是池名称。

test_vol2:这是卷的名称。

2G:这是卷的存储容量。

Virsh将卷添加到vm

要将上面创建的卷添加到vmtest,请运行:

# virsh attach-disk --domain test \
--source /var/lib/libvirt/images/test_vol2.qcow2  \
--persistent --target vdb

Disk attached successfully

--persistent:使实时更改持久化

--target vdb:磁盘设备的目标

我们可以确认已将卷作为块设备/dev/vdb添加到了vm。

# ssh test
Last login: Fri Mar 17 19:30:54 2016 from gateway
[theitroad@localhosttest ~]# 

[theitroad@localhosttest ~]# lsblk --output NAME,SIZE,TYPE
NAME              SIZE TYPE
sr0              1024M rom
vda                10G disk
├─vda1              1G part
└─vda2              9G part
  ├─cl_test-root    8G lvm
    └─cl_test-swap    1G lvm
    vdb                 2G disk

Virsh分离VM上的卷

要从vmtest分离卷test_vol2以上:

$sudo virsh detach-disk --domain test --persistent --live --target vdb
Disk detached successfully

$ssh test
Last login: Sat Mar 18 01:52:33 2016 from gateway
[theitroad@localhosttest ~]# 
[theitroad@localhosttest ~]# lsblk --output NAME,SIZE,TYPE 
NAME              SIZE TYPE
sr0              1024M rom
vda                10G disk
├─vda1              1G part
└─vda2              9G part
  ├─cl_test-root    8G lvm
    └─cl_test-swap    1G lvm
    [theitroad@localhosttest ~]#

我们确实可以从此输出中确认设备/dev/vdb已被分离。

请注意,我们可以使用qemu-img命令直接为虚拟机增加磁盘镜像,如下所示:

$sudo qemu-img resize /var/lib/libvirt/images/test.qcow2 +1G

上述命令的主要缺点是我们无法调整具有快照的图像的大小。

Virsh删除卷

要用virsh命令删除卷,使用:

$sudo virsh vol-delete test_vol2.qcow2  --pool default
Vol test_vol2.qcow2 deleted

$sudo virsh pool-refresh  default
Pool default refreshed

$sudo virsh vol-list default
 Name                 Path                                    
 -----------------------------------------------------------------------------
admin.qcow2          /var/lib/libvirt/images/admin.qcow2     
cloudstack.qcow2     /var/lib/libvirt/images/cloudstack.qcow2
ipa.qcow2            /var/lib/libvirt/images/ipa.qcow2       
katello.qcow2        /var/lib/libvirt/images/katello.qcow2   
node1.qcow2          /var/lib/libvirt/images/node1.qcow2     
node2.qcow2          /var/lib/libvirt/images/node2.qcow2     
node3.qcow2          /var/lib/libvirt/images/node3.qcow2     
test.qcow2           /var/lib/libvirt/images/test.qcow2      
ubuntu14.04.qcow2    /var/lib/libvirt/images/ubuntu14.04.qcow2
zenoss.qcow2         /var/lib/libvirt/images/zenoss.qcow2

从" vol-list" virsh命令的输出中,可以看到该卷已被删除。

Virsh管理快照

在使用virsh命令管理kvm来宾计算机的第二部分中,我们将介绍如何管理VM快照。

Virsh为虚拟机创建快照

让我们为测试虚拟机创建快照。

$sudo virsh snapshot-create-as --domain test \
--name "test_vm_snapshot1" \
--description "test vm snapshot 1-working"

Domain snapshot test_vm_snapshot1 created

Virsh列出虚拟机的快照

要列出虚拟机的可用快照,请使用:

$sudo virsh snapshot-list test
 Name                 Creation Time             State
 -----------------------------------------------------------
  1489689679           2016-03-16 21:41:19 +0300 shutoff
  test_fresh           2016-03-16 22:11:48 +0300 shutoff
  test_vm_snapshot1    2016-03-18 02:15:58 +0300 running

Virsh显示有关快照的信息

要检索有关域的更多信息,请使用:

$sudo virsh snapshot-info --domain test --snapshotname test_vm_snapshot1
Name:           test_vm_snapshot1
Domain:         test
Current:        yes
State:          running
Location:       internal
Parent:         test_fresh
Children:       0
Descendants:    0
Metadata:       yes

Virsh恢复虚拟机快照

其中创建另一个名为" test_vm_snapshot2"的快照,然后恢复为" test_vm_snapshot1"快照。

$sudo virsh snapshot-create-as \
--domain test --name "test_vm_snapshot2" \
--description "test vm snapshot 2-working"

Domain snapshot test_vm_snapshot2 created

让我们还原之前创建的快照:

$sudo virsh snapshot-list test
 Name                 Creation Time             State
 -----------------------------------------------------------
  1489689679           2016-03-16 21:41:19 +0300 shutoff
  test_fresh           2016-03-16 22:11:48 +0300 shutoff
  test_vm_snapshot1    2016-03-18 02:15:58 +0300 running
  test_vm_snapshot2    2016-03-18 02:23:29 +0300 running

$sudo virsh snapshot-revert --domain test  --snapshotname test_vm_snapshot1  --running

Virsh删除快照

让我们删除我们创建的两个快照:

$sudo  virsh snapshot-delete --domain test --snapshotname  test_vm_snapshot2
Domain snapshot test_vm_snapshot2 deleted

$sudo  virsh snapshot-delete --domain test --snapshotname  test_vm_snapshot1
Domain snapshot test_vm_snapshot1 deleted

$sudo virsh snapshot-list test
 Name                 Creation Time             State
 -----------------------------------------------------------
  1489689679           2016-03-16 21:41:19 +0300 shutoff
  test_fresh           2016-03-16 22:11:48 +0300 shutoff

Virsh克隆虚拟机

具有要克隆的设备的域必须暂停或者关闭。因此,请关闭它:

$sudo virsh destroy test
Domain test destroyed

然后克隆一个虚拟机,如下所示:

$sudo virt-clone --connect qemu:///system \
--original test \
--name test_clone \
--file /var/lib/libvirt/images/test_clone.qcow2 

Allocating 'test_clone.qcow2'       |  10 GB  00:00:06

Clone 'test_clone' created successfully.

$sudo virsh dominfo test_clone
Id:             
Name:           test_clone
UUID:           be0621fd-51b5-4d2b-a05c-ce76e59baafa
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

Virsh管理VM vcpus

此virsh命令速查表部分介绍如何向虚拟机添加其他虚拟cpus:

sudo virsh setvcpus --domain test --maximum 2 --config
sudo virsh setvcpus --domain test --count 2 --config
sudo virsh reboot test

 Domain test is being rebooted

确认vcpu的数量已更改,前一个为1,当前值为2:

$virsh dominfo test
Id:             
Name:           test
UUID:           a943ed42-ba62-4270-a41d-7f81e793d754
OS Type:        hvm
State:          shut off
CPU(s):         2
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

Virsh管理VM内存

同样在virsh命令中,速查表上也使用virsh管理RAM。要调整来宾操作系统使用的总内存,请使用以下命令:

sudo virsh setmaxmem test 2048 --config
 sudo virsh setmem test 2048 --config
 sudo virsh reboot test

 Domain test is being rebooted

检查域信息以确认分配给VM的当前RAM。

virsh dominfo test                     
Id:             9
Name:           test
UUID:           a943ed42-ba62-4270-a41d-7f81e793d754
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       70.7s
Max memory:     2048 KiB
Used memory:    2048 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

注意,分配给VM的当前内存为" 2048"

挂载虚拟磁盘

我们可以在KVM上安装虚拟磁盘以进行脱机管理。为此,我们准备了一篇文章,我们可以从下面的链接中引用它:

如何在KVM虚拟机管理程序上挂载VM虚拟磁盘

在虚拟机中有一个目录

要在正在运行的VM上创建目录,我们需要安装libguestfs-tools。查看如何在CentOS 7/Ubuntu 16.04/Debian 9/SLES 12/Arch Linux上安装KVM,了解如何在CentOS,Ubuntu,Debian,Arch Linux和SLES上安装KVM。

运行:

# virt-ls -l -d <domain>  <directory>

例如

# virsh list
 Id Name State
---------------------------------------------------
 10 allot_netxplorer_01 running
 19 sg-ve-01 running

# virt-ls -l -d allot_netxplorer_01 /root
total 28
dr-xr-x---. 2 root root 135 Mar 22 14:26 .
dr-xr-xr-x. 17 root root 224 Mar 21 10:37 ..
-rw-------. 1 root root 385 Mar 22 14:26 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rw-------. 1 root root 1447 Mar 21 10:38 anaconda-ks.cfg

常见选项有:

-R |--recursive --> Recursive listing
-h |--human-readable --> Human-readable sizes in output
-d |--domain guest --> Add disks from libvirt guest
-l |--long --> Long listing

在虚拟机中管理文件

我们也可以对文件进行分类,而无需对VM执行ssh或者通过控制台访问文件。我们需要在虚拟机管理程序上安装libguestfs工具才能正常工作。

# virt-cat -d <domain>  <file_path>
# virt-cat -d sg-ve-01 /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
# virt-cat -d sg-ve-01 /etc/redhat-release > check_os
# cat check_os 
CentOS Linux release 7.1.1503 (Core)

为此,请确保在系统上安装了libguestfs-tools->在CentOS 7/Ubuntu 16.04/Debian 9/SLES 12/Arch Linux上安装KVM

在虚拟机中编辑文件

在管理程序上安装libguestfs-tools之后,使用virsh-edit命令:

# virt-edit -d sg-ve-01 /etc/hosts

显示虚拟机磁盘使用情况

使用virt-df命令:

# virt-df -d sg-ve-01 
Filesystem 1K-blocks Used Available Use%sg-ve-01:/dev/sda1 20469760 3954792 16514968 20%
sg-ve-01:/dev/sda2 27739924 173828 27566096 1%

列出虚拟机或者磁盘镜像中的文件系统,分区,块设备,LVM

# virt-filesystems -l -d sg-ve-01
Name Type VFS Label Size Parent
/dev/sda1 filesystem xfs - 20971520000 
/dev/sda2 filesystem xfs - 28419555328 

# virt-filesystems -l -h -d sg-ve-01
Name Type VFS Label Size Parent
/dev/sda1 filesystem xfs - 20G 
/dev/sda2 filesystem xfs - 26G 

# virt-filesystems -l -h -d sg-ve-01 --partitions
Name       Type    MBR Size Parent
/dev/sda1 partition 83 20G /dev/sda
/dev/sda2 partition 83 26G /dev/sda
/dev/sda3 partition 82 4.0G /dev/sda

# virt-filesystems -d sg-ve-01 --all --long --uuid -h
Name Type VFS Label MBR Size Parent UUID
/dev/sda1 filesystem xfs - - 20G - 97074514-612e-4d1c-8433-935dbb3ec775
/dev/sda2 filesystem xfs - - 26G - 8cc9e0cd-282d-46a4-9a37-069dfb93c4f2
/dev/sda3 filesystem swap - - 4.0G - ad7dcd49-fe1a-4938-8600-f7299a59c57a
/dev/sda1 partition - - 83 20G /dev/sda 
/dev/sda2 partition - - 83 26G /dev/sda 
/dev/sda3 partition - - 82 4.0G /dev/sda 
/dev/sda device - - - 100G - 

显示虚拟域的统计信息

使用virt-top显示虚拟化域的统计信息。我们可以按CPU,RAM等进行过滤,然后将输出保存到CSV文件中。

# virt-top
# virt-top --csv file.csv

我们还可以将调试和错误消息发送到文件名。要将错误消息发送到syslog,我们可以执行以下操作:

# virt-top --debug >(logger -t virt-top)

显示虚拟机的日志文件

virt-log是一个命令行工具,用于显示来自命名虚拟机(或者磁盘镜像)的日志文件。该工具可以理解并显示纯文本日志文件(例如/var/log/messages)和二进制格式(例如systemd日志)。

# virt-log -d <domain> | less
# virt-log -d <domain> | grep 'dhclient.*bound to'