知识卡片
Scrub按对象哈希边界分块扫描
内容
[[Scrub与deep-scrub的轻重两级检查|Scrub]] 不会一次性锁住整个 PG 做检查,而是每次只取一小批对象(默认 5~25 个)作为一个 chunk,扫描区间的边界特意对齐到哈希值变化的分界点,确保同一个原始对象及其所有关联对象(快照对象、回滚对象)总是被划进同一个 chunk 一起校验,不会被从中间切开分处两次扫描。这是”批量处理时如何选取批次边界”的一个通用经验:批次大小要在锁定范围(影响并发访问)和处理效率(太小则调度开销占比过高)之间取得平衡,而批次边界的位置更要小心对齐到数据的自然分组(这里是同一逻辑对象的家族),否则会把本该原子处理的一组关联数据强行拆成两次不完整的检查。
参考来源
《Ceph源码分析》第12章《Ceph一致性检查》