译者:赵青窕
本文将介绍导出KVM虚拟机磁盘和配置的步骤,然后将它们导入同一台机器或不同的机器中。我还将向您展示如何使用Bash脚本导出和导入KVM虚拟机。
1.前言
最近,我将我的虚拟机管理程序从OracleVirtualBox切换到了KVM,因为它具有原生特性和性能。我实测发现,与VirtualboxVM相比,KVM虚拟机运行得更快。
定期备份您的虚拟机是非常有必要的。假如我们的KVM出现任何异常情况,我们就可以使用备份的KVM来恢复虚拟机。导出和导入KVM虚拟机是不同的两个过程。
首先,您必须检查磁盘映像的存储位置并将磁盘映像复制到备份位置。
其次,导出机器配置,以便以后用于创建域。
2.虚拟机的配置
有两种获取虚拟机配置信息的方法。你可以使用“Virsh”或者“Virt-manager”。
你可以使用Virt-manager或执行命令virsh获取虚拟机的名称。
复制
$virshlist--allIdNameState------------------------------------Linux_Mint_20shutoffmxlinuxshutoffpopos_21_10shutoffrocky_linux_8shutoffubuntu20.04shutoffubuntu20.04-cloneshutoff1.2.3.4.5.6.7.8.9.
当需要查看某个虚拟机的整个信息(即虚拟机配置)时,可以执行以下命令。该命令会以XML的格式来显示结果。
复制
$virshdumpxmlvm_name
less$virshdumpxmlubuntu20.04-clone
less1.2.
您还可以通过管道连接到grep命令来获取特定的机器配置。假设您想查看内存分配情况,那么可以运行以下命令。
复制
$virshdumpxmlubuntu20.04-clone
grep-i"MEMORY"memoryunit=KiB/memorycurrentMemoryunit=KiB/currentMemory1.2.3.
如果您更喜欢使用Virt-manager工具,那么您可以通过“虚拟硬件详细信息窗口(showvirtualhardware)”选项中的XML子选项来获取以XML格式显示的虚拟机配置信息。
3.虚拟机磁盘位置
虚拟机的磁盘以qcow2格式创建。默认情况下,虚拟机磁盘存储在/var/lib/libvirt/images/目录中,除非您明确指定了磁盘路径。
运行以下命令获取磁盘目录路径。
复制
$virshdumpxmlubuntu20.04-clone
grep-i"source"sourcefile=/var/lib/libvirt/images/ubuntu20.04-clone.qcow2/1.2.
如果您使用的是Virt-manager工具,可以通过上图中的disk选项来查看虚拟机磁盘信息。
您使用了不同的路径来存储磁盘映像,并且希望知道所有VM磁盘路径,那么您可以在终端或shell脚本内运行以下代码片段:
复制
$virshdumpxmlubuntu20.04-clone
grep-i"source"sourcefile=/var/lib/libvirt/images/ubuntu20.04-clone.qcow2/1.2.
4.导出配置信息并备份磁盘镜像
现在您已经知道了如何获取磁盘路径和虚拟机的配置信息,接下来就可以导出VM的配置信息并将磁盘镜像复制到不同的位置。
要导出虚拟机信息,可以运行以下“virshdumpxml”并将输出存储在XML文件中。
复制
$virshdumpxmlvm-name/path/to/xm_file.xml$virshdumpxmlubuntu20.04-clone~/Documents/ubuntu.xml1.2.
接下来,我们使用下面的命令将磁盘映像复制到其他位置,以便以后使用。
复制
$sudocp/var/lib/libvirt/images/ubuntu20.04-clone.qcow2~/Documents/1.
这样,导出KVM已经完成了。
注意:您应该使用sudo或使用root用户复制磁盘,因为磁盘归root用户所有。
5.导入虚拟机
要导入KVM虚拟机,您必须运行以下命令,利用导出的XML文件重新定义一个虚拟机。
复制
$virshdefine--filepath-to-xml-file$virshdefine–file~/Documents/ubuntu.xml1.2.
现在,您可以检查Virt-manager或执行virsh命令,成功创建域。同时您必须将磁盘映像复制到XML文件中定义的目录路径。在我的环境中,它是默认位置/var/lib/libvirt/images/,因此我使用下面的命令进行复制。
复制
sudocp~/Documents/ubuntu20.04-clone.qcow2/var/lib/libvirt/images/1.
导入KVM到此就完成了。
6.导出和导入KVM虚拟机的Bash脚本
我已经创建了一个bash脚本,用于导出所有配置和磁盘映像。如果你感兴趣,你可以在我的GitHub库中查看这个脚本。同时希望您能提供改进脚本的建议。
复制
#!/usr/bin/envbash#----------------------------------------------------------------------------------------------------#AUTHOR:KARTHICKS#PURPOSE:THISSCRIPTWILLEXPORT/IMPORTTHECONFIGANDVMDISK.##usage:#exportfunctionwilltakecareofexportingthenecessaryforallVM.Runas"scriptname.shexport"#importfunctionwilltakecareofimportingthenecessaryforallVM.Runas"scriptname.shimport"##NOTE:Donotaddtrailing/forthedirectorywhengivingexportandimportpath.#------------------------------------------------------------------------------------------------------#Triggerthescriptwithrootuserorexit.if[[${UID}-ne0]];thenecho-e"[EXIT]-Runthescriptasrootuserorwithsudoprivilege..."exitfifunctionexport_vm(){#Gettheexportlocation.read-p"Providethedirectorypathwherediskandconfigfilestobeexported:"EXPORT_LOCATION#Createthedestinationdirectoryifnotexists.[[-d${EXPORT_LOCATION}]]
mkdir-p${EXPORT_LOCATION}#Exportingtheconfigusingvirshdumpxml