df -i 是查 inode 剩余数的唯一可靠命令,它直接读取文件系统超级块中的 inode 总量与已分配计数,输出 Inodes、IUsed、IFree、IUse% 四列,重点关注 IUse% ≥ 95% 或 100% 的分区,此时即使 df -h 显示空间充足也无法创建新文件。

df -i 是查 inode 剩余数的唯一可靠命令
Linux 文件系统除了空间块(block)会耗尽,inode 也会单独耗尽——这时 df -h 显示还有几十 GB 可用,却报 No space left on device。真正反映“文件数量上限”的是 inode,不是字节数。
直接运行:df -i,输出列包括:Filesystem、Inodes、IUsed、IAvail、IUse%、Mounted on。重点关注 IUse% 列,≥95% 就得干预。
-
df -i /var:只查指定挂载点(如日志目录),避免全盘扫描 -
df -i --output=source,itotal,iused,iavail,pcent,target | sort -k5nr:按 inode 使用率倒序排,新版 coreutils 支持 - 别用
du查 inode —— 它统计的是文件大小,和 inode 数量无关
为什么 /var/log 或 /tmp 容易 inode 耗尽
这两个目录常生成海量小文件(比如每秒一条日志、临时 socket、session 文件),而每个文件无论多小都占用一个 inode。ext4 默认每 16KB 分配一个 inode,但若初始格式化时没调大 -i 参数,小文件一多就崩。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 查某目录下文件总数:
find /var/log -xdev -type f | wc -l(-xdev防止跨分区) - 定位高频子路径:
find /var/log -xdev -type f | cut -d "/" -f 1-4 | sort | uniq -c | sort -nr | head -5 - 容器环境特别注意:
/var/lib/docker/overlay2下 layer diff 目录也极易堆积百万级小 inode
inode 耗尽了怎么快速释放
删文件不等于释放 inode —— 如果进程还打开着已 unlink 的文件,inode 就卡住不回收。必须让进程关闭句柄。
- 找谁占着已删文件:
lsof +L1(只显示 link count = 0 的条目)或lsof | grep deleted - 常见元凶:
rsyslogd、nginx、java进程持有旧日志;dockerd持有已删镜像层 - 安全释放方式:对 rsyslog 发
kill -USR1 $(pgrep rsyslog)触发日志轮转重开;nginx 用nginx -s reload;其他进程优先尝试 graceful restart - 硬杀进程(最后手段):
kill -9 PID,但可能丢数据
df -i 和 df -h 输出差异大时,说明什么
如果 df -h 显示 Use% 是 60%,但 df -i 显示 IUse% 是 98%,说明磁盘空间还富余,但不能再创建新文件了——因为没 inode 了。这是典型的“空间够、节点不够”场景。
- 不要只盯着
Avail列:它只反映 block 剩余,和 inode 完全无关 -
df -i的IAvail才是“还能新建多少个文件”的真实答案 - 某些 NFS 挂载或 overlayfs 场景下,
df -i可能不准,需结合stat -f /path看Files和Free files字段验证
df -i 必须和 df -h 一起看,缺一不可。inode 耗尽不会触发磁盘告警脚本(除非你显式加了 df -i 检查),最容易被忽略。

















