抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

RAID磁盘阵列

RAID = Redundant Array of Independent (or Inexpensive) Disks,即“磁盘冗余阵列”。核心思想是把多块物理磁盘组合成一个逻辑设备,用条带化(striping)镜像(mirroring)和/或校验(parity)来在性能、容量和可靠性之间做权衡。用途包括提速、增加可用容量、提高容错能力,但RAID 不是备份(请一定保留独立备份)。

常见的关键词解释

条带(stripe):把连续的数据分成块(chunk/stripe unit),分布在不同盘上以并行读写。

条带宽度 / chunk size:每个条带单元的大小(常见 16KB、64KB、256KB 等),影响顺序读写与小 IO 性能。

镜像(mirror):把数据完整复制到另一块盘(RAID1)。

校验(parity):用于恢复数据的冗余信息(RAID5/6),通过异或等运算生成。

写惩罚(write penalty):进行小写(partial/随机写)时需要额外读写校验,导致实际 IOPS 成本高于单盘。

热备盘(hot spare):空闲盘,出故障时自动接替参与重建。

降级(degraded) / 重建(rebuild):当一块盘故障阵列进入降级,替换盘加入后做数据重建(会大量读剩余盘,IO 密集且风险增加)。

URE(Unrecoverable Read Error)风险:在重建大容量盘时发生不可校正读错误可能导致重建失败,RAID5 在大盘上风险较高,RAID6 更安全。

RAID0 — 纯条带化(Striping)

原理

  • 把数据切分为固定大小的“块”(chunk/stripe unit),依次分配到不同的磁盘上。
  • 例如写入文件 ABCDEF,若条带大小为 2 单位,分布可能是:
    • 磁盘1: AB
    • 磁盘2: CD
    • 磁盘3: EF
  • 所有磁盘 并行读写,提高带宽。

**冗余:**无。任何一块盘坏了,整体阵列崩溃。

RAID1 — 镜像(Mirroring)

原理:

  • 把数据完整复制到另一块磁盘上。
  • 写入 ABCDEF,同时写到磁盘1和磁盘2。
  • 读时可以从任意一块盘读取(控制器可做负载均衡,提高读性能)。

冗余:

  • 任何一块盘坏了,还有另一块副本。
  • 容错依赖镜像副本数量(2盘镜像容忍1盘坏,3盘镜像容忍2盘坏)。

RAID5 — 条带化 + 单校验

原理:

  • 数据按条带分布在不同磁盘上。
  • 额外计算**奇偶校验(Parity)**存放在不同盘(轮换存放,避免单盘成为瓶颈)。
  • 校验常用 XOR(异或) 运算:
    • 例如 3 块盘:
      • 磁盘1: D1
      • 磁盘2: D2
      • 磁盘3: P = D1 ⊕ D2
  • 如果任意一块盘坏了,可通过剩下的数据和校验恢复:
    • 例如磁盘1坏:D1 = D2 ⊕ P

冗余:

  • 能容忍 1 块盘故障。

RAID 5 写惩罚(Write Penalty)

假设我们要在 RAID 5 中修改一块盘上的某个数据块:

  1. 读旧数据块(因为要计算新的校验值)。
  2. 读旧校验块(校验块在别的磁盘上)。
  3. 写新数据块(把修改的数据写回)。
  4. 写新校验块(更新过的校验值写回)。

所以总共要 4 次 I/O 操作


🔹 为什么不能直接写新数据和校验?

因为 RAID 5 的校验是 异或(XOR)计算,要保证一致性,新的校验值必须满足:

新校验=旧数据⊕新数据⊕旧校验

所以必须知道 旧数据旧校验,才能推算出新校验。
这就导致了写入时额外的读操作。


RAID6 — 条带化 + 双校验

原理:

  • 与 RAID5 类似,但每个条带组保存 两份不同的校验信息(通常是 XOR + Reed-Solomon 编码)。
  • 举例:
    • 磁盘1: D1
    • 磁盘2: D2
    • 磁盘3: P = D1 ⊕ D2
    • 磁盘4: Q = f(D1,D2) (使用更复杂的算法,例如伽罗华域 GF(2^8) 的线性组合)
  • 这样即使两块盘同时坏,也能利用剩余数据和两份校验恢复。

冗余:

  • 能容忍 2 块盘同时故障。

RAID10(或 1+0)— 镜像 + 条带

原理:

  • 先把磁盘配对做 RAID1(镜像),再把这些镜像组做 RAID0(条带)。
  • 例如 4 块盘:
    • 组1(镜像对):磁盘1和磁盘2存 D1
    • 组2(镜像对):磁盘3和磁盘4存 D2
    • 然后条带化:写入数据 AB,A → 组1,B → 组2
  • 读写性能接近 RAID0,但有镜像冗余。

冗余:

  • 每对镜像可坏 1 块,只要不是同一对里的所有盘都坏,阵列仍然可用。

RAID50 / RAID60 — 条带化 + RAID5/6 组

原理:

  • 把多个 RAID5(或 RAID6)阵列做条带化。
  • 例如 6 块盘做 RAID50:
    • 先分成两组 RAID5(各3盘,容错1盘)
    • 再把两组做 RAID0。
  • 性能和冗余能力兼顾,比单一 RAID5/6 更强。

总结对比

RAID级别 原理 容错能力 容量利用率 性能特点
RAID0 条带化 0 100% 高读写,0 容错
RAID1 镜像 N-1 块 50%(2盘镜像情况) 读快写中等
RAID5 条带+单校验 1 块 (N-1)/N 读快,写有惩罚(4 次 IO)
RAID6 条带+双校验 2 块 (N-2)/N 读快,写更慢(6 次 IO)
RAID10 镜像+条带 每对1块 50% 高读写,容错比 RAID1 更灵活
RAID50 (RAID5)+条带 每组1块 > (N-组数)/N 比 RAID5 更快更稳
RAID60 (RAID6)+条带 每组2块 > (N-2组数)/N 更安全,适合大规模磁盘

评论