![如何在删除快照后恢复 qcow2 文件中的空间,同时保留剩余的快照?](https://linux22.com/image/770381/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%88%A0%E9%99%A4%E5%BF%AB%E7%85%A7%E5%90%8E%E6%81%A2%E5%A4%8D%20qcow2%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%A9%BA%E9%97%B4%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BF%9D%E7%95%99%E5%89%A9%E4%BD%99%E7%9A%84%E5%BF%AB%E7%85%A7%EF%BC%9F.png)
我有一台虚拟机,它以 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