---
title: "宝塔面板 Inode 可用空间不足问题排查"
description: "宝塔面板（BT Panel）提示 Inode 可用不足 10%，导致无法创建新文件的原因分析与清理方案，含小文件查找、日志清理、临时文件清理等完整步骤。"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.bt.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 宝塔面板 Inode 可用空间不足问题排查

## Inode 可用空间不足

## 问题现象

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

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

![宝塔面板 Inode 占用 91% 告警](/img/faq/inode-full.png)

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

:::info 如有疑问，欢迎扫码联系客服
![联系客服](/img/faq/cs-qrcode.png)
:::

---

## 什么是 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 登录服务器，执行：

```bash
df -i
```

输出示例：

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

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

---

## 找出占用 Inode 最多的目录

执行以下命令，统计各目录下的文件数量（从根目录开始，只看第一层，耗时较短）：

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

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

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

---

## 清理方案

### 1. 清理 PHP Session 文件

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

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

### 2. 清理系统临时文件

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

### 3. 清理系统日志

```bash
# 清理 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 残留资源

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

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

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

---

## 清理后验证

```bash
df -i
```

确认 `IUse%` 已下降到安全范围（建议低于 80%）。

---

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

Source: https://docs.bt.cn/faq/inode-full/index.mdx
