Linux 磁盘空间排查:从 df/du 到定位大文件

举报
yd_297220493 发表于 2026/11/02 00:26:25 2026/11/02
【摘要】 磁盘满了不要先删文件:按 df 定分区、du 定目录、find 定文件的顺序排查,再确认已删除未释放、日志轮转、缓存备份等风险后再清理,并留好 80%/90% 告警防线。

磁盘空间告警是最常见的线上小故障之一,处理不好却很容易酿成大问题:服务写不进日志、数据库无法提交、部署直接失败。正确顺序不是一上来就删文件,而是先确认“满在哪里”,再确认“是谁占的”,最后才决定“能不能清”。

第一步:用 df 看全局

先用 df -h 看每个挂载点的使用率,重点看根分区和业务数据分区。只看百分比还不够,还要看剩余绝对值:一块 20G 的盘剩 5% 只有 1G,而一块 2T 的盘剩 5% 还有 100G,紧迫程度完全不同。

另外别忘了 df -i。文件数用尽时,即使还有磁盘空间也无法创建新文件,这种情况在小文件特别多的缓存、会话或日志目录里并不少见。

第二步:用 du 逐层下钻

确定了紧张的挂载点,再用 du 逐层缩小范围:

du -sh /var/* | sort -hr | head -20
du -h --max-depth=1 /var/log | sort -hr | head -20

注意 du 统计的是实际占用,和 ls -l 显示的大小可能不同,稀疏文件、硬链接都会造成差异。还有一个经典坑:挂载点目录下本来就有旧文件,被新挂载遮住后 df 看不到、du 也扫不到,卸载或检查挂载前目录时才能发现。

第三步:用 find 定位大文件

目录锁定后,再找具体文件:

find /var -type f -size +500M -exec ls -lh {} \;
find /var/log -type f -mtime +30 -ls

按大小找能快速发现单个大文件,按时间找则适合清理过期日志和临时产物。两者结合,比只凭感觉翻目录可靠得多。

四类最容易误伤的对象

第一是“已删除但仍被占用”的文件。进程还持有句柄时,rm 只是删了目录项,空间不会释放,lsof | grep deleted 可以看到它们。对这类日志,直接 > 文件名 截断往往比删除更安全,重启进程后空间才会真正释放。

第二是正在增长的日志。先确认日志级别和轮转配置是否合理,再考虑清理;只删不改配置,几天后还会满。

第三是包管理缓存、构建产物和旧版本备份,清理前确认是否还能回滚。

第四是 /tmp 和应用临时目录,有些文件看似无用,却可能是正在处理任务的中间结果。

收尾:清理后要留防线

清理完再跑一次 df -h,确认使用率确实下降,并观察一段时间是否反弹。更重要的是把告警阈值提前:80% 预警、90% 介入,配合日志轮转和定期清理策略,比每次都救火要省心得多。

一句话总结排查顺序:df 定分区,du 定目录,find 定文件,确认归属后再清理。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。