RAID 5 是什么
RAID 5 把校验信息分散写在所有成员盘上,用一块盘的容量换一块盘的容错:N 块盘可得到 (N-1) 块盘的容量,任意一块盘故障后靠其余盘的 XOR 运算恢复数据。读操作不碰校验,读性能接近全盘并发;写操作要同时更新数据块与校验块,小随机写会触发「读旧数据 + 读旧校验 + 写新数据 + 写新校验」,即写惩罚 4,因此写性能只有盘数 IOPS 的四分之一左右。
基本信息
| 名称 | 分布式奇偶校验条带,distributed parity |
|---|---|
| 最少盘数 | 3 块,生产常用 4~8 块一组 |
| 容量公式 | (N - 1) × 单盘容量 |
| 容错 | 1 块盘;重建期间再坏一块即整阵列失效 |
| 写惩罚 | 4(整条带对齐写可降到 2) |
| 校验算法 | XOR 异或,校验块在各盘间轮转分布 |
| 典型平台 | Linux mdadm --level=5、MegaRAID/PERC/Smart Array、各类存储阵列 |
典型使用场景
- 文件服务器、图片与视频素材库:读多写少,顺序大 IO 为主,写惩罚影响小
- 容量敏感且预算受限的中间层存储:同样盘数比 RAID 10 多拿近一倍可用空间
- 4~8 块盘的中等规模业务:单盘故障可在业务不中断的情况下恢复
- 备份落盘前的暂存卷:写入可容忍,容量优先
- 反向提醒:数据库数据盘、虚拟化小随机写场景不选 RAID 5,写惩罚 4 会把 IOPS 压到四分之一
容量与 IOPS 估算
容量与 IOPS 估算
# 5 块 4TB 7.2K SATA 盘,单盘随机 IOPS 按 75 估
可用容量 = (5 - 1) x 4TB = 16TB # 损失一块盘的容量做校验
随机读 IOPS = 5 x 75 = 375 # 读不涉及校验,可全盘并发
随机写 IOPS ≈ 5 x 75 / 4 ≈ 94 # 写惩罚 4
顺序带宽 ≈ (N - 1) x 单盘带宽 # 校验盘不贡献数据带宽
整条带对齐写 IOPS ≈ 5 x 75 / 2 # 满条带写无需读旧值,惩罚降到 2重建时长量级估算
| 单盘容量 | 重建耗时(限速 100MB/s) | 期间剩余容错 |
|---|---|---|
| 1TB | 约 3 小时 | 0 块盘 |
| 4TB | 约 11 小时 | 0 块盘 |
| 8TB | 约 22 小时 | 0 块盘 |
| 16TB | 约 44 小时 | 0 块盘 |
mdadm 创建与验证
mdadm 创建与验证
mdadm --create /dev/md0 --level=5 --raid-devices=5 --spare-devices=1 --chunk=256 /dev/sd[b-g]1
cat /proc/mdstat # 确认 [5/5] [UUUUU] 与 resync 进度
mdadm --detail /dev/md0 | grep -E 'Raid Level|Array Size|State'
sudo mdadm --readwrite /dev/md0 # 若创建后停在 read-auto,按需切读写写惩罚不是固定值:一次写入若正好覆盖整个条带(full-stripe write),控制器可只写数据与校验、不读旧值,写惩罚降到 2;这也是数据库与虚拟化场景建议按条带边界对齐的原因。
大容量 SATA 盘组 RAID 5 的主要风险不是坏盘本身,而是重建窗口:重建要读遍所有存活盘,期间任何一块盘出现不可纠正读错误(URE)就可能重建失败、整阵列不可用。定期做数据校验巡检(scrub / patrol read)能把隐患提前暴露。
运维要点
- 定期做数据校验巡检(scrub 或卡上的 patrol read),在盘还健康时把静默坏道暴露出来
- 重建限速按业务时段调整:夜间调高、高峰调低,既缩短风险窗口又守住延迟 SLA
- 预留热备盘:坏盘后阵列自动进入重建,不必等采购与现场支持
- 记录条带大小与文件系统的对齐方式,扩容与数据迁移时沿用同一口径