inode 是什么
inode 保存文件的元数据(所有者、权限、时间戳、数据块位置),文件名与它的映射关系记在目录项里。这带来一个反直觉的后果:inode 数量耗尽的文件系统会提示空间不足,但按容量看仍有大量空闲。
基本信息
| 用途 | 理解 inode 机制与耗尽故障 |
|---|---|
| 查看命令 | df -i 与 ls -i 与目录文件计数 |
| 典型表现 | 写入报空间不足,但按容量看仍有空闲 |
| 分配方式 | ext 系列创建时固定,动态分配的文件系统另说 |
典型使用场景
- 小文件海量写入:会话文件、缓存分片、邮件队列把 inode 用尽
- 故障诊断:写不进任何文件时同时看容量与 inode 使用率
- 清理定位:找出贡献最多小文件的目录,针对性清理
- 容量规划:明确业务是否产生海量小文件,据此选择文件系统
- 删除效率:海量小文件目录删除很慢,需要更合适的删除方式
诊断
诊断
df -i # 关注使用率是否接近 100%
find /var -xdev -type f | wc -l # 统计目录下的文件数量
du -a --max-depth=3 /var 2>/dev/null | sort -n | tail -n 5
ls -i /var/log/messages # 查看单个文件的 inode 编号处理
处理
find /var/lib/php/sessions -type f -mtime +7 -delete
mv /data/spool /data/spool.old && rm -rf /data/spool.old & # 整目录搬走再删,速度更快命令对照
| 命令 | 作用 | 说明 |
|---|---|---|
| 查看 inode 使用率 | 发现耗尽的关键 | 故障时必须与容量一起看 |
| 查看 inode 编号 | 确认文件标识 | 可判断硬链接是否同源 |
| 文件计数 | 定位贡献最多的目录 | 先计数再决定清理 |
| 按时间删除 | 清理过期文件 | 先用输出模式确认范围 |
| 整目录搬移后删除 | 加速删除过程 | 比逐文件删除更快 |
ext 系列在创建文件系统时固定 inode 总量,创建后无法增加;动态分配的文件系统更多表现为元数据空间耗尽。
看到容量还有空闲就排除磁盘问题是最常见的误判,小文件场景必须查 inode 使用率。
海量小文件目录逐文件删除速度很慢,整目录搬移后删除更稳,过程中空间占用也可控。