宝塔面板提示 Inode 不足 10% 怎么办?先分清磁盘满还是 Inode 满
宝塔面板首页磁盘信息区域弹出「Inode 可用不足 10%,请前往文件管理清理不必要文件」时,很多人第一反应是「磁盘满了,删点东西」。但问题往往不是磁盘满,而是 Inode 满——这是两种现象相似、成因和清理方式完全不同的「满」。
核心判断只有一个:磁盘空间用尽 ≠ 索引节点用尽。 磁盘满要删大文件腾空间;Inode 满要清海量小文件。搞反了,删再多文件也可能白费。下面先讲怎么分清,再讲怎么清。

磁盘满和 Inode 满有什么不一样?
这是本文最关键的一点,先分清两种「满」。
磁盘空间满,指的是磁盘容量用尽——文件太大、太多,把物理空间塞满了。此时 df -h 看到的使用率(Use%)会接近 100%,表现是「写不进新数据、上传文件失败、日志写不进去」。
Inode 满,指的是索引节点用尽——文件数量超限,但容量可能还剩很多。此时 df -i 看到的 Inode 使用率(IUse%)接近 100%,而 df -h 的使用率可能只有 16%。官方文档里给出的典型场景正是这样:磁盘容量仅用了 16%,服务器却无法创建新文件、无法写入日志,网站出现 500 错误或 “No space left on device” 报错。
打个比方:磁盘空间是书库的物理空间,Inode 是书目索引卡的数量。即使书库还有大量空位,一旦索引卡用完,就无法再登记新书入库——哪怕每本「书」只有几字节大小。这就是为什么「磁盘才用了 16%」却「传不上文件」。
| 对比项 | 磁盘满 | Inode 满 |
|---|---|---|
| 用尽的额度 | 磁盘容量 | 文件数量(索引节点) |
| 查看命令 | df -h 看 Use% |
df -i 看 IUse% |
| 典型现象 | Use% 接近 100% | IUse% 接近 100%,Use% 可能很低 |
| 清理方向 | 删大文件释放空间 | 清理海量小文件 |
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% 则完全无法创建新文件。 若此时 df -h 看 Use% 还很低,就确认了是 Inode 满而非磁盘满。
找出占用 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
定位到文件数异常多的目录后,再决定删什么。
怎么清理?两种方式
方式一:面板「日志清理工具」一键清日志
如果根因是日志类文件,用宝塔免费插件日志清理工具最省事。它主要用于一键清理指定日志和系统垃圾,涵盖回收站、面板日志、数据库日志等内容。

点击【立即清理】后,系统会扫描并列出所有可清理的日志文件,默认包含:系统日志、邮箱日志、网站日志、防入侵日志、Docker 容器日志、面板安装日志、面板计划任务日志、防爆破日志。勾选对应类型点击清理即可;还支持【自定义配置】添加要清理的目录、文件或查找目录。
日志清理工具主要清日志类文件。如果 Inode 被 PHP Session、缓存碎片等小文件占满,还需结合下面的 SSH 命令或面板文件管理器处理。
方式二:SSH 命令清理小文件
根据定位结果,官方文档给出以下几类清理命令。
清理 PHP Session 文件:
# 查看 session 文件数量
ls /tmp/sess_* 2>/dev/null | wc -l
# 删除 7 天前的 session 文件
find /tmp -name "sess_*" -mtime +7 -delete
清理系统临时文件:
# 删除 /tmp 下超过 3 天的文件(保留目录结构)
find /tmp -type f -mtime +3 -delete
清理系统日志:
# 清理 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
清理 Docker 残留资源:
docker system prune -f
也可以在面板「文件」页按文件数量排序,找到文件数异常多的目录,批量删除不需要的临时文件。
清理后验证与预防
清理后再次执行 df -i,确认 IUse% 已下降到安全范围。官方建议降到 80% 以下。
预防比事后清理更省心,三点建议:
- 为 PHP 配置定期 Session 清理(
session.gc_maxlifetime) - 用计划任务定期清理
/tmp和日志目录 - 监控 Inode 使用率,达到 80% 时提前处理,而不是等不足 10% 的告警弹出
信息来源
本文事实以宝塔官方文档为准:《Inode 可用空间不足》、《日志清理工具》、《概览&状态》。
常见问题
面板提示 Inode 可用不足 10%,但磁盘明明还有空间,这是怎么回事?
磁盘空间和 Inode 是两套独立的额度。磁盘空间是能装多少数据,Inode 是能登记多少个文件;每个文件或目录都独占一个 Inode。当海量小文件(Session、日志分片、缓存)把 Inode 用光时,即使磁盘容量还剩很多,也无法再创建新文件。
怎么确认到底是磁盘满还是 Inode 满?
看两个不同的使用率:df -h 看磁盘空间使用率(Use%),df -i 看 Inode 使用率(IUse%)。磁盘满表现为 Use% 接近 100%,要删大文件释放空间;Inode 满表现为 IUse% 接近 100% 而 Use% 还很低,要清理海量小文件。
为什么 Inode 会被耗尽?
最常见原因是大量小文件堆积,每个文件占一个 Inode:PHP Session 堆积在 /tmp、邮件队列每封一个文件、Docker 镜像层残留、node_modules / Composer 依赖包,以及 /var/log 下未清理的历史日志分片,都可能把 Inode 占满。
用面板的日志清理工具能解决 Inode 满吗?
能清掉日志类文件,但要看小文件的类型。日志清理工具可一键清理系统日志、网站日志、Docker 容器日志等;如果根因是 PHP Session 或缓存碎片,还需要用 SSH 命令或面板文件管理器按文件数量排序定位并删除。
清理完怎么确认已经恢复?
再次执行 df -i,确认 IUse% 已下降到安全范围。官方建议降到 80% 以下;达到 100% 时服务器完全无法创建新文件,90% 以上就需要关注处理。
怎么预防 Inode 再次耗尽?
三件事:为 PHP 配置定期 Session 清理(session.gc_maxlifetime);用计划任务定期清理 /tmp 和日志目录;监控 Inode 使用率,在达到 80% 时提前处理,而不是等面板弹出不足 10% 的告警。