Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

20.13.2. 通过隔离镜像来缩短反向链

virsh blockpull 可在以下应用程序中使用:
  1. 通过使用来自其后备镜像链的数据填充镜像,以将其扁平化。使镜像文件自我包含,使其不再依赖于后备镜像,如下所示:
    • 前:base.img containerruntime 活跃
    • 之后:guest 和 Active 不再使用 base.img,Active 包含所有数据。
  2. 备份镜像链的扁平化部分。这可用于将快照扁平化到顶级镜像,如下所示:
    • 前:基本 containerruntime sn1 containerruntimesn2 containerruntime active
    • 之后:base.img containerruntime 活跃。请注意,当前活动 现在包含来自 sn1sn2 的所有数据,并且 guest sn1 和 sn2 均没有使用 sn2。
  3. 将磁盘映像移到主机上的新文件系统中。这允许在客户端运行时移动镜像文件,如下所示:
    • before(原始镜像文件 ):/fs1/base.vm.img
    • 之后: /fs2/active.vm.qcow2 现在是新文件系统,不再使用 /fs1/base.vm.img
  4. 通过后复制存储迁移,在实时迁移中非常有用。磁盘镜像会在实时迁移完成后从源主机复制到目标主机。
    在这里,会发生:前:/source-host/base.vm.img After:/destination-host/active.vm.qcow2./source-host/base.vm.img 不再被使用。

过程 20.2. 如何通过扁平化数据来缩短后备链

  1. 在运行 virsh blockpull 之前创建快照可能会有帮助。为此,请使用 virsh snapshot-create-as 命令。在以下示例中,将 guest1 替换为您的客户端虚拟机的名称,并将 snap1 替换为您的快照的名称。
    # virsh snapshot-create-as guest1 snap1 --disk-only
  2. 如果链看起来像是这样: 基本 REPOSITORY snap1 snap1 containerruntime 活动,请输入以下命令,将 guest1 替换为您的客户端虚拟机和 path1 的源路径(例如/home/username/VirtualMachines/* )。
    # virsh blockpull guest1 path1
    此命令将 snap1 的备份文件从 snap2 提取到活跃状态,从而使数据从 snap2 拉取到活动中,从而使数据成为活动的基础
  3. virsh 块拉取 完成后,在链中创建额外镜像的快照的 libvirt 跟踪将非常有用。使用这个命令删除过期的快照的跟踪,将 guest1 替换为您的 guest 虚拟机的名称,snap1 替换为快照的名称。
    # virsh snapshot-delete guest1 snap1 --metadata
可以按照如下所示执行 virsh blockpull 的其他应用程序:

例 20.31. 如何扁平化一个镜像并使用其后备镜像链中的数据进行填充

以下示例在 guest guest1 上扁平化 vda 虚拟磁盘,并使用其后备镜像链中的数据填充镜像,等待填充操作完成。
# virsh blockpull guest1 vda --wait

例 20.32. 如何扁平化后备镜像链的一部分

以下示例基于 /path/to/base.img 磁盘镜像在 guest1 上扁平化 vda 虚拟磁盘。
# virsh blockpull guest1 vda /path/to/base.img --base --wait

例 20.33. 如何将磁盘镜像移动到主机上的新文件系统中

要将磁盘映像移动到主机上的新文件系统中,请运行以下命令:在每个命令中,将 guest1 替换为您的客户机虚拟机和 disk1 的名称,替换为您的虚拟磁盘的名称。更改 XML 文件名和快照位置和路径:
# virsh snapshot-create guest1 --xmlfile /path/to/snap1.xml --disk-only
# virsh blockpull guest1 disk1 --wait

例 20.34. 如何在后复制存储迁移中使用实时迁移

要在 post-copy 存储迁移中使用实时迁移,请输入以下命令:
在目标上,输入以下命令将后备文件替换为主机上的后备文件的名称和位置。
# qemu-img create -f qcow2 -o backing_file=/source-host/vm.img /destination-host/vm.qcow2
在源上输入以下命令,将 guest1 替换为您的客户端虚拟机的名称:
# virsh migrate guest1
在目的地中,输入以下命令,将 guest1 替换为您的客户端虚拟机的名称,并将 disk1 替换为您的虚拟磁盘的名称:
# virsh blockpull guest1 disk1 --wait