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

Ric*_*ath 3 ext4 disk-usage files

我最近收到 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 文件夹时搞砸了一些东西。有什么方法可以回收我认为可以通过删除文件获得的空间吗?

der*_*ert 5

这里似乎有两种可能性:

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

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

\n\n

令人困惑的df行为

\n\n

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

\n\n
Filesystem      Size  Used Avail Use% Mounted on\n/dev/md10       248M  236M  1.0K 100% /boot\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
Filesystem      Size  Used Avail Use% Mounted on\n/dev/md10       248M  248M     0 100% /boot\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

结论:当您想查看实际释放了多少空间时,请查看列Used\xe2\x80\x94not Avail,而不是Use%

\n\n

不是最后一个硬链接

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

一般说明

\n\n

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

\n\n

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

\n