删除文件后ext4磁盘空间未回收

删除文件后ext4磁盘空间未回收

我最近收到 2 Tb 外部 ext4 驱动器的“设备已满”警告。我删除了一堆文件,大约 90-100 GB 的旧系统备份,并且由于我不想清空所有垃圾,所以我从驱动器中删除了垃圾文件夹。然而,没有释放任何磁盘空间,删除 90-100Gb 后,我仍然只显示大约 5Gb 的可用空间。

我首先尝试重新启动以确保文件没有因某种原因保持打开状态。我尝试运行sudo e2fsck -fp /dev/sde1sudo e2fsck -f -D -C0 -E discard /dev/sde1但这些都没有显示任何磁盘空间。我检查了 inode 使用情况,使用了大约 0.3% 的总量。当我运行时sudo xdiskusage,它说 inode 已使用 93 GB。 man 说这是文件系统使用的开销。 93 GB 似乎是很大的开销,而且删除大约相同数量的文件会导致没有释放磁盘空间,我猜我在删除 trah 文件夹时搞砸了一些东西。有什么方法可以回收我认为可以通过删除文件获得的空间吗?

答案1

这里似乎有两种可能性:

  1. df您对根保留空间的(诚然令人困惑的)行为感到困惑
  2. 您删除了(取消链接)一个到文件的硬链接,还有更多。

就我个人而言,我怀疑你看到的是#1。详细信息如下,以及一些结论性意见。

令人困惑的df行为

如果您以非 root 用户身份完全填满文件系统,则如下所示:

Filesystem      Size  Used Avail Use% Mounted on
/dev/md10       248M  236M  1.0K 100% /boot

但有为 root 保留的空间,通常为 5%。如果 root 填满了它,则如下所示df(对于这个小型文件系统,又是 13 MB):

Filesystem      Size  Used Avail Use% Mounted on
/dev/md10       248M  248M     0 100% /boot

请注意,它从 100% 使用到... 100% 使用。尽管实际上还有 5% 被使用。字段Used如预期上升,但avail字段只是从 1K 变为 0。

当您删除前 13MB 数据时会发生什么?好吧,您回到第一个输出 — 您已经释放了 5%,但仍处于 100% 的使用状态,几乎没有可用的。

结论:当您想查看实际释放了多少空间时,请查看该Used列 - not Avail、 not Use%

不是最后一个硬链接

rm实际上并不删除文件。它取消它们的链接,即删除它们的硬链接。基本上,每个硬链接都会给文件一个名称。当文件没有留下任何链接(并且未打开等)时,只有那时该文件才会被实际删除。

实际上,文件在文件系统上是通过其索引节点号唯一标识的,无论其名称的数量有多少。如果您知道这些文件的索引节点号,则可以用来find -inum查找它们的所有硬链接,但您可能不知道。如果您有一些相关文件需要清理,您可以使用stat.然后,您可以用来find /path/to/mount -inum NUMBER查找该文件的所有硬链接(包括您刚刚统计的名称)。此外,一旦文件被实际删除,索引节点号就可以重新使用。

请记住:索引节点号是每个文件系统。那么两个不同的文件可以是两个不同文件系统上的 inode 42。只有在同一个文件系统上,inode 42 才能保证始终是同一个文件。此外,inode 编号并不总是适用于网络文件系统或非 Unix 文件系统。但你使用的是 ext4,这是肯定可以的。

除此之外,您只需要找到任何其他名称来删除正常的方式(例如,通过寻找大的东西,就像xdiskusage您已经在做的那样)

一般说明

垃圾文件夹只是目录。如果它们充满了您无法删除的垃圾,它们会显示在xdiskusage.

您应该考虑一个可以更好地为您删除旧备份的备份系统 - 手动执行此操作很容易出错。更糟糕的是,它也可能被遗忘,导致备份失败——而恢复通常是最近的数据(例如,意外删除、文件损坏、磁盘故障),而不是旧数据(“哦,是的,我确实需要去年删除的东西......”),因此“磁盘完整备份失败”意味着您实际上正在丢弃这最有价值数据(新备份)以保留最不有价值的数据(两年前的备份)。

相关内容