校验是读不出来的
对象存储写入时通常会为每个对象或分片计算校验值并随数据一起保存。校验与修复(scrub)的核心价值在于:它不依赖客户端读取就能发现坏块。磁盘静默损坏、固件写错位置、内存位翻转都不会触发任何报错,只有当校验值被重新计算并比对时才会暴露。因此后台巡检与修复是一条独立的保护链,与副本、纠删码互为补充。
基本信息
| 校验单位 | 对象整体或分片/条带级别 |
|---|---|
| 发现方式 | 后台周期性重算比对,不依赖客户端读 |
| 修复依据 | 副本比对或纠删码重建 |
| 常见算法 | CRC 系列、MD5/SHA 系列(校验与内容寻址用途不同) |
| 巡检参数 | 周期、并发、限速、优先级 |
典型使用场景
- 存放归档数据且长期不读:需要后台巡检主动暴露损坏
- 更换硬盘或固件升级后:集中校验数据是否被写坏
- 上电恢复与异常掉电之后:检查未落盘或被改写的数据
- 故障盘替换后:确认重建结果与原始校验一致
- 合规审计:需要证明数据完整性被持续验证过
巡检与修复的基本动作
巡检与修复的基本动作
# 1) 明确校验粒度:整对象校验便宜但定位粗,分片校验定位准但开销大
# 2) 控制巡检速率:巡检是后台任务,跑满磁盘会拖垮前台读延迟
# 3) 分级处理:先标记异常对象,再按重要度决定重建优先级
# 4) 修复前保留证据:异常对象的校验记录与位置要留档,便于追溯
# 5) 重建受冗余度约束:纠删码重建时可用盘数不足则必须停止写入
# 6) 修复后复检:重建完成的对象要再校验一次,确认没有被二次损坏异常现象与判读
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 校验不匹配但对象可读 | 静默损坏或写入链路出错 | 用副本或纠删码重建并记录 |
| 对象读失败且元数据正常 | 所在磁盘扇区不可读 | 标记磁盘,触发重建与换盘 |
| 巡检速率高时前台延迟抖动 | 巡检与业务争抢磁盘带宽 | 限速巡检,避开业务高峰 |
| 重建长时间不收敛 | 可用冗余不足或坏盘过多 | 先修冗余度,暂停非必要写入 |
| 同一对象反复异常 | 写入链路或内存存在缺陷 | 排查主机与固件,不只换盘 |
纠删码能容忍固定数量的盘失效,但重建过程本身需要读取全部剩余分片,会显著放大磁盘与网络负载,容量水位高时风险更大,务必留出水位余量。
发现损坏后不要先删除异常对象再重建:先确认修复依据是否存在(副本或冗余分片是否可用),否则删除会让本来还能抢救的数据彻底消失。