跳到主要内容
版本:latest

Inode 可用空间不足

问题现象

在宝塔面板首页磁盘信息区域,看到如下提示:

Inode可用不足10%,请前往文件管理清理不必要文件

宝塔面板 Inode 占用 91% 告警

此时尽管磁盘容量(如上图仅用了 16%)仍有大量剩余,但服务器却无法创建新文件、无法写入日志,网站也可能出现 500 错误或 "No space left on device" 报错。

如有疑问,欢迎扫码联系客服

联系客服


什么是 Inode?

Inode(索引节点,Index Node) 是 Linux 文件系统中的一种数据结构,用来存储文件的元数据,例如:

  • 文件大小
  • 文件所有者和权限
  • 创建/修改/访问时间
  • 文件数据块在磁盘上的位置指针

每一个文件或目录都会独占一个 Inode。文件系统在格式化时,会根据分区大小预先分配固定数量的 Inode,这个数量上限在创建文件系统时就已确定,之后无法扩容(XFS 除外,但扩容也很麻烦)。

你可以把 Inode 理解为图书馆的书目索引卡

  • 磁盘空间 = 书库的物理空间
  • Inode = 书目索引卡的数量

即使书库还有很多空位,一旦索引卡用完,就无法再登记新书入库——哪怕每本"书"只有几字节大小。


为什么 Inode 会耗尽?

常见原因:

原因说明
大量小文件Session 文件、缓存碎片、日志分片等,每个文件占一个 Inode
PHP Session 堆积默认存储在 /tmp 目录,过期未清理时会积累数十万个文件
邮件队列堆积Sendmail/Postfix 的队列目录下每封邮件都是独立文件
容器/Docker 残留层Docker 镜像层解压后会产生大量小文件
npm / Composer 缓存node_modules 和依赖包包含海量小文件
系统日志轮转残留/var/log 下未清理的历史日志文件

如何确认 Inode 使用情况

通过 SSH 登录服务器,执行:

df -i

输出示例:

Filesystem       Inodes  IUsed  IFree  IUse% Mounted on
/dev/sda2 4980736 4531208 449528 91% /
tmpfs 503974 651 503323 1% /dev/shm

IUse% 达到 90% 以上即需要关注,达到 100% 则完全无法创建新文件。


找出占用 Inode 最多的目录

执行以下命令,统计各目录下的文件数量(从根目录开始,只看第一层,耗时较短):

for dir in /*; do echo "$dir: $(find "$dir" -xdev | wc -l)"; done 2>/dev/null | sort -t: -k2 -rn | head -20

或者针对可疑目录深入排查:

# 查看 /tmp 下各子目录文件数
find /tmp -maxdepth 1 -type d | while read d; do
echo "$d: $(find "$d" | wc -l)"
done

清理方案

1. 清理 PHP Session 文件

# 查看 session 文件数量
ls /tmp/sess_* 2>/dev/null | wc -l

# 删除 7 天前的 session 文件
find /tmp -name "sess_*" -mtime +7 -delete

2. 清理系统临时文件

# 删除 /tmp 下超过 3 天的文件(保留目录结构)
find /tmp -type f -mtime +3 -delete

3. 清理系统日志

# 清理 7 天前的日志文件
find /var/log -type f -mtime +7 -name "*.log" -delete
find /var/log -type f -mtime +7 -name "*.gz" -delete

# 或使用 journalctl 清理 systemd 日志(保留最近 3 天)
journalctl --vacuum-time=3d

4. 清理 Docker 残留资源

# 清理未使用的镜像、容器、网络、缓存
docker system prune -f

5. 通过宝塔面板文件管理器清理

进入「文件」页面,按文件数量排序,找到文件数异常多的目录,批量删除不需要的临时文件。


清理后验证

df -i

确认 IUse% 已下降到安全范围(建议低于 80%)。


预防建议
  • 为 PHP 配置定期 Session 清理(session.gc_maxlifetime
  • 使用计划任务定期清理 /tmp 和日志目录
  • 监控 Inode 使用率,在达到 80% 时提前处理