virsh命令速查表来管理KVM来宾虚拟机
这是全面的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'