我花了大约一周的时间试图弄清楚如何备份/恢复/恢复 virt-manager 虚拟机(包括所有快照)。
如果我检查 qcow2 文件,它包含制作的所有快照:
sudo qemu-img snapshot -l '../LinuxLiteV3.8.qcow2'
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 LinuxLite38_PreUD01 0 B 2020-11-06 23:37:14 00:00:00.000
2 snapshot1 0 B 2020-12-27 15:59:03 00:00:00.000
我可以将此文件带到 virt-manager 的另一个实例,并重新创建虚拟机,它将运行,但 virt-manager 似乎不知道快照。
由于原始虚拟机仍然存在(如有必要),我可以使用以下命令创建 xml 文件:
virsh dumpxml LinuxLiteV3.8 --security-info --migratable >LinuxLiteV3.8
virsh snapshot-dumpxml LinuxLiteV3.8 LinuxLite38_PreUD01 --security-info >LinuxLite38_PreUD01.xml
virsh snapshot-dumpxml LinuxLiteV3.8 snapshot1 --security-info >snapshot1.xml
但我不知道如何将定义导入 virt-manager。
IIUC virsh snapshot-create 将创建新快照而不导入现有快照。
此时,我正在尝试重新创建几台定义为 qemu:///system 的计算机,我想将其移动到 qemu:///session。我知道 virsh 有一个 -c 选项,允许在 qemu:///system 和 qemu:///session 之间进行选择,但我不知道如何导出/导入。
我还正在将系统迁移到新硬件,因此我需要能够在新安装的 virt-manager 上重新加载虚拟机及其快照。我假设这本质上是同一个问题,只是我在一个系统上导出并在另一个系统上导入。
最好只使用 qcow2 文件,但由于我仍然有原始的工作安装,所以我可以选择使用 xml 文件。
答案1
对于名为“sled9”的旧虚拟机(具有两个磁盘和两个快照),我执行了以下操作:
在源机器上:
~$ virsh dumpxml sled9 > sled9.xml
~$ virsh snapshot-list sled9
Name Creation Time State
--------------------------------------------------
snapshot1 2021-01-10 20:58:45 +0100 shutoff
vor grub 2019-05-03 12:43:30 +0200 running
~$ virsh snapshot-dumpxml sled9 snapshot1 > snapshot1.xml
~$ virsh snapshot-dumpxml sled9 'vor grub' > vor_grub.xml
将两个磁盘文件和三个 xml 文件复制到目标计算机上新创建的目录中/var/lib/libvirt/images/sled9
在目标机器上:
首先修改三个xml文件以反映磁盘文件的不同路径(从/var/lib/libvirt/images/local
到/var/lib/libvirt/images/sled9
)。仅当不同机器上的路径不同时,这才重要。然后
~$ virsh define sled9.xml
~$ virsh snapshot-create sled9 --xmlfile vor_grub.xml --redefine
~$ virsh snapshot-create sled9 --xmlfile snapshot1.xml --redefine
~$ virsh snapshot-list sled9
Name Creation Time State
--------------------------------------------------
snapshot1 2021-01-10 20:58:45 +0100 shutoff
vor grub 2019-05-03 12:43:30 +0200 running
目标机器上的virtmanager中显示了域,显示了快照,并且修改网络接口后可以正常启动VM,这在两台机器上是不同的。
以正确的顺序重新定义快照很重要,否则 virsh 会抱怨(缺少父级)。