先看现象。服务器磁盘还有 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 一起纳入告警。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189