我有一台虚拟机,它以 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