如何在virt-clone VM之后保留(导入)KVM快照?

时间:2017-04-17 17:35:27

标签: snapshot kvm

示例:

virt-clone --connect=qemu:///system -o winxp_sp3_00 -n winxp_sp3_03 -f /opt/vme/winxp_sp3/winxp_sp3_03.updated.qcow2

我有一个新的域名winxp_sp3_03,其中qcow2克隆了快照:

qemu-img info  winxp_sp3_03.updated.qcow2

image: winxp_sp3_03.updated.qcow2
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 8.2G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         winxpsp3_basic            0 2017-04-14 23:44:14   00:00:00.000
2         winxpsp3_pajno            0 2017-04-16 02:12:27   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: false

但是virsh没有显示快照:

virsh snapshot-list winxp_sp3_03
 Name                 Creation Time             State
------------------------------------------------------------

让virsh识别这些快照的安全方法是什么?

THX

2 个答案:

答案 0 :(得分:1)

virt-clone从qcow2文件中删除某些元数据。如果使用virt-clone克隆vm,则会从磁盘文件中删除snapshot tags的元数据,因此您无法使用redefine定义xml快照来自消息来源。好吧,从技术上讲,你可以,但他们只会指出重新定义快照时vm的状态。快照将显示在计算机上,但在恢复后您将无法看到实际的预期快照。

在与qemu进行了几天的摔跤并浏览了数百页的文档后,我提出了以下方法:

我们需要xml定义来定义目标vm。让我们使用virt-clone生成xml定义。

virt-clone --original $Source_VM_Name --name $Destination_VM_Name --file /var/lib/libvirt/images/$Destination_VM_Name.qcow2 --print-xml > $Destination_VM_Name.xml

上面的命令只生成一个xml定义而没有实际克隆vm。

使用Linux cp命令复制qcow2磁盘。调整命令以指向系统上正确的磁盘文件。

cp $Source_VM_Name.qcow2 $Destination_VM_Name.qcow2

现在您必须重置目标磁盘文件的配置:

virt-sysprep -a $Destination_VM_Name.qcow2

请注意,您可能需要使用sudo作为上述命令,具体取决于您的配置。此命令重置UUID,MAC地址和其他需要在目标虚拟机中重置的元素。

我们将使用步骤文件中生成的xml文件,以便使用virsh命令定义目标计算机:

virsh define $Destination_VM_Name.xml

我们现在有一个功能VM,我们需要在此步骤从源vm导出快照定义。

virsh snapshot-list $Source_VM_Name --tree

此命令将列出源VM的快照。

对于此树中列出的每个快照:

virsh snapshot-dumpxml $Source_VM_Name $Snapshot_Name --security-info > Snapshot_Name.xml

我们需要更改快照xml定义中的UUID和域名。

nano Snapshost_Name.xml

更改

<domain type='kvm'>
  <name>$Source_VM_Name</name>
  <uuid>$Source_UUID<uuid>

<domain type='kvm'>
  <name>$Destination_VM_Name</name>
  <uuid>$Destination_UUID<uuid>

同时将MAC地址字段更改为目标MAC地址:

<mac address='$Destination_MACADDRESS'/>

并将后备磁盘文件更改为目标磁盘文件:

<source file='/var/lib/libvirt/images/$Destination_VM_Name.qcow2'/>

现在重新定义克隆VM的每个快照。

virsh snapshot-create $Destination_VM Snapshot_Name.xml --redefine

请注意,重新定义快照的顺序很重要,某些快照可能是其他人的快照。从树的根部开始到树叶。

如果您正在使用virt-manager,请关闭它,再次打开,您应该看到快照。

答案 1 :(得分:0)

virsh snapshot-list winxp_sp3_10l_sc_99

virsh snapshot-dumpxml winxp_sp3_10l_sc_99 1497601133&gt; snapshot.xml

- 根据转储的snapshot.xml创建快照

virsh snapshot-create --domain winxp_sp3_10l_sc_01 snapshot.xml