标准答案
- df -h 关注块空间,df -i 关注 inode 使用;大量小文件可能先耗尽 inode,大文件和日志可能先耗尽块空间。
- 空间异常要检查挂载点、deleted 但仍打开的文件、日志、临时目录、快照、容器层和保留空间。
- inode 耗尽通常要定位小文件来源、缓存目录或异常分片,并通过清理、合并文件或调整存储布局解决。
- 清理前要确认文件所有者、业务用途、备份和恢复策略,不能直接删除正在写入的业务数据。
题目解析
df 统计文件系统已分配的块和 inode,du 从目录树统计仍能遍历到的文件,因此二者不一致并不矛盾。最常见的原因是文件已 unlink 但仍被进程持有、目录跨越了不同挂载点,或者 du 因权限没有看到完整目录;inode 用尽时即使还有字节空间也无法创建新文件。
排查应分别查看 df -h、df -i、du 的挂载边界、lsof 的 deleted 文件和目录增长速度。删除日志前要确认保留、审计和采集要求,优先修复轮转、临时文件、缓存和数据库数据增长策略,避免用盲删制造不可恢复的业务问题。
常见误区
- 误区:只执行 du。改正:同时检查挂载点、inode、deleted open 文件和权限范围。
- 误区:发现空间满就删除所有日志。改正:先确认日志是否已采集和保留,再按轮转或安全清理策略释放空间。
- 误区:忽略 inode。改正:用 df -i 判断是否是大量小文件导致的 inode 耗尽。