df -i /
find /var/lib/php/sessions -type f | wc -l
find /var/spool/postfix -type f | wc -l

磁盘还有 20G 可用,上传图片却一直报 No space left on device,日志目录里躺着几百万个几 KB 的会话文件,清了一轮过两天又满了。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:df -h 看的是剩余空间,inode 早就到 100% 了,PHP 的 session 文件和小图片缓存把 inode 一点点吃干净,磁盘上明明有空间,却连一个几字节的新文件都建不出来。

「inode 用尽」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

处理上按这个顺序:先 df -i 看一眼,确认到底是 inode 用满了还是磁盘空间满了;按目录统计文件数,找出那个塞了几百万小文件的目录;清理完补一条定期清理任务,再把 inode 用量加进巡检项。

确认没问题再收工,df -i 的 IUse% 降到 60% 以下并稳定,图片上传接口恢复,巡检表里也能看到 inode 数值。

作者 9823189