inode耗尽是元数据资源枯竭,非磁盘空间不足;需用df -i确认IUse%≥95%或100%,再定位/tmp、/var/log等高文件数目录,清理小文件或已删未释文件,并通过logrotate、tmp自动清理和监控预防。

文件系统“过快变满”,不一定是磁盘空间真不够,更可能是元数据(尤其是 inode)被大量小文件迅速耗尽。这种问题常表现为:df -h 显示空间充足,但新建文件失败,报错“No space left on device”。核心矛盾在于:有空间存内容,却没位置记档案。
确认是否为 inode 耗尽
运行 df -i 查看各挂载点的 inode 使用率:
- IUse% 达到 95% 以上需警惕,100% 则无法创建任何新文件(包括临时文件、日志、上传缓存)
- 重点关注 /tmp、/var/log、/var/spool、/var/cache 等易产生海量小文件的目录所在分区
- 注意:/dev/sda1 和 /dev/sdb1 的 inode 总数可能差异很大,不能只看百分比,也要看 IFree 绝对值是否已逼近 0
定位 inode 占用大户
不是找“大文件”,而是找“多文件”的目录:
- 快速扫描一级子目录下的文件总数:
for d in /var/*; do [ -d "$d" ] && echo "$d $(find "$d" -maxdepth 1 -type f 2>/dev/null | wc -l)"; done | sort -k2 -nr - 深入排查典型高危路径:
find /var/log -xdev -type f | cut -d/ -f4 | sort | uniq -c | sort -nr | head -10(查看哪个服务日志目录文件最多) - 检查被删除但未释放的文件(仍占 inode):
lsof +L1或lsof | grep deleted | awk '{print $1,$2,$9}' | sort -u
针对性清理与预防
找到源头后,清理要精准,避免误删;预防要从机制入手:
- 清理 /tmp:优先用
find /tmp -mtime +1 -type f -delete,避免直接rm -rf /tmp/*(可能删掉正在使用的 socket 或 lock 文件) - 归档或轮转日志:对高频写入服务(如 Nginx、Java 应用),配置
logrotate限制单个日志大小和保留天数,禁用无限制追加 - 调整 tmp 目录自动清理策略:RHEL/CentOS 7+ 修改
/usr/lib/tmpfiles.d/tmp.conf中v /tmp 1777 root root 10d的保留时间;Debian/Ubuntu 检查/etc/default/rcS的TMPDIR设置 - 监控告警:在 Zabbix 或 Prometheus 中添加
df_inode_used_percent指标,阈值设为 85%,早于业务影响前介入
inode 耗尽不是容量问题,是结构问题。盯住文件数量而非体积,才能真正治本。


















