Linux 磁盘空间告急:从 df 到 ncdu 的排查与清理实战
磁盘空间告急是最常见的半夜报警:服务写不进日志、数据库拒绝写入、上传直接失败。慌着删文件之前,先定位——很多时候罪魁祸首只有一个大目录,找对它十分钟就能恢复。
第一步:df 看总量,确认是哪块盘
先跑 df -h,看哪个挂载点用了 100%。根分区满和数据盘满是两回事:根分区满先查 /var/log 和 /tmp,数据盘满先查业务目录。顺手跑 df -i 看一眼 inode:文件数耗尽时磁盘明明还有空间,照样写不进去,这种情况删大文件没用,得清掉成千上万的小文件。
第二步:du 逐层下钻,找到大目录
从根目录开始,du -h --max-depth=1 / | sort -rh | head,看哪一项最大,再进那一级继续下钻。两次下钻基本就能锁定目录。注意 du 看到的是实际占用,删了文件但进程还占着句柄时,空间不会释放——lsof | grep deleted 能找出这些"已删未放"的文件,重启对应进程才是正解。
第三步:ncdu 交互定位,快得多
经常排查的话装一个 ncdu:ncdu / 一打开就是按大小排好的目录树,方向键进出、d 直接删。比 du 一层层敲命令快得多,适合不熟悉目录结构的机器。删之前先确认目录归属,系统目录和数据库数据目录不要手滑。
第四步:日志是头号嫌疑犯
大多数磁盘爆满都是日志。journalctl --disk-usage 看 systemd 日志占了多少,journalctl --vacuum-size=500M 能立刻回收。应用日志看 logrotate 配没配好:没配的服务日志会无限长,配好轮转加压缩,保留 7 天基本够用。Docker 环境别忘了 docker system df,悬空镜像和没清的日志经常悄悄吃掉几十 GB。
第五步:治本——告警与配额
清完空间顺手做两件事:磁盘用量到 80% 就告警,别等到 100% 才处理;给日志目录和上传目录做定期清理脚本,放到 cron 里每周跑一次。磁盘满不是技术问题,是没人提前看一眼的问题。
总结一下顺序:df 定盘、du 下钻、ncdu 定位、日志先清、告警兜底。按这个流程走,磁盘告急从半夜抢修变成十分钟的常规操作。
- 点赞
- 收藏
- 关注作者
评论(0)