我有一台虚拟机,它以 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 快照的原因之一:虽然非常方便且易于使用,但它们的灵活性不如外部快照(而且有点“不透明”)。