Linux系统inode占满排查与清理实操指南
inode占满现象与影响
当Linux文件系统的inode耗尽时,即使磁盘仍有剩余空间,也无法创建新文件、目录或软链接,系统会提示“No space left on device”(实际是inode不足)。常见表现为:无法写入日志、无法安装软件包、部分服务启动失败。
第一步:检查inode使用情况
使用df -i命令查看各分区的inode总数、已用inode数量及使用百分比:
df -i | grep -v tmpfs重点关注Use%接近100%的分区。若发现某分区inode使用率过高,进入下一步排查。
第二步:定位占用inode的目录
从根目录开始,逐层统计目录下的文件数量(包括子目录中的文件),快速锁定“小文件密集区”:
- 统计根目录下各一级目录的文件数(-sort选项按大小排序):
for i in /*; do echo "$i: $(find $i -xdev -type f | wc -l)"; done | sort -t: -k2 -rn | head -20 - 根据结果进入数量最多的目录,重复上述命令,直到找到具体的“重灾区”子目录。
更简便的方法使用ncdu工具(需先安装):ncdu /,可以直观查看目录容量和文件数量。但注意ncdu默认统计的是磁盘容量,不是inode数。建议使用find /path -xdev -type f | wc -l结合目录遍历自行判断。
第三步:清理占用inode的文件
3.1 删除无用的临时文件
常见目录:/tmp、/var/tmp、/var/spool下打印任务缓存、/var/log下的轮转日志(特别是大量小日志)。
- 清空超过7天的临时文件:
find /tmp -type f -atime +7 -delete - 清理历史日志:
find /var/log -name "*.log.*" -mtime +30 -delete
3.2 删除小文件后释放inode
若目录中存在大量0字节空文件或极小文件,可使用find批量删除:
find /path -type f -size 0 -delete # 删除空文件find /path -type f -size -1k -delete # 删除小于1KB的文件(谨慎使用)
3.3 移除空目录
空目录也占用inode(每个目录至少占用一个inode)。删除空目录:find /path -type d -empty -delete
注意:执行删除前建议先测试,如用-exec echo {}代替-delete,确认无误后再执行。
第四步:预防inode耗尽
- 合理规划分区:为/var、/tmp等可能产生大量小文件的分区分配足够多的inode(格式化时指定
-i 2048可增加inode数量,但会减少可用数据空间)。 - 设置日志轮转策略:使用logrotate限制日志文件数量和保留时间,避免日志目录堆积。
- 监控报警:利用Zabbix、Prometheus等工具监控
df -i的使用率,设置报警阈值(如大于80%)。
总结
inode占满虽不常见,但一旦发生会导致服务异常。通过df -i快速定位问题分区,配合find命令逐层排查小文件目录,清理无用文件即可恢复。建议定期检查关键分区的inode使用率,做好自动化监控。