磁盘满了先别扩容:df -i 查 inode、du 找大文件的组合排查法
磁盘告警一来,很多人第一反应是扩容。其实扩容之前先花五分钟定位,往往能省下一笔费用,也能避免把真正的问题藏起来。磁盘满有两种完全不同的满法:空间满和 inode 满,表现都是写不进文件,但处理方法不一样。
第一步:先看两个 df
先同时跑 df -hT 和 df -i。df -hT 看每个挂载点的空间使用率和文件系统类型,df -i 看 inode 使用率。如果空间还有余量但 IUse% 到了 100%,那就是小文件太多,扩容空间没有用,要清理的是文件数量。反过来,空间 100% 但 inode 还有余量,才是真正的大文件问题。
第二步:用 du 逐层定位
不要一上来就全盘 find。先从根目录按一级目录汇总:
du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20
找到最大的目录后,再对它做下一层,直到定位到具体的目录。定位时加 -x 很重要,du -x 可以不跨文件系统,避免把挂载的其他盘也算进来,误判根分区的占用。
第三步:先认清楚大户再动手
常见的几类大户要分开处理。日志目录要先看轮转配置,而不是直接删正在写的文件;备份目录要先核对保留策略和最近一次成功备份;临时目录要先确认没有正在运行的任务在用;应用的缓存目录要先确认清掉后是否可以重建。删之前,先用 ls -lh 和文件时间确认这确实是旧文件。
第四步:删除正在写的文件要小心
对正在被进程写的文件,直接 rm 往往不会立即释放空间,因为文件句柄还在进程手里,空间要等进程退出才释放。更稳妥的做法是先确认进程和文件关系,可以用 lsof 看到被删除但仍占用的文件,再决定是重启服务,还是先用截断方式清空。生产环境上,任何删除动作都应该先列出待删清单,宁可先压缩归档再删除,也不要批量删。
一个可复用的收尾清单
清理后重新跑 df -h 和 df -i,确认两个指标都回到安全区间;检查应用是否恢复写文件;把这次的大户写进巡检清单,比如日志轮转周期、备份保留天数、临时文件清理周期。下次再告警,先看指标、再定位目录、最后才决定是清理还是扩容,这样的顺序最省钱,也最不容易误删。
- 点赞
- 收藏
- 关注作者
评论(0)