首页/系统/Linux 内核与性能调优速查/inode 耗尽排查(df -i)

inode 耗尽排查(df -i)

空间足够却无法创建文件常见于 inode 用尽;df -i 看用量,find 统计小文件密集目录。

什么是 inode 耗尽

传统文件系统(ext4、XFS、ZFS 之外多数)把 inode 看作固定资源:每个文件、目录、符号链接都占用至少一个 inode,inode 数量在建库时确定(ext4)或按需动态分配(XFS)。当 inode 用尽而块空间还有剩,就会出现“df 显示还有空间但就是创建不了文件”的经典故障,报错通常是 No space left on device,金额上却看不出空间问题。

基本信息

查看df -i 与 df -i /data
定位find 统计各目录文件数,sort 排序取前几名
ext4 行为inode 总数建库时固定,用尽后无法在线扩容
XFS 行为inode 动态分配,通常不会因数量耗尽
极端值inode 使用率 100% 而空间使用率很低,即为典型特征

典型使用场景

  • 写入报 No space left on device 但 df 还有空间时优先排查 inode
  • 小文件密集型服务异常:缓存目录、会话文件、队列文件堆积
  • 邮件与日志服务器:单目录几十万文件时 inode 消耗极快
  • 备份与解压任务失败:大量小文件解包是最常见的触发场景
  • 容量规划:新建文件系统时预估文件数量规模

排查流程

排查流程
df -i                                    # 全局 inode 使用率
sudo df -i /data                         # 定位到具体文件系统
sudo find /data -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head
sudo find /data -xdev -type d -empty -delete   # 清理空目录(确认后执行)
ls -U /data/some_dir | head              # 目录内文件是否异常多
# ext4 可考虑重建文件系统提高 inode 密度,需要停机与迁移

输出逐列读法

列含义异常表现
Filesystem文件系统与挂载点换挂载点后数值应与路径匹配
Inodes该文件系统 inode 总量ext4 建库时固定
IUsed已用数量接近 Inodes 即告警
IUse%使用率100% 时无法新建文件
Mounted on挂载点用来确认清理目标目录
mkfs.ext4 的 -i(每多少字节一个 inode)与 -N(直接指定总数)可以在建库时提高 inode 密度,适合小文件密集的分区,空间代价是多占一些磁盘。
清理 inode 必须按目录批量确认:缓存目录、队列文件与业务数据混在一起时,直接按目录整删是常见的误删事故来源。

易错点

  • 清理要按目录批量评估(如缓存、队列文件),避免误删业务数据,先看文件命名规律再动手
  • ext4 的 inode 总数建库时确定,长期小文件高发应规划专门的 inode 策略,事后在线扩容做不到
  • df -i 只看总使用率会漏掉具体是哪一层目录堆积,find 排序才能定位到真正的重灾区
  • 把 inode 耗尽误判为磁盘满:两者报错信息相同,但处置方式完全不同,先跑 df -i 再决定动作

数据来源与参考

  • coreutils 文档 df(1)
  • findutils 文档 find(1)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌