非常奇怪的文件大小(超过600 PB)在一个小文件系统上

我在一个大小约为200 GB的XFS文件系统上有一个文件。 这是包含KVM驱动的虚拟机的虚拟磁盘的QCOW2映像。 出了点问题(也许是qemu-kvm的一些小问题,我不确定),虚拟机崩溃了,现在我有一个文件,看起来像这样:

191090708 -rwxr--r--. 1 root root 737571587400425984 Oct 10 10:03 973d10e0-a5e3-4a59-9f98-4b9b9f072ade 

所以它仍然占用191090708块,但ls显示为656PB。

此外,我有另一个具有相同的历史,但在另一个文件系统(不是XFS,但GFS2)的文件:

 410855320 -rwxr--r--. 1 root root 7493992262336241664 Dec 13 2014 ac2cb28f-09ac-4ca0-bde1-471e0c7276a0 

它占用了410855320块,但ls显示为〜6.6艾字节。

你怎么看,删除这些文件是否安全? 谢谢!

PS定期拍摄快照非常棒! :)我不知道我会做什么没有他们。

我可以看到两个可能的原因让你看到这些文件大小:

  • 稀疏的文件
  • 文件系统损坏

稀疏文件是某些文件系统上的一项function,您可以在其中创build带有孔的文件。 没有物理空间分配给孔。 读穿过这些孔将一直返回NUL字节。

如果您所看到的是稀疏文件的原因,那么删除它们就像使用非稀疏文件一样安全。

如果您所看到的是文件系统损坏的原因,那么删除没有进行文件系统检查的文件是不安全的。 如果一个文件系统以多个文件声称占用相同空间的方式损坏,则删除这两个文件将导致这些块被释放。 一旦这些被释放的块被重用,腐败就会变得更糟。

如果您看到任何其他症状,使您认为文件系统可能已损坏,则应在删除文件之前强制对文件系统进行全面检查。

如果没有证据表明文件系统已损坏,并且文件看起来很稀疏,那么只要我不再需要这些文件就删除这些文件。

问题是您计算文件大小的方式。

一种方法是查看最后一个字节的偏移量(如ls)。 另一种方法是总结真正分配的块(如杜)。

如果可能是一个数据写在非常大的偏移量文件。 这意味着你的文件地址空间的主要部分没有被分配。 但是你仍然可以阅读它。