傲来云 发表于 2025-6-4 14:32:43

Linux服务器被占满 inode 导致无法写入文件

网站突然上传不了图片了,提示“磁盘写入失败”,但看磁盘明明还有空间。就是无法上传,这种情况多半是 inode 用光了。
这个问题不常见,但一旦出现就很难排查,今天整理一下我的排查过程和解决方法,供大家参考。

什么是 inode?
简单说,每个文件都要占一个 inode,哪怕文件只有 0 字节也一样。
如果服务器里生成了大量小文件,比如日志碎片、缓存、临时文件,即使硬盘还有空间,也可能因为 inode 数量用尽而无法再创建新文件。

如何判断是否 inode 占满?
先看磁盘空间:
df -h再看 inode 使用情况:
df -i如果看到某个分区 `Use%` 达到 100%,说明 inode 用完了。

查找占 inode 最多的目录
这个命令非常有用:
for i in /*; do echo $i; find $i | wc -l; done它会逐个统计目录下的文件数量,帮助你定位是哪个路径产生了大量小文件。

如何处理?
找到对应目录后:
1. 清理不必要的小文件:
rm -rf /tmp/*2. 使用 logrotate 或定期清理缓存。
3. 如果是网站某插件或程序疯狂写缓存,建议先禁用它,再分析原因。

预防建议:
对站点缓存、日志目录做定期清理任务(cron job);
容器类服务建议挂载数据盘,避免 `/var` 爆炸;
生产环境分区时可考虑为某些目录单独分区,比如 `/var`。

这个问题虽然比较偏门,但真遇到的时候挺难发现的。如果你也碰到过“磁盘有空间却写不了文件”的情况,强烈建议 `df -i` 一下看看 inode。

页: [1]
查看完整版本: Linux服务器被占满 inode 导致无法写入文件