我在我的 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
而不在其下挂载任何内容。
文件大小报告的差异可能是由于稀疏文件或压缩文件的存在。您可以使用选项-A
来du
处理表观文件大小而不是磁盘使用情况,这也许可以解释一些差异。将其放入然后将其取出,然后比较结果。在我的约 3.6Gb/var
分区中,结果-A
大约小 100Mb。
答案2
您是否考虑过您可能有一个仍处于打开状态的未链接文件?尝试查看输出以lsof /var
查看是否列出了任何异常大的文件。
答案3
我遇到过类似的问题,磁盘消失了。挂载点仍然存在,但由于某种原因,文件被写入目录在包含挂载点的分区上。这可能不适用于您的操作系统,但启动救援系统并从那里仔细查看分区可能会揭示更多信息。