有空间却写不进去
文件系统同时受两种资源约束:数据块与索引节点。数据块对应能存多少字节,索引节点对应能建多少个文件。磁盘使用率显示还有余量,但索引节点被海量小文件耗尽时,任何创建新文件的操作都会失败,报空间不足,很容易被误判为磁盘故障。
海量小文件从哪来
常见来源是邮件队列、会话文件、缓存碎片、监控打点的临时文件,以及因程序缺陷不断重试写入而堆积的小文件。定位时按目录逐层统计文件数量,找到数量异常的那一层,再结合服务的业务特征判断是正常积累还是程序缺陷。
基本信息
| 查看命令 | 带索引节点参数的磁盘用量统计 |
|---|---|
| 定位方式 | 按目录统计文件数量,逐层缩小范围 |
| 处理原则 | 先确认目录归属业务,再清理或调整策略 |
| 长期方案 | 合并小文件、独立挂载点、修改落盘策略 |
典型使用场景
- 应用报空间不足但磁盘使用率并不高
- 监控打点或缓存目录在小文件高峰后耗尽索引节点
- 邮件服务队列异常堆积,影响其他服务写入
- 迁移前评估目标盘的文件数量承载能力
- 巡检后发现索引节点使用率长期高位
确认与定位
确认与定位
df -i # 各挂载点的索引节点用量
find /var -xdev -type f 2>/dev/null | wc -l # 候选目录的文件数量
du -s --inodes /var/* 2>/dev/null | sort -n | tail -10 # 按目录排序找大头
ls /var/spool/ 2>/dev/null # 常见的队列与小文件集中区
# 大树统计较慢,按目录逐层缩小范围处理
处理
# 确认目录归属业务后再清理,示例:
find /var/spool/postfix -type f -mtime +7 | head # 先看清单再决定
find /var/tmp -type f -mtime +7 | head
# 长期方案:
# 1) 把高频小文件目录独立挂载,避免影响系统盘
# 2) 调整应用落盘策略,合并小文件或提高单文件粒度
# 3) 把索引节点使用率纳入监控告警判断与方向
| 现象 | 可能原因 | 方向 |
|---|---|---|
| 写入报空间不足但空间有余 | 索引节点耗尽 | 统计索引节点用量确认 |
| 统计文件数量耗时很长 | 目录内文件数量极大 | 逐层缩小统计范围 |
| 清理后很快再次耗尽 | 应用持续生成小文件 | 修程序或调整落盘策略 |
| 只影响某个目录 | 该目录所在挂载点独立 | 针对性清理并规划独立盘 |
| 多个目录同时告警 | 系统盘共用 | 考虑拆分挂载点 |
删除文件前确认目录归属与用途;数据库或应用数据目录内文件异常增多时,应先查清程序行为,而不是直接批量删除,否则可能破坏业务数据。