知识卡片

Scrub机制发现静默数据损坏

专业/工作 · 555.q

内容

基于pglog的故障恢复能处理”某个副本明确掉线或落后”这类可被检测到的异常,但如果OSD状态一直正常、只是磁盘悄悄出现了坏道,pglog机制根本发现不了这种问题。Ceph为此设计了独立的Scrub机制:普通Scrub只比较各副本对象的元数据是否一致,Deep Scrub则真正读取文件内容逐字节比较,用于发现连元数据都察觉不到的静默数据损坏。由于Deep Scrub要读全部内容、比较期间还要锁住PG阻塞客户端I/O,代价很高,所以Ceph把一个PG内的对象按文件名哈希值分块,每次只校验一个块(chunky scrub),并允许多次调度、随机睡眠,尽量减少对正常读写的干扰。发散:这提醒我们,”副本存在”和”副本的数据是对的”是两件独立的事——多副本机制默认信任每个副本自身存储的内容没问题,只有像Scrub这样主动做端到端内容校验的机制,才能捕捉到硬件层面悄悄发生、但不会主动报错的数据损坏。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第7章《分布式存储与Ceph》