RAID

<image>

独立硬盘冗余阵列（RAID, Redundant Array of Independent Disks），旧称廉价磁盘冗余阵列（Redundant Array of Inexpensive Disks），简称磁盘阵列。它是一种存储虚拟化技术，通过将多个独立的硬盘驱动器组合成一个或多个逻辑单元，以实现数据冗余、性能提升或两者的结合。

RAID的工作方式取决于其级别（Level）。数据以多种模式分散存储在各个硬盘上，RAID级别以“RAID”加上数字的方式命名，例如RAID 0、RAID 1、RAID 5等。不同的级别在数据可靠性和读写性能这两个目标之间取得了不同的平衡。

简单来说，RAID技术将多个物理硬盘组合成一个逻辑硬盘，因此操作系统只会将其视为一个单一的存储设备。RAID常用于服务器，且通常使用规格完全相同的硬盘来组建。随着硬盘价格的下降以及RAID功能被更有效地集成到主板上，它也逐渐成为普通用户的选择，特别是在需要大容量存储空间的应用场景，如视频和音频制作。

虽然大多数RAID级别可以有效防护硬件缺陷或坏道（硬错误）导致的数据丢失，但它们无法防护因火灾、水灾等灾难性故障，或用户误操作、软件缺陷、恶意软件感染等软错误造成的数据损失。对于重要数据，RAID仅是数据丢失防护与恢复策略的一部分，不能完全替代备份计划。

## 标准RAID级别

### RAID 0

<image>

RAID 0（也称为条带集或条带卷）将数据均匀地分割（“分条”）到两个或更多磁盘上，但不提供奇偶校验信息、冗余或容错。由于RAID 0没有任何冗余，任何一个驱动器的故障都会导致整个阵列的数据丢失。这种配置通常以追求极致的读写速度和最大化存储容量为目标。

一个由n个驱动器组成的RAID 0阵列，其数据读写传输速率理论上是单个驱动器速率的n倍。RAID 0主要用于对性能要求极高且能容忍较低可靠性的应用，例如科学计算或游戏的临时文件存储。

### RAID 1

<image>

RAID 1 包含一个数据集在两个或多个磁盘上的精确副本（或镜像）。一个经典的RAID 1镜像对由两个磁盘组成。此配置不提供奇偶校验或分条，数据在所有成员磁盘上完全相同。阵列的可用容量等于容量最小的那个成员磁盘。当数据可靠性或读取性能比写入性能和存储成本更重要时，此布局非常有用。

只要至少有一个成员驱动器正常工作，阵列就能继续运作，提供了很高的容错能力。任何读取请求都可以由阵列中的任何驱动器来处理，因此随机读取性能理论上最高可达所有成员性能的总和。而写入操作需要同时写入所有成员磁盘，因此写入性能受限于最慢的那个磁盘。

### RAID 2

<image>

RAID 2 在位级别上将数据分条到多个磁盘，并使用汉明码进行错误纠正。所有磁盘主轴需要同步旋转，这使得它一次只能处理一个I/O请求。由于现代硬盘已内置ECC（错误纠正码）功能，RAID 2提供的额外保护显得冗余且复杂。因此，RAID 2在商业上从未被广泛实现，是唯一一个在实践中已被淘汰的原始RAID级别。

### RAID 3

<image>

RAID 3 采用字节级分条，并使用一个专用的磁盘存储奇偶校验信息。由于数据按字节分布在所有数据盘上，任何I/O操作都需要所有磁盘协同工作，这使其不适合处理大量随机的小型I/O请求。它适用于需要高吞吐率的顺序读写应用，例如未压缩视频编辑。RAID 3与RAID 4很快被更灵活的RAID 5所取代。

### RAID 4

<image>

RAID 4 采用块级分条和一个专用的奇偶校验磁盘。这种设计提供了良好的随机读取性能，因为读取请求可以由单个数据盘独立完成。然而，由于所有写入操作都必须更新同一个奇偶校验盘，该盘很容易成为性能瓶颈，导致随机写入性能不佳。NetApp公司的某些NAS系统曾使用基于RAID 4的设计理念。

### RAID 5

<image>

RAID 5 采用带分布式奇偶校验的块级分条。与RAID 4不同，它的奇偶校验信息被交错地分布在所有成员磁盘上，从而解决了单一奇偶校验盘的写入瓶颈问题。RAID 5至少需要三个磁盘，它允许一个磁盘发生故障而数据不丢失。后续的读取可以通过阵列中剩余的数据和奇偶校验块计算出来。

相比RAID 4，RAID 5的分布式奇偶校验将写入负载均匀地分散到所有磁盘上，显著提升了随机写入性能。这使得RAID 5成为性能、容量和可靠性之间的一个良好平衡点，是企业中最常见的数据保护方案之一。但由于奇偶校验计算是在整个条带上进行的，对阵列的小数据块修改会引发“读-改-写”操作，产生所谓的“写放大”问题。

### RAID 6

<image>

RAID 6 通过添加第二个独立的奇偶校验块来扩展RAID 5。它采用带双重分布式奇偶校验的块级分条。RAID 6至少需要四个磁盘，它可以在任意两个磁盘同时发生故障的情况下保证数据的完整性。

第二个奇偶校验块的计算通常采用里德-所罗门码等纠删码算法，这比RAID 5的单一XOR运算要复杂得多。因此，RAID 6的写入性能（尤其是小数据块的随机写入）通常低于RAID 5，因为它需要进行两次奇偶校验计算和写入。然而，其读取性能通常与RAID 5相当。随着硬盘容量越来越大，重建时间变长，RAID 5阵列在重建过程中发生第二次磁盘故障的风险增加，因此RAID 6在需要高可靠性的关键应用中变得越来越流行。

## 实验性及非标准级别

除了广泛采用的标准RAID级别外，学术界和工业界也提出了一些实验性或非标准的RAID架构，旨在满足特定的性能、成本或可靠性需求。

### RAID 0e（弹性条带阵列）

`RAID 0e`（Resilient Striping Array）是一种实验性的磁盘阵列架构，旨在为传统的 `RAID 0`（条带化）增加一个低开销的容错层。该架构由 Yanzhao Jia 等人在其2025年的概念性论文中首次提出。其核心设计思想是将存储阵列分为两个逻辑和物理上独立的域：一个由 `N` 个驱动器组成的数据域（Data Domain），配置为标准的 `RAID 0` 以实现高性能读取；以及一个由 `M` 个驱动器组成的奇偶校验域（Parity Domain），专门用于存储数据域的奇偶校验信息。

这种设计的主要目标是防护常见的、非灾难性的介质故障，例如孤立的坏块、瞬时读取错误或扇区级损坏，而不是完整的驱动器故障。通过这种方式，`RAID 0e` 试图在保留 `RAID 0` 的读取性能优势的同时，显著提高数据的可用性和操作弹性。

#### 工作原理

- 读取操作（健康状态）：读取请求仅由数据域并行处理，理论性能与标准 `RAID 0` 相同。此时，奇偶校验域保持空闲。
- 写入操作：当写入数据时，数据被条带化地写入数据域的所有 `N` 个驱动器。同时，控制器计算该数据条带的奇偶校验块（通过对所有数据块进行按位异或运算），并将该奇偶校验块写入奇偶校验域。$$P_S = D_1 \oplus D_2 \oplus \cdots \oplus D_N$$由于所有写入操作都需要更新奇偶校验域，因此写入性能会受到影响，特别是对于小型的随机写入，会引发“读取-修改-写入”（Read-Modify-Write）惩罚。
- 故障恢复（即时恢复）：如果数据域中的某个数据块（例如 `Dᵢ`）发生读取错误，控制器会立即启动一个透明的恢复程序。它会并发地从数据域读取该条带中所有其他的健康数据块（`Dⱼ` 其中 `j ≠ i`），并从奇偶校验域读取对应的奇偶校验块（`Pₛ`）。通过对这些数据块进行异或运算，控制器可以在内存中重建出丢失的数据块 `Dᵢ` 并返回给主机。$$D_i = \left( \bigoplus_{j=1, j\neq i}^{N} D_j \right) \oplus P_S$$这个过程对应用程序是透明的，仅表现为该次 I/O 操作的延迟增加。

#### 局限性

`RAID-0e` 旨在提供“增强的可用性”，而非“绝对的冗余”。它主要针对单一、局部的介质错误，但无法防护并发故障、奇偶校验域故障或“写洞”（Write Hole）问题。

## 嵌套RAID（混合RAID）

嵌套RAID是将两种或多种标准RAID级别组合起来，以获得各级别之长。

常见嵌套RAID级别类型包括RAID 01、RAID 03、RAID 10、RAID 50、RAID 60、RAID 100。

## 磁盘阵列比较

RAID等级｜最少硬盘｜最大容错(磁盘数)｜可用容量(n=硬盘数, s=单盘容量)｜读性能(倍率)｜写性能(倍率)｜安全性｜目的

JBOD｜1｜0｜n × s｜1｜1｜无（风险同RAID 0）｜简单地增加容量

0｜2｜0｜n × s｜n｜n｜低，一个硬盘损坏，全部数据丢失｜追求最大容量与速度

1｜2｜n-1｜s｜n｜1｜高，只要有一个硬盘正常即可｜追求最大安全性

5｜3｜1｜(n-1) × s｜n-1｜n-1｜中，允许单个硬盘故障｜容量、性能和安全的平衡

6｜4｜2｜(n-2) × s｜n-2｜n-2｜中高，允许两个硬盘故障｜比RAID 5更安全

10 (1+0)｜4 (偶数)｜每个镜像组n/2中可坏1个｜(n/2) × s｜n｜n/2｜高，只要每个镜像组至少有一个正常｜兼顾高性能与高安全性

50 (5+0)｜6｜每个RAID 5子组可坏1个｜(n-k) × s (k=子组数)｜n-k｜n-k｜高，提升写入性能和安全性｜大型阵列的性能与安全

60 (6+0)｜8｜每个RAID 6子组可坏2个｜(n-2k) × s (k=子组数)｜n-2k｜n-2k｜非常高，极佳的容错能力｜关键业务的终极数据保护

- 注：上表中的性能倍率仅为理论值，实际性能受RAID控制器、缓存、硬盘类型和工作负载等多种因素影响。

## 实现方式

根据实现模式，分为软件和硬件两种：

软件磁盘阵列（Software RAID）：主要由CPU处理阵列存储作业，优点是成本极低（若使用操作系统内置功能则无需额外花费），缺点是会消耗CPU资源，可能影响系统性能。

- 操作系统内置功能：如Linux的mdadm、FreeBSD的ZFS、以及Windows Server和桌面版Windows（通过“存储空间”或“磁盘管理”）提供的RAID功能。
- 硬件辅助磁盘阵列（或称Fake RAID）：RAID功能由主板芯片组提供，需要特定驱动程序才能工作。它仍然依赖CPU进行大部分计算，性能介于纯软件和硬件RAID之间。

硬件磁盘阵列（Hardware RAID）：通过专门的RAID控制器卡实现，该卡拥有独立的处理器（称作ROC, RAID-on-Chip）、缓存记忆体和BIOS。

- 优点：性能最佳，因为它不占用主机CPU资源。通常带有备用电池模块（BBU）或电容，能在断电时保护缓存中的数据，确保数据一致性。独立于操作系统，迁移和管理更方便。
- 缺点：成本最高，且卡的性能与价格直接相关。

## 应用

RAID技术应用广泛，尤其是在对数据可靠性、可用性和性能有较高要求的环境中：

- 企业级应用：数据库服务器、企业资源计划（ERP）系统、虚拟化平台。
- 存储系统：网络附加存储（NAS）和存储区域网络（SAN）。
- 媒体与内容创作：电视台、广播电台、影视后期制作工作室，需要高速、大容量的存储来处理高清视频和音频文件。
- 数据密集型行业：金融、证券行业用于保管客户资料；安防监控领域用于存储大量的视频录像。