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

Vol*_*nyk 21 linux xfs ls gfs2 kvm-virtualization

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

191090708 -rwxr--r--. 1 root root 737571587400425984 Oct 10 10:03 973d10e0-a5e3-4a59-9f98-4b9b9f072ade
Run Code Online (Sandbox Code Playgroud)

因此,它仍然占用 191090708 个块,但ls显示为 656 PB。

此外,我还有另一个具有相同史前史的文件,但位于另一个文件系统(不是 XFS,而是 GFS2)上:

410855320 -rwxr--r--. 1 root root 7493992262336241664 Dec 13  2014 ac2cb28f-09ac-4ca0-bde1-471e0c7276a0
Run Code Online (Sandbox Code Playgroud)

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

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

PS 定期拍摄快照真是太好了!:) 我不知道没有他们我会做什么。

kas*_*erd 31

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

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

稀疏文件是某些文件系统上的一项功能,您可以通过它创建一个带有漏洞的文件。没有为孔分配物理空间。跨孔读取将一直返回 NUL 字节。

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

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

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

如果没有证据表明文件系统已损坏,并且文件看起来很稀疏,我会在不再需要这些文件时将其删除。


小智 6

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

一种方法是查看最后一个字节的偏移量(如 ls)。另一种方法是对真正分配的块(如 du)求和。

你看到的可能是一个以非常大的偏移量写入数据的文件。这意味着未分配文件地址空间的主要部分。但是你仍然可以阅读它。