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

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

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

我用了qemu-img删除快照 1、2、3。快照 4 和 5 仍需保留,因此未被删除。

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

我花了很多时间寻找解决方案,我找到的解决方案可以分为以下两种模式之一:

使用 qemu-img 转换(删除了需要的快照)

qemu-img convert -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 文件中的空间,同时保留剩余的快照?

答案1

qcow2 文件是稀疏文件。在支持稀疏文件的文件系统上,它们占用的磁盘空间比文件大小要少得多。

如果删除快照,则报告的大小ls -l不会改变,但报告的磁盘上可用空间量df会改变。

几乎所有文件系统都支持稀疏文件。FAT 和 NFSv3 可能是唯一不支持稀疏文件的常见文件系统。

答案2

当你删除快照 1,2,3 时,文件确实被删除了,但这并不表示释放了空间,因为这不是真正的删除。文件只是被标记,以便删除能够快速完成。

如果你想要释放已删除快照的空间,你可以转换 qcow2 文件,但在此之前你必须通过 dd 命令将 qcow2 文件的内容填为 0:

$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk': No space left on device
$rm junk

然后转换 qcow2 文件

qemu-img convert -O qcow2  Linux.qcow2 Linux_s.qcow2

相关内容