inode耗尽比磁盘满更隐蔽,需监控inode使用率而非仅容量;用df -i查使用率,find定位高文件数目录,配置监控告警与定时清理,并针对日志、容器、临时文件等根因优化。

Linux文件系统中inode耗尽比磁盘空间满更隐蔽,常导致服务突然无法写入(如日志打不开、容器启动失败),但df -h 看不出异常。关键要监控 inode 使用率,而非只盯磁盘容量。
一、快速识别inode是否快用完
运行以下命令查看各挂载点的inode使用情况:
- df -i:显示每个文件系统的inode总数、已用、可用及使用百分比(重点关注 Use% 列)
- df -i /var:单独检查高风险目录(如 /var、/tmp、/home)
- find /var/log -xdev -type f | wc -l:粗略统计 /var/log 下小文件数量(大量日志轮转易占满inode)
二、定位“吃”inode最多的目录
当 df -i 显示某分区 Use% >90%,需立即排查源头:
- find /path -xdev -type d | xargs -I {} sh -c 'echo "$(find {} -maxdepth 1 -type f | wc -l) {}"' | sort -nr | head -10:列出子目录下普通文件数 Top 10
- 常用高危路径:/var/spool/postfix/maildrop(邮件队列积压)、/var/lib/docker/overlay2(僵尸容器层)、/tmp(未清理临时文件)
- 注意:-xdev 参数防止跨文件系统遍历,避免误查其他挂载点
三、预防性配置与自动化预警
别等告警才行动,提前设好防线:
- 在监控系统(如Zabbix、Prometheus+Node Exporter)中添加 node_filesystem_files_free{mountpoint="/var"} 和 node_filesystem_files_percent{mountpoint="/var"} 指标告警(阈值建议设为 85%)
- 加一条定时清理任务(crontab):0 2 * * * find /var/log -name "*.log.*" -mtime +30 -delete(删除30天前的日志归档)
- 对 /tmp 设置自动清理:确保 systemd-tmpfiles 启用,并检查 /etc/tmpfiles.d/tmp.conf 中 v /tmp 1777 root root 10d 是否生效
四、常见诱因与应对建议
不是所有inode耗尽都该删文件,先判断根因:
-
日志暴增:检查 rsyslog/journald 配置,限制单个日志大小(
SystemMaxUse=500M)和保留时间 - 容器残留:执行 docker system prune -a --volumes(生产环境慎用,先确认无重要数据)
- 用户上传临时文件未清理:在应用层增加上传后自动清理逻辑,或用 inotifywait 监控目录并定期扫描空文件
- 小文件密集型业务(如Git仓、缓存):考虑改用 XFS 文件系统(默认 inode 更充裕),或格式化时用 mkfs.xfs -i size=512 手动调大 inode 大小









