知识卡片

Scrub只负责发现问题不负责修复

专业/工作 · 516.c

内容

Scrub 比对完所有副本后,把发现的缺失对象和不一致对象记在 missing/inconsistent 列表里,scrub_finish 阶段做的也只是把这些标记转换成 peer_missing 记录,然后抛出 DoRecovery 事件——真正的数据修复完全交给已有的 [[严格先Recovery后Backfill的顺序设计|Recovery 流程]]去做,Scrub 自己不执行任何数据搬运。这是职责分离在故障处理管道里的体现:检测(发现哪里不一致)和修复(怎么把它修好)是两个独立关注点,检测机制只需要准确产出”哪些对象在哪些副本上有问题”这份清单,不需要重新实现一遍数据拉取和写入逻辑——修复能力已经有一套成熟机制存在,检测出的问题接入这套机制就够了,不必为每种触发场景各自造轮子。

参考来源

《Ceph源码分析》第12章《Ceph一致性检查》