即使我的分区看起来没满,如何才能确定它已满?

即使我的分区看起来没满,如何才能确定它已满?

我在我的 FreeBSD 机器上运行了“df -kh”,发现 /var 已接近 100% 满。虽然已经满了,但我还是尽可能地减少了空间,但根据在 /var 中运行“du -ksh *”的结果,分区上的总空间不足 500MB。/var 分区本身有 6.8G,现在显示只有 18M 可用空间。这根本说不通。

我运行以下命令,没有发现任何罪魁祸首。

 find . -type f -size +2000 -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

我甚至使用“du -ksh *”逐个文件夹深入查找占用大量磁盘空间的文件夹,但我找不到它们加起来的总数。我想压缩、删除或移动文件以释放更多空间,因为其他分区有空间,但在 df 和 du 之间,我似乎找不到占用所有磁盘空间的文件夹。

我还应该做什么来找到占用所有空间的文件和文件夹?

答案1

我将运行以下命令,以便您获得所有可用文件的清晰快照:

du -kx /var | sort -n | tee /var/tmp/du_results.out

...然后看最后几百行。

这将捕获所有目录的大小(以捕获大量小文件),以及捕获普通大文件。请注意,我不是使用-h(人性化),以便结果能够轻松地按数字排序。另请注意,我没有使用/var/*,它也会拾取安装在 中的任何内容/var

可能的罪魁祸首包括(按可能性大致排序):

  • 过时的未链接文件。尝试 @not simon 建议的方法 ( lsof /var)。 /var/tmp有时是找到这些文件的明显位置。如果您尚未lsof安装,则可以使用fstat -f /var | sort -k 8 -n,它不显示文件名,但至少会显示大小(从最小到最大)、inode 以及哪个进程打开了文件。

  • 文件系统损坏。请fsck从单用户模式运行以检查/var

  • 隐藏在挂载点下的旧文件。如果 下有任何挂载/var,请卸载它们,然后再次运行搜索/诊断。执行此操作的最安全方法可能是以单用户模式启动,然后只挂载/var而不在其下挂载任何内容。

文件大小报告的差异可能是由于稀疏文件或压缩文件的存在。您可以使用选项-Adu处理表观文件大小而不是磁盘使用情况,这也许可以解释一些差异。将其放入然后将其取出,然后比较结果。在我的约 3.6Gb/var分区中,结果-A大约小 100Mb。

答案2

您是否考虑过您可能有一个仍处于打开状态的未链接文件?尝试查看输出以lsof /var查看是否列出了任何异常大的文件。

答案3

我遇到过类似的问题,磁盘消失了。挂载点仍然存在,但由于某种原因,文件被写入目录在包含挂载点的分区上。这可能不适用于您的操作系统,但启动救援系统并从那里仔细查看分区可能会揭示更多信息。

相关内容