RAID (独立磁盘冗余阵列)
一、RAID 概述
RAID = Redundant Array of Independent Disks,独立磁盘冗余阵列。
由加州大学伯克利分校 1988 年提出,核心思想:把多块磁盘组合成一个逻辑磁盘,以实现更高的性能、更大的容量或更好的可靠性。
RAID 的三大目标
| 目标 | 含义 |
|---|---|
| 大容量 | 多块盘容量叠加,突破单盘容量限制 |
| 高性能 | 多盘并行读写,I/O 吞吐提升 |
| 高可靠 | 冗余机制(镜像/校验)允许单盘(或多盘)故障而不丢数据 |
关键术语
- 条带 (Stripe):把一份数据切成 N 份,分别写入 N 块盘
- 条带大小 (Stripe Size / Chunk Size):每块盘上单次写入的数据块大小,如 64KB
- 校验 (Parity):通过异或等算法,从其他盘数据反推丢失数据,用于容错
- 热备盘 (Hot Spare):空闲盘,自动替换故障盘
- 重建 (Rebuild):故障盘替换后,把数据恢复到新盘的过程
- 写入惩罚 (Write Penalty):为保证一致性,一次写入要做的实际操作倍数
- MTBF:平均故障间隔时间
- MTTDL:平均数据丢失时间
二、RAID 级别详解
RAID 0 (条带化,Striping)
原理:数据分块,轮流写入多块盘,无冗余。
盘1 盘2 盘3 盘4
[A1 ] [A2 ] [A3 ] [A4 ] ← 条带 1
[B1 ] [B2 ] [B3 ] [B4 ] ← 条带 2
| 项目 | 说明 |
|---|---|
| 容量 | N 块盘容量之和(100%) |
| 读性能 | N 倍速 |
| 写性能 | N 倍速 |
| 冗余 | 无,任何一块盘坏,全部数据丢失 |
| 最低盘数 | 2 |
| 适用场景 | 临时数据、对性能要求高但不重要的场景 |
⚠️ RAID 0 实际不算 RAID,因为没有冗余。
RAID 1 (镜像,Mirroring)
原理:同一份数据写入两块盘(完全复制),互为镜像。
盘1 盘2 (镜像)
[A1 ] [A1 ]
[B1 ] [B1 ]
| 项目 | 说明 |
|---|---|
| 容量 | 单盘容量(50%) |
| 读性能 | 2 倍速(可从两块盘同时读) |
| 写性能 | 略低于单盘(要写两次) |
| 冗余 | 允许 1 块盘故障 |
| 最低盘数 | 2 |
| 适用场景 | 关键数据、系统盘、对读性能要求高 |
RAID 2 (汉明码纠错)
原理:以位(bit)为单位条带化,使用汉明码做 ECC 纠错。
| 项目 | 说明 |
|---|---|
| 容量 | 损失较大(多盘用于校验) |
| 性能 | 一般 |
| 冗余 | 可纠正单盘错误 |
| 实际应用 | 已淘汰,ECC 在内存更合适 |
RAID 3 (专用校验盘的字节级条带)
原理:数据按字节条带化写入多块数据盘,另有一块专门的校验盘存异或值。
| 项目 | 说明 |
|---|---|
| 容量 | (N-1) 块盘容量 |
| 读性能 | 接近 N 倍速 |
| 写性能 | 差(每次写都要更新校验盘,校验盘成为瓶颈) |
| 冗余 | 允许 1 块盘故障 |
| 实际应用 | 极少用,已被 RAID 5 取代 |
RAID 4 (块级专用校验)
原理:与 RAID 3 类似,但以块(扇区)为单位条带,有一块专用校验盘。
| 项目 | 说明 |
|---|---|
| 容量 | (N-1) 块盘容量 |
| 读性能 | N 倍速 |
| 写性能 | 差(校验盘仍是瓶颈) |
| 冗余 | 允许 1 块盘故障 |
| 实际应用 | 很少用,被 RAID 5 取代 |
RAID 5 (分布式校验,最常用)
原理:数据分块 + 校验块,校验值轮流分布到所有盘上(没有专用校验盘)。
盘1 盘2 盘3 盘4
[A1 ] [A2 ] [A3 ] [Ap] ← 校验在盘 4
[B1 ] [B2 ] [Bp] [B3 ] ← 校验在盘 3
[C1 ] [Cp] [C2 ] [C3 ] ← 校验在盘 2
[Dp] [D1 ] [D2 ] [D3 ] ← 校验在盘 1
| 项目 | 说明 |
|---|---|
| 容量 | (N-1) 块盘容量 |
| 读性能 | 接近 N 倍速 |
| 写性能 | 中等(写入惩罚 = 4) |
| 冗余 | 允许 1 块盘故障 |
| 最低盘数 | 3 |
| 适用场景 | 最常用,文件服务器、数据库、通用服务器 |
写入惩罚 = 4:一次逻辑写需 4 次物理 I/O(读旧数据 + 写新数据 + 读旧校验 + 写新校验)。
RAID 6 (双重校验)
原理:在 RAID 5 基础上再加一份校验(不同算法),允许同时坏 2 块盘。
盘1 盘2 盘3 盘4 盘5
[A1 ] [A2 ] [A3 ] [Ap] [Aq] ← 两个校验值
[B1 ] [B2 ] [Bp] [Bq] [B3 ]
| 项目 | 说明 |
|---|---|
| 容量 | (N-2) 块盘容量 |
| 读性能 | 接近 N 倍速 |
| 写性能 | 较差(写入惩罚 = 6) |
| 冗余 | 允许同时 2 块盘故障 |
| 最低盘数 | 4 |
| 适用场景 | 大容量阵列、对可靠性要求高 |
RAID 10 (1+0,先镜像后条带,推荐)
原理:先做 RAID 1(每组镜像),再把多组镜像做 RAID 0(条带)。
盘1 盘2 盘3 盘4
[A1 ] [A1m] [A2 ] [A2m] ← 每对镜像
↘ ↓ ↙
┌─────┐
│ 条带 │
└─────┘
| 项目 | 说明 |
|---|---|
| 容量 | N/2 块盘容量(50%) |
| 读性能 | N 倍速 |
| 写性能 | N/2 倍速(每对镜像要写两次) |
| 冗余 | 每组镜像可坏 1 块,最多坏 N/2 块 |
| 最低盘数 | 4 |
| 适用场景 | 数据库、高 IO 场景 |
RAID 01 (0+1,先条带后镜像)
原理:先做 RAID 0(条带),再做 RAID 1(镜像)。与 RAID 10 看起来一样,但可靠性差很多。
| 项目 | 说明 |
|---|---|
| 容量 | N/2 块盘容量 |
| 性能 | 与 RAID 10 相当 |
| 冗余 | 任一底层条带整组坏都会导致整个阵列不可用 |
| 适用场景 | 极少使用,RAID 10 完胜 |
RAID 10 vs RAID 01:RAID 10 可靠性远高于 RAID 01,推荐用 RAID 10。
RAID 50 (5+0)
原理:多个 RAID 5 子组,再做条带。
| 项目 | 说明 |
|---|---|
| 容量 | 各 RAID 5 子组容量之和(每组损失 1 块盘) |
| 性能 | 优于 RAID 5,大型写入更高效 |
| 冗余 | 每个子组允许坏 1 块 |
| 适用场景 | 大容量、高性能需求 |
RAID 60 (6+0)
原理:多个 RAID 6 子组,再做条带。
| 项目 | 说明 |
|---|---|
| 容量 | 各 RAID 6 子组容量之和 |
| 冗余 | 每个子组允许坏 2 块 |
| 适用场景 | 超大容量、超高可靠性 |
三、RAID 级别对比
| 级别 | 最低盘 | 容量利用率 | 读性能 | 写性能 | 冗余 | 写入惩罚 |
|---|---|---|---|---|---|---|
| 0 | 2 | 100% | 高 | 高 | 无 | 1 |
| 1 | 2 | 50% | 高 | 中 | 1 块 | 2 |
| 2 | 3 | 低 | - | - | 1 块 | - |
| 3 | 3 | (N-1)/N | 高 | 低 | 1 块 | 4 |
| 4 | 3 | (N-1)/N | 高 | 低 | 1 块 | 4 |
| 5 | 3 | (N-1)/N | 高 | 中 | 1 块 | 4 |
| 6 | 4 | (N-2)/N | 高 | 中低 | 2 块 | 6 |
| 10 | 4 | 50% | 高 | 高 | 每组 1 块 | 2 |
| 01 | 4 | 50% | 高 | 高 | 差 | 2 |
| 50 | 6 | (N-M)/N | 高 | 中高 | 每组 1 块 | - |
| 60 | 8 | (N-2M)/N | 高 | 中 | 每组 2 块 | - |
N = 总盘数,M = 子组数
四、软 RAID vs 硬 RAID
| 项目 | 软 RAID | 硬 RAID (RAID 卡) |
|---|---|---|
| 实现 | CPU 执行,操作系统或驱动 | 专用 RAID 卡(带处理器 + 缓存) |
| 性能 | 占用 CPU,慢 | 不占 CPU,快 |
| 成本 | 几乎零成本 | 几百到几千元 |
| 功能 | 基础 | 丰富(热备盘、BBU、远程复制) |
| 兼容性 | 与 OS 强相关 | 独立于 OS |
| 适用 | 个人/家用/测试 | 企业/生产环境 |
| 代表 | Linux mdadm、Windows Storage Spaces | LSI MegaRAID、HP Smart Array |
RAID 卡的电池/电容 (BBU / SuperCap):
- 防止断电时缓存数据丢失
- 写回 (Write Back) 模式必须配 BBU 才安全
- 现代超级电容寿命更长
五、关键概念深入
1. 条带大小 (Chunk Size) 选择
- 小块(32-64 KB):适合随机小 I/O、数据库
- 大块(128-1024 KB):适合顺序大文件、视频流
2. 写入惩罚 (Write Penalty)
| RAID | 写 1 次需要实际 I/O 次数 | 说明 |
|---|---|---|
| 0 | 1 | 无校验 |
| 1 | 2 | 写镜像 |
| 5 | 4 | 读旧数据 + 写新数据 + 读旧校验 + 写新校验 |
| 6 | 6 | 同上但双校验 |
| 10 | 2 | 镜像写入 |
3. 热备盘 (Hot Spare)
- 全局热备:为整个阵列中所有盘组准备
- 局部热备:只服务某个盘组
- 故障时自动替换,自动重建,无需人工干预
4. 重建 (Rebuild) 风险
- 重建期间若再有盘坏,RAID 5 会丢数据
- 重建时间:容量 / 速度(几小时到几十小时)
- 大容量盘(>2TB)重建风险更高
- RAID 6 / RAID 10 更安全
5. 校验计算 (P = D1 ⊕ D2 ⊕ D3)
- 异或 (XOR) 特性:A ⊕ B ⊕ C ⊕ A ⊕ B = C
- 所以丢任意一块盘,可用其他盘反推
六、各级 RAID 选择建议
| 业务场景 | 推荐 RAID | 原因 |
|---|---|---|
| 系统盘 / 数据库 | RAID 1 或 RAID 10 | 读多写多,需要高 IOPS |
| 数据库日志 | RAID 10 | 顺序写,需要高写性能 |
| 文件服务器 / 共享存储 | RAID 5 或 RAID 6 | 容量利用率高,读多写少 |
| 视频监控 / 大容量备份 | RAID 6 | 容量大、可靠性高 |
| 临时数据 / 缓存 | RAID 0 | 极致性能,无可靠性要求 |
| 关键业务 / 金融 | RAID 10 | 性能与可靠性兼顾 |
| 云存储 / 冷数据 | RAID 6 | 容量大、可靠性高、性价比好 |
七、现代存储演进
- JBOD (Just a Bunch Of Disks):无 RAID,把多盘串成一个逻辑盘
- RAID-on-Chip (ROC):RAID 控制器集成到主板
- 存储虚拟化:多盘抽象成统一的资源池
- 软件定义存储 (SDS):Ceph、GlusterFS、MinIO 替代部分 RAID 场景
- 纠删码 (Erasure Coding):类似 RAID 但更灵活,云存储常用
- RAID 已不是唯一选择:大厂用分布式存储 + 多副本 + 纠删码
八、核心要点速记
- RAID 0:只求快,不求稳
- RAID 1:最稳但浪费,适合系统盘
- RAID 5:性价比之王,通用首选
- RAID 6:更稳的 RAID 5,大容量首选
- RAID 10:又快又稳,数据库首选
- 条带提升性能,镜像/校验提升可靠性
- 写入惩罚:RAID 5 = 4, RAID 6 = 6, RAID 10 = 2
- 大硬盘 + RAID 5 = 重建风险,建议 RAID 6 或 RAID 10