Linux 磁盘空间告急:五个命令快速定位大文件与目录
线上服务突然写不进日志,或者数据库告警磁盘使用率超过 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。
六、收尾建议
定位完成后先处理风险最低的:过期备份、临时文件、旧版本安装包。业务数据目录在删除前一定要确认备份与保留策略。最后把这次排查用到的命令整理成脚本,加进巡检任务,比等到告警再处理更省事。
- 点赞
- 收藏
- 关注作者
评论(0)