df -i 可直接查看各挂载点的inode总数、已用数、空闲数(IFree)和使用率(IUse%),其中IFree列即剩余可用inode数量,是判断是否耗尽的关键指标,需结合绝对值而非仅看百分比。

df -i 能直接看到挂载点的可用 inode 数
执行 df -i 是最直接的方式,它会列出所有已挂载文件系统当前的 inode 总数(IUsed)、空闲数(IFree)和使用百分比(IUse%)。其中 IFree 列就是你真正能用的剩余 inode 数量。
常见误区是只盯着 IUse% 看,但小分区(比如 /boot)可能总共就几万个 inode,90% 使用率对应只剩几千个;而大分区即使 80% 也可能还剩几十万。所以务必结合 IFree 的绝对值判断是否危险。
- 查根分区:
df -i / - 查日志目录所在挂载点:
df -i /var/log(自动定位到/var或/所在的实际挂载点) - 避免只跑
df -i后手动翻屏找目标——加| grep "/$"或| awk '$6 == "/" {print}'快速过滤
stat -f 更精确地确认 inode 剩余量
df -i 输出的是四舍五入后的整数,且某些精简环境(如容器镜像)可能不显示 IFree 列。stat -f 直接读取 superblock,字段更原始、无换算,适合验证或调试。
例如运行 stat -f /,重点关注两行:
-
Inodes:—— 文件系统总 inode 数 -
Inodes Free:—— 当前未分配的 inode 数(注意:ext4 默认保留 5% 给 root,普通用户看到的IFree可能比这个值小)
差值就是已用 inode 数。xfs 文件系统可能显示为 free inodes,含义一致。
为什么 df -i /path 有时返回的不是你预期的挂载点
df -i 接路径时,不是查该路径下的文件数量,而是向上回溯找到它所属的**实际挂载点**。比如 /var/log 没有独立挂载,它属于 / 分区,那么 df -i /var/log 输出的就是根分区的数据。
如果你怀疑某个目录“特别吃 inode”,但 df -i 显示整体使用率不高,说明问题可能出在子目录层级,而非整个挂载点耗尽。这时候得用 du --inodes 往下挖:
- 查
/var下各子目录 inode 占用:du --inodes -sh /var/* 2>/dev/null | sort -hr - 避免用
ls -a | wc -l统计大目录——文件超 10 万时极易内存溢出或卡死 - 真正安全的统计方式:
find /var/log -maxdepth 1 -type f | wc -l
tmpfs 和 devtmpfs 的 IFree 值不能当真
df -i 输出里常看到 /run、/dev/shm、/sys/fs/cgroup 这类内存伪文件系统,它们的 IFree 值会随内存压力动态变化,且设计上就是高密度小对象场景,IUse% 达 99% 属正常,不用管。
真正要盯的是业务数据所在的挂载点:/、/var、/home、/data 等。如果这些地方 IFree 已降到几百甚至 0,而 df -h 显示空间充足,基本可以锁定是海量小文件(日志碎片、临时上传、容器镜像层)导致的 inode 耗尽。
ext4 格式化后 inode 总数就固定了,运行中无法扩容。清理前先确认哪些进程还在占用已删除文件:lsof +L1,否则删完 IFree 也不会涨。


















