df 显示所有已占用的空间,但 du 不累加

df 显示所有已占用的空间,但 du 不累加

我在使用 Ubuntu 12.04 LTS 时遇到了问题。这是我在过去 3 周内第二次遇到此问题。第一次的描述见StackOverflow 上的这个封闭式问题。 这总结版本是我设法在 450G ext4 系统上使用所有 inode 编译和构建 Android 堆栈少于 20 次。

我以为通过将磁盘重新格式化为 XFS 以便 inode 存储可以增长,可以解决问题。

今天早上,经过一夜的构建后,我的可用空间已不足 1GB。这台机器上除了构建 Android 所需的东西外,没有其他东西。我总共在平台源上构建了 5 次。构建创建了一堆文件,然后我用 删除了它们make clean。我的可用空间实际上并没有少于 1GB,但工具报告的是这样。我删除了一堆临时文件,大约有 40GB 被“释放”。几个小时后,只是闲置,我的可用空间又回到了不到 1GB。

从闪存驱动器运行 Ubuntu 将返回分区的以下内容...

$ df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      468521456 468255460    265996 100% /media/f71c77eb-b4cc-

$ df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda5      1691760 624214 1067546   37% /media/f71c77eb-b4cc-

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5       447G  447G  260M 100% /media/f71c77eb-b4cc-

这是有问题的证据。当我运行du(使用和不使用 --apparent-size)或可视化磁盘使用情况分析器时,我发现我实际上只使用了大约 35GB 左右。98.7% 的已用空间在 中/home/eric,但du加起来却不是这样。差异在/home/eric和之间/home/eric/android

在此处输入图片描述

我已阅读了此处和 SO 上的相关问题,它们通常建议删除打开的进程所持有的文件。我重新启动闪存驱动器来运行此测试,因此不应该是打开的文件。FWIW,/tmp 是空的。

是否有可以安装在闪存驱动器上的工具来恢复“丢失”的空间?我可以尝试释放系统内存并在那里运行它,但我认为最好从闪存驱动器执行此操作。

我应该以不同的方式配置此系统吗?我不想再进行一次擦除和安装,但我需要一个可持续的 Android 构建系统。

跟进- 上周我不得不删除安装并重新安装 12.04 才能完成工作。本周我将再次进行 Android 构建,我会密切关注磁盘使用情况,并在了解更多信息后在此提供信息。

谢谢

答案1

在 Oracle Linux 上,当您删除(大量/大型)文件但仍由正在运行的进程打开时,就会发生这种情况。然后停止进程或重新启动机器会有所帮助。

答案2

我最近遇到了这个问题,就我而言,fsck需要运行。

我照做了touch /forcefsck && reboot,几分钟后,服务器就恢复在线,我丢失的 6 GB 突然就被释放了。

答案3

这通常是由目录中的文件引起的,而目录中还装载了不同的文件系统。典型的修复方法是使用救援磁盘启动,或在单用户模式下启动,然后清空目录,并确认它们未被用作挂载点(cat /proc/mountsdf -h)。

答案4

我们可以做一个测试,du假设你有 10GB 的可用空间,而df300 MB,你能写入一个(或几个)大小为 2GB 的文件吗?如果可以,那就意味着 df 完全是错误的(实际上不存在“丢失空间”的问题)。如果不能,那么du就是错误的(这将很有趣)。

相关内容