如果不删除所需快照,则无法从 qcow2 映像中恢复空间

如果不删除所需快照,则无法从 qcow2 映像中恢复空间

我有一台虚拟机,它以 5 个快照 1、2、3、4、5 启动。

我使用 qemu-img 删除了快照 1、2、3。快照 4 和 5 仍然需要,因此没有被删除。

如何释放快照 1、2、3 占用的空间并保留快照 4 和 5?

我花了很多时间寻找解决方案,我尝试过的解决方案得到了以下结果:

  • 使用 qemu-img 转换(已删除需要的快照) qemu-img 转换 -O qcow2 Linux.qcow2 Linux_s.qcow2 减少 Linux.qcow2 使用的空间,但删除快照 4 和 5。

  • 使用 virt-sparsify(不恢复任何空间) cp Linux.qcow2 TEST.qcow2 sudo virt-sparsify --in-place TEST.qcow2

    保留两个未删除的快照,但不恢复快照 1、2、3 原来占用的空间。

如何在删除快照后恢复 qcow2 文件中的空间,同时保留剩余的快照?

我很难理解为什么没有一个简单的方法来实现这一点,也没有明确的记录

编辑:有没有办法将快照 4 复制到新文件作为快照,然后添加快照 5 的增量。然后我就可以丢弃浪费空间的额外文件。

答案1

不幸的是,删除快照不会将 QCOW2 文件缩小到其最大允许的逻辑大小以下。

使用 2 GB 最大逻辑大小文件作为示例:

  • 如果由于快照的原因,其当前实际大小超过了 2 GB(即:3 GB),则删除以前的快照将使其缩小到 2 GB(如 所报告的du -hs,同时ls -al继续显示其“扩大”的大小);

  • 如果其当前大小小于 2 GB,则删除快照将不是释放任何额外的空间(除非用来qemu-img convert创建一个新的、缩小的文件)。

这就是 Red Hat 不建议在生产工作负载中使用内部 QCOW2 快照的原因之一:虽然非常方便且易于使用,但它们的灵活性不如外部快照(而且有点“不透明”)。

相关内容