题目重点:从服务故障定位磁盘/日志问题,区分空间与inode耗尽、已删除仍打开文件和复发机制。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练已获排查主机授权,先收集证据与最小恢复方案;具体日志删除/重启需按真实生产权限和保留要求,不把题解当自动执行脚本。
解题路线
- 确认请求错误/服务状态与时间,查挂载点空间和inode分别是否耗尽。应用写目录所在分区与系统根分区可能不同,不能只看整体磁盘。
- 定位增长目录/文件与写入进程,先针对挂载点和时间排查,避免在过载主机无界扫描整个文件系统。查看错误日志如ENOSPC与服务依赖失败,不因发现满盘就忽略第二故障。
- 文件删了空间未释放时检查进程仍持有deleted文件句柄。unlink只移目录名,最后open引用关闭前块可能保留;需要受控日志reopen/服务动作,不反复删除更多文件。
- 恢复优先停止异常写放大或切换安全日志策略,清理已确认可丢弃/已归档数据;数据库文件、活跃日志与审计记录不能盲删。恢复后检验服务写入/响应而非只看df降低。
- 根因查日志级别、错误循环、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中断并保留证据/回滚?
