全部排错手册
系统 / Linux更新于 4 分钟阅读 · 执行耗时因环境而异

Linux 磁盘满但找不到大文件:处理 deleted 文件与 inode 耗尽

df 与 du 数字不一致,通常是已删除但仍被进程持有的文件;也可能是 inode 或挂载点视图问题。

维护者 Kevin · Ovalk

适用范围与前提

适用于有 df、du、findmnt 与 lsof 的 Linux 文件系统。快照、保留块和权限也可能导致工具统计不同。

先定位拒绝写入的实际文件系统,而不只是根目录。部分诊断需要较高读取权限;清理前确认文件归属与保留要求。

示例不是可以直接粘贴的指令。请替换示例域名、路径、服务名和大写占位符。先收集证据;重载、回滚、清理及执行任务会改变系统状态,需批准影响范围与恢复计划。不要分享凭据或未脱敏日志。

常见症状

  • df 显示 100%,du 汇总却很小
  • 服务报 no space left on device
  • 目录中文件不多却无法创建新文件

1. 确认块空间还是 inode

先分别运行 df -h 和 df -i。inode 满需要清理大量小文件;块空间满再进行目录占用和已删除文件分析,两种情况的操作完全不同。

df -h
df -i
du -xhd1 / | sort -h

2. 检查被持有的 deleted 文件

进程打开的已删除文件不会在 du 中显示,但在进程退出前仍占用空间。通过 lsof +L1 找出持有者,优先使用应用自身的日志重载/轮转方式,再谨慎重启明确的进程。

lsof +L1
lsof +L1 | sort -k7 -n

3. 避免扩大根分区后再次失控

扩容能恢复余量,但应同步修复日志策略、临时文件 TTL 和监控阈值。对于挂载卷,确认业务写入的真实路径没有回退到根分区。

findmnt -T /path/to/application/data
journalctl --disk-usage

解读证据

观察结果下一步检查
块空间有余、inode 已满查找该挂载点上异常多的小文件;删除一个大文件不能释放大量 inode。
df 高于可读目录的 du 汇总检查已删除但打开的文件、快照、保留空间及无权限路径;差额本身不能证明泄漏。
预期数据挂载缺失先按流程停止或重定向写入,再恢复挂载。写入挂载点下层目录的文件需要单独恢复计划。

说明性诊断案例

以下假设案例用于解释推理,并非客户真实事故,也不代表已在你的技术环境中测试。

删除一个 40 GB 日志后,df 没有改善,lsof 显示日志进程仍持有其描述符。继续删除其他目录不能解决这部分占用。请服务负责人用支持的方式重新打开日志,再确认描述符已释放;重启仅作为确认可用性后的备选措施。

验证恢复

  • 检查工作负载准确路径的可用块和 inode,并让应用用自身账号完成正常的小量读写。
  • 恢复后观察空间增长速率,确认日志轮转确实按预期创建和清理文件。

回滚与停止条件

清理通常不可撤销。没有已验证备份和保留决策时,不要删除业务数据或未知文件;服务配置变更应能独立回滚。

预防与长期修复

  • 为日志、临时文件、上传和核心数据设置独立容量与清理策略。
  • 磁盘空间和 inode 分别在 70%、85%、95% 告警。
  • 演练日志轮转和服务重载,不在告警时首次执行。

参考资料与纠错

请使用与你安装版本匹配的文档。以下资料解释基础行为,命令仍需结合实际环境验证。

向 Kevin 提交更正,请附页面地址、版本与脱敏复现步骤。请查看编辑原则(英文)