Production Engineer · PE / Troubleshooting

Meta 磁盘满导致网站故障:容量、Inode与占用释放

从服务故障定位磁盘/日志问题,区分空间与inode耗尽、已删除仍打开文件和复发机制。

题目重点:从服务故障定位磁盘/日志问题,区分空间与inode耗尽、已删除仍打开文件和复发机制。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练已获排查主机授权,先收集证据与最小恢复方案;具体日志删除/重启需按真实生产权限和保留要求,不把题解当自动执行脚本。

解题路线

  1. 确认请求错误/服务状态与时间,查挂载点空间和inode分别是否耗尽。应用写目录所在分区与系统根分区可能不同,不能只看整体磁盘。
  2. 定位增长目录/文件与写入进程,先针对挂载点和时间排查,避免在过载主机无界扫描整个文件系统。查看错误日志如ENOSPC与服务依赖失败,不因发现满盘就忽略第二故障。
  3. 文件删了空间未释放时检查进程仍持有deleted文件句柄。unlink只移目录名,最后open引用关闭前块可能保留;需要受控日志reopen/服务动作,不反复删除更多文件。
  4. 恢复优先停止异常写放大或切换安全日志策略,清理已确认可丢弃/已归档数据;数据库文件、活跃日志与审计记录不能盲删。恢复后检验服务写入/响应而非只看df降低。
  5. 根因查日志级别、错误循环、rotation/retention、压缩/归档失败和容量告警,定byte/inode增长阈值、速率预算与故障演练。无日志丢弃策略时满盘可能再次使网站挂。

手动走一遍

小文件海量造成inode100%但byte还有余量,删一个大文件并不解决;另场景rm巨大日志后df不降,因为app继续向deleted fd写,必须让持有者受控关闭/reopen并修复rotate。

规模与取舍

先聚合到mount/process/directory再定位,恢复与诊断有主机负载预算。日志增长rate×retention决定容量,告警预测time-to-full比仅固定剩余百分比更可行动。

易错点与追问

容易失分的边界

  • 磁盘bytes未满就排除存储故障,漏inode。
  • rm后df不降认为系统坏了,遗漏打开句柄。
  • 只清理不停止写放大,数分钟后复发。

继续深挖

  • 容器overlay、日志宿主路径与配额满和物理盘满怎样区分?
  • 如果需要重启释放fd,如何评估单host中断并保留证据/回滚?
✓已复制微信号!