针对磁盘inode使用率打满的问题,可通过以下步骤解决:
一、确认问题
- 检查inode使用率
执行命令:
若输出中df -i
Use%
列显示100%,即确认inode耗尽。
二、清理高占用文件/目录
定位高inode占用的目录
for i in /*; do echo $i; find $i 2>/dev/null | wc -l; done
输出结果按文件数排序,文件数最高的目录即为占用源(如
/var
,/tmp
,/usr
)。逐层深入定位
进入高占用目录(以/var
为例),重复上述命令:cd /var for i in *; do echo $i; find $i 2>/dev/null | wc -l; done
逐步定位到具体子目录(如
/var/spool/postfix
、日志目录/var/log
或临时文件目录/tmp
)。清理策略
- 临时文件:清理
/tmp
和/var/tmp
目录:rm -rf /tmp/* /var/tmp/*
- 日志文件:归档或删除旧日志(如 Nginx、Apache 日志):
truncate -s 0 /var/log/nginx/*.log # 清空日志(保留文件) find /var/log -type f -name "*.log" -mtime +30 -delete # 删除30天前日志
- 缓存文件:清理包管理器缓存(如apt、yum):
apt clean # Debian/Ubuntu yum clean all # CentOS/RHEL
- 用户文件:检查用户目录(如
/home
)是否有大量小文件(邮件、缓存等)。
- 临时文件:清理
三、扩展inode数量(终极方案)
若清理后仍不足,需重新格式化磁盘(注意:此操作会删除磁盘所有数据!):
- 备份数据
将磁盘数据完整备份至其他存储设备。 - 卸载磁盘分区
umount /dev/sdxN # 替换为实际分区(如 /dev/vdb1)
- 重新格式化并指定inode数
mkfs.ext4 -N 2000000 /dev/sdxN # 设置200万inode(按需调整)
- 恢复数据
将备份数据迁移回新分区。
四、预防措施
- 监控报警:定期运行
df -i
,纳入系统监控工具(如Zabbix、Prometheus)。 - 日志轮替:配置
logrotate
压缩/删除旧日志(如设置保留7天)。 - 避免小文件堆积:对易产生小文件的场景(如邮件、缓存)使用独立分区并分配充足inode。
- 定期维护:通过
find
清理碎片文件(如废弃session文件、临时缓存)。
注意:
- 清理系统文件前务必确认文件用途,避免误删核心数据。
- 扩展inode需预留足够冗余(建议预留20%以上),避免频繁操作格式化。