先看现象。服务器磁盘还有 40% 空间,inode 却用到了 100%,新文章入库时报「No space left on device」,前台访问旧文章一切正常,编辑以为只是偶发失败。
真正麻烦的地方在于,几个原因的现象几乎一样。小文件过多耗尽 inode,df -h 看不出来。另一种情况是缓存目录按请求生成文件,从不清理。
少数情况下是session 文件没有回收机制。
不容易想到的是,日志按小时切分,保留策略写错成永久。
同时看空间和 inode 使用率
df -h /; df -i /
然后找出占用 inode 最多的目录
for d in /var/*; do echo $(find $d -xdev | wc -l) $d; done | sort -rn | head
接着清理过期缓存和 session 文件
find /var/www/cache -type f -mtime +7 -delete
给清理任务加进定时脚本
0 4 * * * find /var/www/cache -type f -mtime +7 -delete
同事提醒我看一下最近一次发布,时间点确实对得上。
命令输出我都留了记录,免得改完记不清原来的值。
改完先别撤,确认这几项。inode 使用率降到六成以下,新文章能正常写入,发布日志里不再出现 No space left on device。
磁盘监控只看容量会漏掉 inode,小文件多的站点必须把 df -i 一起纳入告警。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
