知识卡片

快照对象修复靠clone_overlap避免全量拷贝

专业/工作 · 236.e.5.b

内容

修复一个缺失的快照对象时,并不是简单地从远端整体拷贝一份。calc_clone_subsets 会利用 [[clone_overlap记录增量重叠优化数据恢复|SnapSet 里记录的 clone_overlap]]信息,分别向前、向后查找与目标快照相邻、且本地完好的快照对象,找出彼此完全没有修改过的重叠区间——这些区间直接从本地已有的快照对象拷贝即可,只有真正被修改过、本地任何快照都没有的区间才需要从其他 OSD 拉取。这是”先看本地能凑出多少,缺的部分才向外要”的策略:既然快照本身就是通过写时复制产生的增量关系,修复时理所当然应该反过来利用这份增量关系,把网络传输压缩到真正不可替代的那一小部分数据。

参考来源

《Ceph源码分析》第11章《Ceph数据修复》