kvm总结(3) : 导入虚拟机
前文中,我们创建了两个虚拟机,kvm1和kvm2,kvm1是通过图形化界面创建的,kvm2是通过纯命令行的方式创建的,在创建kvm2时,我们只指定了必要参数,并且提到,这样创建出的虚拟机,性能比较一般,那么怎样创建虚拟机,性能会比较强劲一点呢?现在咱们就来聊聊。
上一篇文章中创建虚拟机的命令如下
上述命令只使用了必要参数创建了虚拟机,这种情况下,默认是使用”全虚拟化”的方式创建的虚拟硬件,”全虚拟化”是以纯软件的方式来模拟硬件设备的,如果虚拟机系统(客户机)支持virtio驱动,则可以使用”半虚拟化”的方式创建虚拟机硬件,virtio的”半虚拟化”省去了”全虚拟化”中异常捕获的环节,可以理解为操作路径更短了,所以在IO性能上有所提升,但是使用的前提是客户机支持virtio驱动。
centos7是默认集成了virtio驱动的(RHEL4.8以后自带virtio驱动),在虚拟机中使用如下命令进行确认,查看是否包含virtio模块。
所以,当虚拟机是centos7时,不用额外安装任何驱动,如果想要创建windows虚拟机,则需要下载virtio-win驱动,并安装到windows虚拟机中以后,才能将驱动模式改为virtio,否则无法使用virtio模式启动虚拟机。
查看kvm2虚拟机的配置文件,可以看到硬盘和网卡的配置如下(省略了其他信息)
如上例所示,硬盘的bus总线类型为ide,网卡的类型为rtl8139,这些都是使用全虚拟化驱动默认创建出的硬件类型,我们现在就来把它改成virtio半虚拟化驱动,先来看看图形化的操作,我已经将kvm2停机了,点击下图中的open按钮,
然后点击下图中的“灯泡”按钮,查看kvm2的详细配置,
点击IDE Disk1,这个就是默认创建的网卡,点开下图中的advanced options,即可看到,硬盘的bus类型是IDE,点开下拉框,选择VirtIO,选择后,点击右下角的Apply按钮确定应用。
硬盘修改完并确定应用后,可以看到,硬盘已经从IDE Disk变成了Virtio Disk,点击网卡配置,将默认的硬件模式从rtl8139改成virtio,修改完成后,点击apply保存应用
完成上述操作后,就已经将硬盘和网卡的驱动模式改为virtio了,此时查看对应的配置文件,也是一样修改为virtio的,正如之前所说,使用图形化修改虚拟机配置,和使用virsh edit命令修改配置文件在本质上是一样的。
如果使用命令安装虚拟机时就想指定使用virtio模式的驱动,也可以在命令中指定磁盘的bus和网卡的model,示例如下:
到目前为止,我们已经学会了创建、查询、修改虚拟机,但是我们还没有删除过虚拟机,现在就来试试通过命令删除虚拟机。
查看当前的虚拟机,我已经停止了kvm2,如下
使用virsh undefine命令,即可删除对应的虚拟机,如下
删除后,通过virsh list命令就看不到对应的虚拟机了,查看/etc/libvirt/qemu目录,会发现kvm2.xml文件已经没有了,但是,查看/var/lib/libvirt/images/目录,还可以看到对应kvm2.qcow2文件,如下
也就是说,kvm2的虚拟机镜像文件还是存在的,我们可以手动删除这个文件,就相当于彻底删除了kvm2虚拟机(如果想要同时删除配置文件和对应的磁盘,可以在undefine命令中加入–remove-all-storage参数,但是这样操作风险较大,不推荐使用),只删除xml配置文件的情况下,磁盘镜像可以留作备份,等待需要的时候,再次导入,当然,这个文件也可以在其他kvm宿主机上导入(相当于迁移),导入命令如下
没错,仍然还是使用virt-install命令导入镜像,–import选项表明是导入操作,上述命令中的虚拟机的名称、内存和cpu设置、网络、硬盘、驱动都可以在导入时根据情况进行设定,换句话说就是,即使创建kvm2时设置了2G内存,如果在导入镜像时,想要分配4G内存,那么只要在导入时指定–ram 4096就行了,并不一定要和原配置保持一致,我在导入时就指定使用了virtio模式驱动,这是因为我确认虚拟机使用的是centos7.9的系统,不用额外安装任何驱动。
由于我们在创建kvm2虚拟机时配置了虚拟终端(使用了–extra-args=’console=ttyS0’参数),所以在导入虚拟机时我指定了–nographics选项,–nographics选项表示使用非图形化的console连入虚拟机(但是前提是我们确定已经为虚拟机配置好了终端),如果你在服务器的桌面环境(图形化环境)中执行上述命令,或者配置好了x11forward,可以省略–nographics选项,默认情况下会为我们分配一个virt-view图形化控制台,我们也可以通过这个图形化控制台连入导入的虚拟机。
如果我们使用的是纯远程的ssh客户端,并且不支持xwindow(x11forward)的转发,在执行上述命令时也无法使用–nographics选项,那么在导入时可能会卡在如下图中的位置
在这种情况下,去服务器中查看对应的虚拟机,很有可能是已经导入成功的,可以先关闭这个远程窗口,然后通过宿主机的图形化或者命令行窗口连入虚拟机。
如果我们压根就不想在导入虚拟机时连入控制台,则可以直接使用–noautoconsole选项,表示不会自动连入到虚拟机的控制台,示例如下
当导入成功以后,可以看到对应的虚拟机名称,而且kvm自动生成了对应的配置文件,也就是kvm2import.xml
查看配置文件,或者使用如下命令,可以看到,kvm2import虚拟机使用的磁盘镜像就是 /var/lib/libvirt/images/kvm2.qcow2,导入成功了
如果你和我一样,有点强迫症,觉得虚拟机名字和对应的磁盘文件名不一样,心里不爽。
可以先停止kvm2虚拟机,然后通过virsh domrename命令重命名kvm2import虚拟机,如下
如上所示,重命名完成后,虚拟机名称已经变成kvm2,并且对应的配置文件名也从kvm2import.xml变成了kvm2.xml
其实,如果已经有对应的xml配置文件,并且有对应的镜像文件,那么我们也可以直接通过define命令导入,为了方便示例,我先备份一下xml配置文件,操作如下
我备份了kvm2.xml的配置文件,现在使用undefine命令删除kvm2虚拟机的定义
如上所示,执行undefine命令以后,列表中已经看不到kvm2虚拟机了,现在我们将备份的xml文件名还原,然后通过define命令和配置文件,重新定义kvm2主机,让kvm2主机重新出现在列表中,操作如下
到目前为止,虚拟机的‘增删改查’我们都已经初步的接触到了,剩下的操作,我们之后再慢慢聊吧。