直接看df -i是唯一可靠命令,紧盯iuse%列≥95%即需排查,逐查mounted on各挂载点(含/tmpfs),用du --inodes -s比find | wc -l更准,清理前须用lsof +l1查已删未释文件。

直接看 df -i,这是唯一可靠、开箱即用的命令。别信 df -h 显示的“空闲空间”,它和 inode 是否够用完全无关。
怎么一眼看出哪个分区 inode 快没了
运行 df -i 后,紧盯 IUse% 列:
- ≥95% 就得动手查,不能等 100% ——很多服务在 98% 时就开始报错
-
Mounted on列要逐个看,比如/var或/home是独立挂载点,它们的 inode 池互不干扰 -
tmpfs和devtmpfs也占 inode,df -i一样会列出来,别漏掉
为什么 du --inodes 比 find | wc -l 更准
du --inodes 统计的是目录自身 + 所有子孙项占用的 inode 总数;而 find /path -type f | wc -l 只算普通文件,漏掉目录、软链接、设备文件等——这些也都各占一个 inode。
- 快速扫描一级子目录:
du --inodes -s /var/* 2>/dev/null | sort -nr | head -5 - 结果第一列是 inode 数,第二列是路径,数值异常高就进去深挖
- 加
2>/dev/null是为了屏蔽权限不足导致的报错,避免干扰排序
清理前必须确认的三件事
删文件 ≠ 立刻释放 inode,尤其在生产环境:
- 先用
lsof +L1查有没有“已删但未释放”的文件(状态为DEL),常见于 Java 日志、Nginx 访问日志被轮转后没 reload - 进高 inode 目录后,用
ls -U | head -20看文件名时间戳是否密集(比如全是同秒生成),这大概率是失控的 cron 脚本在写临时邮件或日志 - 删小文件别用
rm *——容易触发Argument list too long,改用find /path -maxdepth 1 -type f -delete或find /path -name "sess_*" -print0 | xargs -0 rm -f
真正难处理的不是磁盘满,而是那个每分钟新建一个空文件却没人管的定时任务;它往往藏在 root 的 crontab 里,名字朴素如 sync.sh,不翻日志根本找不到。











