使用libvirt命令行管理虚拟机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用libvirt命令行管理虚拟机相关的知识,希望对你有一定的参考价值。

本文主要介绍虚拟机的启动、停止、重启、挂起等基础操作,不过在进行这些操作之前,我们得先有一台kvm虚拟机,根据之前的文章,先创建一台虚拟机。

virt-install --name "centos5" --vcpus=1 --ram=512 --disk=/images/kvm/centos55.img,size=10,sparse --force --network bridge=virbr0,model=virtio --cdrom /opt/CentOS-5.5-i386-bin-DVD.iso --graphic vnc,listen=0.0.0.0,port=5900 --os-variant rhel5

可以使用vncviewer进行系统安装,安装后虚拟机reboot,此时会退出vncviewer。我们需要重新启动该虚拟机,但是系统安装完了,又不能使用上面的命令安装,怎么做呢?

这里我们首先到/etc/libvirt/qemu/目录下,会在该目录下看到一个名为centos5.xml的文件,这就是我们之前使用virt-install创建虚拟机的配置文件。

于是,我们想要启动该虚拟机,可以使用如下命令:

virsh create centos5.xml   #根据centos5.xml创建虚拟机

[[email protected] qemu]# virsh create centos5.xml 

Domain centos5 created from centos5.xml

[[email protected] qemu]# virsh list

 Id    Name                           State

----------------------------------------------------

 11    centos5                        running

技术分享图片


Virsh的常用命令介绍:


virt-install: 创建虚拟机,并安装OS;也可以创建虚拟机并导入Image文件

根据xml文件创建虚拟机:

         virsh create *.xml       #创建并启动虚拟机

         virsh define *.xml       #创建但不启动虚拟机

关闭domain:

         virsh destroy  domain_name           #强制关闭domain

         virsh shutdown  domain_name       #优雅的关闭domain

         vrish reboot  domain_name            #重启一个domain

删除domain:

         virsh undefine domain_name         #删除一个domain,该操作会删除虚拟机的xml配置文件,但不会删除虚拟磁盘文件

连接一个domain:

         virsh console domain_name           #连接到一个domain的管理控制台

列出domain:

         virsh list                                           #列出domains,会列出活动中的虚拟机

         virsh list -all                                     #列出所有的domains,包含已经停止的虚拟机

附加或拆除disk:

         virsh attach-disk domain_name      #附加一个磁盘到一个domain中

         virsh detach-disk domain_name     #从一个domain中移除磁盘

          注意:

                   centos5.x版本不支持在线调整cpu,内存等, 以下在centos6.x,7.x测试
                            centos6.x, 7.x平台下,cpu core数只能在线增加,不能在线减小
                            应注意你想要添加的硬件是临时生效,还是永久生效

          所以这里创建一个centos6.5的虚拟机:

virt-install --name "centos6.5" --vcpus=1 --ram=512 --disk=/images/kvm/centos6.img,size=10,bus=virtio --force --network bridge=virbr0,model=virtio --cdrom /opt/CentOS-6.5-x86_64-bin-DVD1.iso --graphic vnc,listen=0.0.0.0,port=5900 --os-variant=rhel6

          确保虚拟机处于running状态,然后使用qemu-img创建一个磁盘映像,然后使用virsh attach-disk命令添加给正在运行的虚拟机。

          技术分享图片

          在宿主机出现“Disk attach successfully”后,进入客户机操作系统查看

技术分享图片

          在客户机中可以看到,通过attach-disk命令附加的磁盘,可以像普通磁盘一样使用该磁盘,就不多演示了。

          下面,再动态移除之前添加的磁盘,使用virsh detach-disk命令。

技术分享图片

         成功移除磁盘后,在客户机中也没有了磁盘文件。另外,也可以将ISO文件附件到虚拟机中,这样就实现了挂载磁盘镜像的问题。

技术分享图片

         注意:上面的附加磁盘操作都是临时生效,待domain重启后就失去挂载的磁盘。要想附加的磁盘永久生效,有两种方法:

                    1)使用--persistent参数,比如:virsh attach-disk centos6.5 /images/kvm/test.img vdb --cache none --subdriver raw --persistent

                          --persistent 重启生效,相当于:-config --live

                    2)在添加磁盘成功后,导出xml文件。其实,就是使用attach-disk附加磁盘,然后使用virsh dumpxml domain_name > domain_name.xml,然后用这个新的xml文件创建虚 拟机。

                    3)使用xml文件进行attach-device操作。(这里实际上算介绍attach-device命令了)

                          首先,配置一个xml文件,添加需要配置的参数项,比如cache=none, io=native等。         

                         [[email protected] ~] # cat disk.xml

                         <disk type='block' device='disk'>

                         <driver name='qemu' type='raw' cache='none' io='native'/>

                         <source dev='/dev/CentOS_kvm/centos02_lij_data1'/>

                         <target dev='vdb' bus='virtio'/>

                         </disk>

                           然后,使用virsh attach-device命令添加,

                          virsh attach-device centos6.5 disk.xml --persistent

                          说明:attach-device才是更通用的添加硬件方法,添加硬件的同时可以配置相应参数,比如我们需要添加/dev/vg01/lv01这块新磁盘


附加或拆除网卡:

         virsh attach-interface  domain_name              #往一个domain中添加网卡

         virsh detach-interface domain_name              #从一个domain中移除网卡

         技术分享图片

         技术分享图片

         注意:使用attach-interface和附件磁盘是一样的,都是暂时保存,重启后失效,如果想永久生效,可参照上面附件磁盘的方法,不再赘述。


调整cpu:

         virsh setvcpus domain_name vcpus_num --config --live       #使用--config --live 使修改永久生效

         例如:virsh setvcpus centos6.5 2 --config --live

         技术分享图片

         注意:centos5.x不支持调整cpu、内存等,需要在centos6.x及以上版本中操作;

                   设置cpu数量不能超过domain的配置文件中设定的maxvcpus的值,不然会失败。

     

调整内存:

         virsh setmem domain_name mem_num

         例如:virsh setmem centos6.5 512M     #临时设置内存为512M

                   virsh setmem centos6.5 786M --config --live    #永久设置内存为786M

         技术分享图片

         注意:能够调整的内存最大值不超过xml文件中内存设置的值。

                   内存能够在线调整的原理是利用了virtio-balloon技术。

         扩展:

                   virtio-balloon气球内存技术:它可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机

                   该技术能够实现:

                          <1>当宿主机内存紧张时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放部分空闲内存。若其内存空间不足,可能还会回收部分使用中的内存,可能会将部分内存换到交换分区中;

                          <2>当客户机内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。

                    内存调整过程:

                           a. KVM 发送请求给 VM 让其归还一定数量的内存给KVM。

                           b. VM 的 virtio_balloon 驱动接到该请求。

                           c. VM 的驱动是客户机的内存气球膨胀,气球中的内存就不能被客户机使用。

                           d. VM 的操作系统归还气球中的内存给VMM

                           e. KVM 可以将得到的内存分配到任何需要的地方。

                           f. KVM 也可以将内存返还到客户机中。 


保存状态至磁盘文件或从磁盘文件恢复:

         virsh save domain_name           #保留一个正在运行的domain的RAM状态

         virsh restore domain_name       #恢复一个domain

技术分享图片

         例如:virsh save --bypass-cache centos6.5 /usr/src/centos6.5_snapshot_1 --running --verbose

                    --bypass-cache:避免在保存的时候文件系统缓存而保存不完全

                    --running:设置恢复后domain的运行状态是running

                    --verbose:显示保存的进度

          技术分享图片

         例如:virsh restore /usr/src/centos6.5_snapshot_1 --bypass-cache --running

                    --bypass-cache:避免在还原时发生文件系统缓存

                    --running:还原domain后进入running状态


暂停于内存或继续运行:

         virsh suspend domain_name          #挂起(暂停)一个domain

         virsh resume domain_name           #恢复一个domain

         技术分享图片

以上是关于使用libvirt命令行管理虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

virsh命令行管理工具

如何使用KVM libvirt命令管理虚拟机

KVM管理虚拟机命令

centos7虚拟机怎么安装kvm

KVM的管理命令

安装libvirt管理套件(C/S架构模式,用户管理kvm虚拟机)