-
条带化 (Striping):
- 逻辑上的连续数据被分割成大小相同的块,称为数据条带 (data stripes)。
- 这些数据条带以轮询的方式(round-robin)写入到 RAID 阵列中的每个硬盘上。
- 例如,如果有三个硬盘,数据块 1 写入硬盘 1,数据块 2 写入硬盘 2,数据块 3 写入硬盘 3,数据块 4 再次写入硬盘 1,以此类推。
- 作用: 通过并行读写多个硬盘上的数据条带,显著提高数据的读取和写入性能。
-
分布式奇偶校验 (Distributed Parity):
- 对于每一组横跨所有硬盘的对应数据条带(例如,硬盘 1 的条带 1,硬盘 2 的条带 1,硬盘 3 的条带 1),会计算出一个奇偶校验条带 (parity stripe)。
- 这个奇偶校验条带不是数据的副本,而是通过对同一条带组中的数据进行异或 (XOR) 运算得到的。
- 异或运算的关键特性:
A XOR B = C
A XOR C = B
B XOR C = A
- 奇偶校验条带与同一组的数据条带存储在不同的硬盘上,并且这个存储位置在不同的条带组之间轮换。这就是“分布式”的含义。
工作原理:
-
写入数据: 当写入数据时,数据被分割成条带并写入到相应的硬盘。同时,RAID 控制器会根据写入的数据计算出奇偶校验信息,并将该奇偶校验信息写入到同一条带组的另一个硬盘上。
-
读取数据: 当读取数据时,RAID 控制器可以并行地从多个硬盘读取组成所需数据的条带,从而提高读取速度。
-
硬盘故障与数据恢复: 如果 RAID 5 阵列中的一个硬盘发生故障,存储在该硬盘上的数据条带会丢失。但是,由于每个条带组都有对应的奇偶校验信息存储在其他硬盘上,RAID 控制器可以利用剩余硬盘上的数据条带和奇偶校验条带进行数据重建。
例如,在一个三硬盘的 RAID 5 阵列中,如果硬盘 1 发生故障,控制器可以读取硬盘 2 和硬盘 3 上对应的条带,并利用它们对应的奇偶校验条带来重新计算出原来存储在硬盘 1 上的数据。这是基于异或运算的特性实现的。
为什么需要至少三个硬盘?
考虑一个只有两个硬盘的场景:
- 你可以进行条带化(类似 RAID 0),但没有冗余。
- 你可以进行镜像(类似 RAID 1),但没有条带化带来的性能优势,并且存储效率只有 50%。
在 RAID 5 中,奇偶校验的计算需要至少两个数据条带才能进行有效的异或运算。为了在单个硬盘故障时能够利用奇偶校验信息恢复数据,你需要:
- 至少两个硬盘来存储构成奇偶校验计算的数据条带。
- 至少一个额外的硬盘来存储计算得到的奇偶校验条带。
因此,最少需要三个硬盘,才能实现数据条带化带来的性能优势,同时存储分布式奇偶校验信息以提供单盘容错能力。少于三个硬盘无法同时满足这两个关键条件。