14.5.16. 使用 blockpull 进行反转链
blockpull 可以在以下应用程序中使用:
- 通过填充其后备映像链中的数据来扁平化镜像。这使得镜像文件本身包含,使它不再依赖于后备镜像,如下所示:
- before: base.img ":{ Active
- after: base.img 不再供 guest 使用,且 Active 包含所有数据。
- 扁平化后备镜像链的一部分。这可以用于在顶层镜像中扁平化快照,如下所示:
- 之前: base xetex sn1 xetexsn2 InventoryService active
- 之后,base.img protobuf active。请注意,活动现在包含来自 sn1 和 sn2 以及 sn1 和 sn2 的所有数据,客户机也未使用 sn1 和 sn2。
- 将磁盘镜像移到主机上的新文件系统中。这允许在客户机运行时移动镜像文件,如下所示:
- 之前(原始镜像文件):/
fs1/base.vm.img
- after:
/fs2/active.vm.qcow2
现在是新文件系统和/fs1/base.vm.img
不再被使用。
- 在通过复制后存储迁移进行实时迁移中非常有用。实时迁移完成后,磁盘镜像从源主机复制到目标主机。简而言之,会出现什么情况:
/source-host/base.vm.img
After:/destination-host/active.vm.qcow2
.qcow2 ./source-host/base.vm.img
不再使用。
过程 14.3. 使用 blockpull 进行反转链
- 在运行 blockpull 前运行这个命令可能会有帮助:
# virsh snapshot-create-as $dom $name - disk-only
- 如果链类似如下: base InventoryService snap1 mcm snap2 active,运行以下命令:
# virsh blockpull $dom $disk snap1
此命令使 'snap1' 后备文件从 snap2 拉取到 active,从而产生:base snap1 occurs active。 - 完成 blockpull 后,在链中创建额外镜像的快照的 libvirt 跟踪不再有用。使用这个命令删除过期快照的跟踪:
# virsh snapshot-delete $dom $name - metadata
blockpull 的其他应用程序可按照如下所示进行:
- 要扁平化单个镜像,并使用其后备镜像链中的数据进行填充:# virsh blockpull example-domain vda - wait
- 后备镜像链的 flatten 部分:# virsh blockpull example-domain vda - base /path/to/base.img - wait
- 要将磁盘镜像移到主机上的新文件系统中:# virsh snapshot-create example-domaine - xmlfile /path/to/new.xml - disk-only,后跟 # virsh blockpull example-domain vda - wait
- 将实时迁移用于复制后存储迁移:
- 在目的地运行时:
# qemu-img create -f qcow2 -o backing_file=/source-host/vm.img /destination-host/vm.qcow2
- 在源运行时:
# virsh migrate example-domain
- 在目的地运行时:
# virsh blockpull example-domain vda - wait