Linux 磁盘空间告急:五个命令快速定位大文件与目录

举报
yd_99838092 发表于 2026/11/03 07:52:54 2026/11/03
【摘要】 磁盘告警时不要急着删文件。按 df、du、find、lsof 固定顺序排查,能快速定位大目录、大文件,以及已删除但仍被进程占用的空间。

线上服务突然写不进日志,或者数据库告警磁盘使用率超过 90%,第一反应往往是“先删点东西”。但盲目删除风险很高,删错一个目录就可能影响业务。正确的做法是按固定顺序定位空间到底被谁占用了。


一、先用 df 确认是哪个挂载点满了


执行 df -h,重点看 Use% 和 Mounted on 两列。很多时候根分区满了,但数据其实在 /data 或者容器 overlay 目录里。先确认挂载点,后面的排查才不会跑偏。


如果发现某个目录的容量和实际使用对不上,可以再看 df -i。inode 耗尽也会表现为“磁盘还有空间却写不进去”,典型原因是某个目录下有海量小文件。


二、用 du 按目录逐层下钻


进入占用最高的挂载点,执行 du -xh --max-depth=1 . | sort -rh | head -20。参数含义是:-x 不跨文件系统,-h 人类可读,--max-depth=1 只看一层。找到最大的子目录后进入它,重复同样的命令,通常三轮就能定位到具体目录。


不建议直接对根目录跑 du -sh /*,遇到网络挂载或权限受限目录会很慢,还可能刷屏报错。


三、用 find 找单个大文件


目录级排查完成后,再找单个大文件:find /data -xdev -type f -size +500M -printf '%s %p\n' | sort -rn | head -20。这样可以快速发现忘记清理的备份包、core dump 或异常膨胀的日志。


四、检查已删除但未释放的文件


这是最容易被忽略的一类:文件已经删了,df 显示空间没变。原因是进程还持有文件句柄。执行 lsof +L1 或 lsof | grep deleted,找到对应进程后重启它,空间才会真正释放。对日志类文件,也可以考虑用 truncate -s 0 而不是直接 rm,避免句柄继续占用。


五、确认日志是否在正常轮转


如果占用最大的总是 .log 文件,说明轮转策略缺失。检查 logrotate 配置,确认 rotate 次数、单文件大小上限和压缩开关。容器场景还要注意日志驱动,json-file 默认不限制大小,需要在 daemon.json 里配置 max-size 和 max-file。


六、收尾建议


定位完成后先处理风险最低的:过期备份、临时文件、旧版本安装包。业务数据目录在删除前一定要确认备份与保留策略。最后把这次排查用到的命令整理成脚本,加进巡检任务,比等到告警再处理更省事。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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