首页/计算机组成原理/存储器/RAID技术 🔗 在 Obsidian 中打开
计算机组成原理 · 存储器

RAID技术

重要度 ⭐⭐⭐⭐存储器层次结构磁盘阵列冗余存储器
速查
RAID 0 条带化、无冗余、性能最高;RAID 1 镜像、冗余最高、容量利用率 50%;RAID 5 分布式奇偶校验、可容 1 盘故障。

基本概念

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)将多个磁盘组合使用,目标是:

  • 提高可靠性:通过冗余实现容错
  • 提高性能:通过并行读写提高速度
  • 增大容量:多个磁盘的容量叠加
本质RAID 是「用空间/写开销换可靠性」的折中:冗余越多越安全,但可用容量与写性能随之下降。

RAID 级别详解

RAID 0:条带化(Striping)

磁盘0: [A0][A4][A8]...
磁盘1: [A1][A5][A9]...
磁盘2: [A2][A6][A10]...
磁盘3: [A3][A7][A11]...
  • 无冗余,纯粹性能提升
  • 读写都可并行,速度约为单盘速度的 $n$ 倍
  • 一块盘损坏 → 全部数据丢失
  • 可用容量 $= n \times$ 单盘容量
注意RAID 0 没有容错能力:盘数越多,整体故障概率反而越高。

RAID 1:镜像(Mirroring)

磁盘0: [A0][A1][A2]...
磁盘1: [A0][A1][A2]... (完全镜像)
  • 数据完全复制到两块盘
  • 最高可靠性,一块盘坏不影响
  • 读性能提升(可从两块盘读),写性能不变
  • 可用容量 = 总容量的 50%

RAID 2:位交叉海明码

  • 按位(比特)分散到各盘
  • 使用海明码纠错
  • 实际中很少使用(硬件过于复杂)

RAID 3:字节交叉 + 专用奇偶校验盘

磁盘0: [D0][D3][D6]...
磁盘1: [D1][D4][D7]...
磁盘2: [D2][D5][D8]...
磁盘3: [P0][P1][P2]... (奇偶校验盘)
  • 按字节/字交叉存储
  • 专用一块盘存放奇偶校验
  • 奇偶校验盘成为瓶颈
  • 可用容量 $= (n-1) \times$ 单盘容量

RAID 4:块交叉 + 专用奇偶校验盘

  • 与 RAID 3 类似,但按块(Block)交叉而非字节
  • 小文件读取更高效
  • 奇偶校验盘仍是瓶颈

RAID 5:块交叉 + 分布式奇偶校验

磁盘0: [D0][D1][P2][D3]
磁盘1: [D4][P5][D6][D7]
磁盘2: [P8][D9][D10][D11]
磁盘3: [D12][D13][D14][P15]
  • 奇偶校验信息分散到所有磁盘
  • 解决了 RAID 3/4 的校验盘瓶颈
  • 可用容量 $= (n-1) \times$ 单盘容量
  • 最多坏 1 块盘
  • 读性能好,写性能需要读-改-写操作
考点RAID 5 的写惩罚:一次小写 = 读旧数据 + 读旧校验 + 写新数据 + 写新校验 = 2 读 + 2 写,共 4 次磁盘操作。

RAID 6:双分布式奇偶校验

  • 使用两个独立的校验算法
  • 可以容忍 2 块盘同时损坏
  • 可用容量 $= (n-2) \times$ 单盘容量
  • 写性能比 RAID 5 更差(需更新两个校验)

RAID 10(1+0):先镜像后条带

组0: [A0][A0']  组1: [A1][A1']  组2: [A2][A2']
RAID0条带: A0→A1→A2→...
  • 先做 RAID 1 镜像,再做 RAID 0 条带
  • 兼顾性能和可靠性
  • 可用容量 = 50% 总容量
  • 每组最多坏 1 块盘

RAID 01(0+1):先条带后镜像

  • 先做 RAID 0 条带,再做 RAID 1 镜像
  • 可靠性不如 RAID 10

RAID 级别对比

RAID最少盘数可用容量容错读性能写性能典型应用
02$n \times$ 单盘临时数据
1250%1 块一般系统盘
33$(n-1) \times$ 单盘1 块一般大文件
43$(n-1) \times$ 单盘1 块较差
53$(n-1) \times$ 单盘1 块较差通用
64$(n-2) \times$ 单盘2 块高可靠
10450%每组 1 块数据库

手算示例

例 1:RAID 5 容量和可靠性

有 5 块 1TB 的磁盘组成 RAID 5:

可用容量 = (5-1) × 1TB = 4TB
冗余比例 = 1/5 = 20%
最多允许坏 1 块盘

例 2:RAID 10 容量

8 块 500GB 磁盘组成 RAID 10:

镜像组数 = 8/2 = 4 组
每组容量 = 500GB
总可用容量 = 4 × 500GB = 2TB
冗余比例 = 50%
每组最多坏 1 块,即最多同时坏 4 块(每组恰好坏 1 块)

例 3:RAID 5 校验计算

3 块盘做 RAID 5,写入数据 $D_0 = 1010,\ D_1 = 1100$:

$$P_0 = D_0 \oplus D_1 = 1010 \oplus 1100 = 0110$$

磁盘0: D0 = 1010
磁盘1: D1 = 1100
磁盘2: P0 = 0110

若磁盘 1 损坏,恢复 $D_1$:

$$D_1 = D_0 \oplus P_0 = 1010 \oplus 0110 = 1100 \ \checkmark$$

例 4:RAID 5 的小写问题(写惩罚)

RAID 5 写入一块数据需要:

  1. 读旧数据
  2. 读旧校验
  3. 计算新校验 = 旧数据 ⊕ 新数据 ⊕ 旧校验
  4. 写新数据
  5. 写新校验
写惩罚一次写操作需要 2 次读 + 2 次写 = 4 次磁盘操作

记忆卡片

RAID 0 和 RAID 1 的核心区别?
RAID 0 是条带化(快但不安全),RAID 1 是镜像(安全但浪费空间)。记忆:0 = 零保护纯速度,1 = 一模一样两份存。
RAID 5 和 RAID 3/4 的区别?
RAID 5 将校验信息分散到所有盘,解决了校验盘瓶颈。记忆:5 = 校验「五」散到各盘。
RAID 5 的写惩罚是多少?
一次小写需要 4 次磁盘操作(2 读 + 2 写)。记忆:小写要「四步走」。
RAID 10 为什么比 RAID 01 好?
RAID 10 每个镜像组独立容错;RAID 01 一旦镜像组中坏 2 块盘就全部失效。记忆:10 先保护再加速,01 先加速再保护。

交互动画 · RAID 分条与故障

磁盘 0 磁盘 1 磁盘 2 磁盘 3
选择 RAID 级别,查看数据块的条带布局;「模拟故障」循环标记一块故障盘
点击上方按钮开始
示意图:四块磁盘各 4 个块,橙色为数据块、绿色为校验块;故障盘高亮红色虚线边框。RAID 0 无校验、RAID 1 双写镜像、RAID 5 分布式校验、RAID 10 先镜像后条带。

相关知识点

disk-storage

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。