• 廉价冗余磁盘阵列
    • ">RAID 的优点
    • ">RAID 的组成
    • ">评估 RAID
  • ">RAID 0
    • ">RAID 0 原理
    • ">大块大小
    • ">RAID 0 分析
  • ">RAID 1
    • ">RAID 1 原理
    • ">RAID 1 分析
    • ">RAID 10 和 RAID 01
  • ">RAID 4
    • ">RAID 4 原理
    • ">RAID 4 分析
  • ">RAID 5
  • ">其他 RAID 级别
    • ">RAID 2
    • ">RAID 3
    • ">RAID 6 和 RAID 7
  • ">RAID 的选择
  • ">参考资料

    廉价冗余磁盘阵列

    廉价冗余磁盘阵列(Redundant Array of Inexpensive Disks, RAID) 技术使用多个磁盘一起构建更快、更大、更可靠的磁盘系统。从外部看 RAID 看起来像一个磁盘,一组可以读取或写入的块。在内部 RAID 是一个复杂的庞然大物,由多个磁盘、内存(包括易失性和非易失性)以及一个或多个处理器来管理系统。硬件RAID非常像一个计算机系统,专门用于管理一组磁盘。

    RAID 的优点

    与单个磁盘相比,RAID 具有许多优点:

    1. 性能高:并行使用多个磁盘可以大大加快 I/O 时间;
    2. 容量大:大型数据集需要大型磁盘;
    3. 提高可靠性:通过某种形式的冗余,RAID 可以容许损失一个磁盘并保持运行;
    4. 可部署性:操作系统和客户端程序无需修改就能使用,而不必担心软件兼容性问题。

      RAID 的组成

      当文件系统向 RAID 发出逻辑 I/O 请求时,RAID 内部必须计算要访问的磁盘(或多磁盘)以完成请求。然后发出一个或多个物理 I/O 来执行此操作,这些物理 I/O 的确切性取决于 RAID 级别。RAID系统通常构建为单独的硬件盒,并通过标准连接(例如,SCSI 或 SATA)接入主机,在内部 RAID 主要由以下组件构成:
    组成部分 说明
    微控制器 运行固件以指导 RAID 的操作
    易失性存储器 在读取和写入时缓冲数据块
    非易失性存储器 安全地缓冲写入
    专用的逻辑电路 执行奇偶校计算

    RAID 是一个非专业的计算机系统,它有一个处理器、内存和磁盘,运行专门用于操作 RAID 的软件。

    评估 RAID

    构建 RAID 有多种不同的方法,每种方法都有不同的特点,通常从 3 个方面评估每种 RAID 设计。

    评估方面 说明
    容量(capacity) 在给定一组 N 个磁盘的情况下,RAID 的客户端可用的容量有多少
    可靠性(reliability) 给定设计允许有多少磁盘故障
    性能(performance) 性能在很大程度上取决于磁盘阵列提供的工作负载

    RAID 0

    RAID 0 原理

    RAID 0 级别实际上不是 RAID 级别,因为没有冗余。但是 RAID 0 级(即条带化,striping)可作为性能和容量的优秀上限,它的思想是以轮转的方式将磁盘阵列的块分布在磁盘上。这种方法的目的是在对数组的连续块进行请求时,从阵列中获取最大的并行性,例如顺序读取 0123 这四个块。
    image.png

    大块大小

    此时也可以在每个磁盘上连续放置 2 个块,然后再移动到下一个磁盘,此时的大块大小就是原来的 2 倍。大块大小主要影响阵列的性能,大小较小的大块意味着许多文件将跨多个磁盘进行条带化,从而增加了对单个文件的读取和写入的并行性。但是跨多个磁盘访问块的定位时间会增加,因为整个请求的定位时间由所有驱动器上请求的最大定位时间决定。
    image.png
    另一方面,较大的大块大小减少了这种文件内的并行性,因此依靠多个并发请求来实现高吞吐量,但是较大的大块大小减少了定位时间。例如,如果一个文件放在一个块中并放置在单个磁盘上,则访问它时发生的定位时间将只是单个磁盘的定位时间。因此确定“最佳”的大块大小是很难做到的,因为它需要大量关于提供给磁盘系统的工作负载的知识。

    RAID 0 分析

    性能 分析
    容量 给定 N 个磁盘,条件化提供 N 个磁盘的有用容量
    可靠性 任何磁盘故障都会导致数据丢失
    性能 很好,通常并行使用所有磁盘来为用户 I/O 请求提供服务

    对于顺序访问,磁盘以最高效的模式运行,花费很少时间寻道并等待旋转,大部分时间都在传输数据。对于随机访问,则大部分时间花在寻道和等待旋转上,花在传输数据上的时间相对较少。

    RAID 1

    RAID 1 原理

    RAID 1 级别为即镜像,对于镜像系统中每个块将存在一个或多个副本,每个副本应该放在一个单独的磁盘上,通过这样做可以容许磁盘故障。假设 RAID 保留两个物理副本,则相邻的磁盘具有相同的内容,数据在这些镜像对之间条带化。
    image.png
    从镜像阵列读取块时,RAID 1 可以读取任一副本,如果对 RAID 1 发出对逻辑块 5 的读取,则可以自由地从磁盘 2 或磁盘 3 读取它。但是在写入块时,RAID 1 必须更新两个副本的数据,以保持可靠性,这些写入可以并行进行。

    RAID 1 分析

    性能 分析
    容量 对于 N 个磁盘,镜像的有用容量为 N/2
    可靠性 可以容许任何一个磁盘的故障
    性能 平均而言比写入单个磁盘略高

    从单个读取请求的延迟角度来看,与单个磁盘上的延迟相同。写入有点不同,RAID 1 需要完成两次物理写入。这两个写入并行发生,因此时间大致等于单次写入的时间。然而因为逻辑写入必须等待两个物理写入完成,所以它遭遇到两个请求中最差的寻道和旋转延迟。

    RAID 10 和 RAID 01

    可以使用多种不同的方法在磁盘上放置块副本,上面的安排有时称为 RAID 10(或 RAID 1+0),因为它使用镜像对(RAID-1),然后在其上使用条带化(RAID-0)。另一种常见安排是 RAID 01(或 RAID 0+1),它包含两个大型条带化(RAID-0)阵列,然后是镜像(RAID-1)。
    image.png

    RAID 4

    RAID 4 原理

    RAID 4 使用奇偶校验(parity)向磁盘阵列添加冗余,它试图使用较少的容量,从而克服由镜像系统付出的巨大空间损失,代价是性能有所降低。对于每一条数据都添加了一个奇偶校验(parity)块,用于存储该条块的冗余信息。例如对于奇偶校验块 P0,具有从块 0、1、2、3 计算出的冗余信息。
    image.png
    奇偶校验主要基于异或(XOR)运算,对于给定的一组比特,如果比特中有偶数个 1,则所有这些比特的 XOR 返回 0,如果有奇数个 1 则返回 1。效果是任何一行中的 1 的数量必须是偶数(而不是奇数),因此可以算出下面这个例子的 P = 0。
    image.png
    同理利用奇偶校验信息从故障中恢复的方法是,读取该行中的所有其他 n-1 个值,通过奇偶校验的特性得到最后一个需要恢复的值。例如下面 X 是需要恢复的值,假设其他磁盘都没有出错,则根据上文的性质可以得出 X = 0。
    image.png

    RAID 4 分析

    性能 分析
    容量 使用 1 个磁盘作为所保护的每组磁盘的奇偶校验信息,有用容量是 N-1
    可靠性 容许1个磁盘故障,如果丢失多个磁盘则无法重建丢失的数据
    性能 单次读取同于单个磁盘请求的延迟,单次写入的延迟需要两次读取,然后两次写入

    RAID 4 的并行性还有待提高,例如上面的 RAID 4,如果需要写入块 1 和 10,则这个过程需要串行处理。首先写入块 1 需要访问磁盘 2 和磁盘 5,接着写入块 10 需要访问磁盘 3 和磁盘 5,由于都需要访问磁盘 5 所以不能并行操作。

    RAID 5

    RAID 5 是旋转奇偶校验,相比 RAID 4 具有更好的并行性。RAID 5 的工作原理与 RAID4 几乎完全相同,只是它将奇偶校验块跨驱动器旋转。但是有时候 RAID5 的性能会比 RAID 4 要好,例如写入块 1 和写入块 10,写入块 1 需要对磁盘 1 和磁盘 4 的请求,写入块 10 需要对磁盘 0 和磁盘 2 请求。此时由于没有交叉,它们可以并行进行。
    image.png
    RAID 5 的大部分分析与 RAID-4 相同,两级的有效容量和容错能力是相同的。在少数情况下 RAID 5 更好,所以它几乎完全取代了市场上的 RAID 4。

    其他 RAID 级别

    RAID 2

    RAID 2 是 RAID 0 的改良版,以汉明码(Hamming Code)的方式将数据进行编码后分割为独立的位元,并将数据分别写入硬盘中。因为在数据中加入了错误修正码,所以数据整体的容量会比原始数据大一些。

    RAID 3

    RAID 3 是具有并行传输功能的磁盘阵列,它只利用一台奇偶校验盘来完成数据的校验功能。与 RAID 4 不同在于只能查错不能纠错,它访问数据时一次处理一个带区,这样可以提高读取和写入速度。RAID 4 对数据的访问是按数据块进行的,也就是按磁盘进行的。

    RAID 6 和 RAID 7

    RAID 6 的阵列中,设置了一个专用的、可快速访问的异步校验盘,该盘具有独立的数据访问通路,具有比 RAID 3 级及 RAID 5 级更好的性能,但其性能改进得很有限,且价格昂贵。RAID 7 是对 RAID6 级的改进,在该阵列中的所有磁盘都具有较高的传输速率和优异的性能,是目前最高档次的磁盘阵列,但其价格也较高。

    RAID 的选择

    如果要求性能而不关心可靠性,那么 RAID 0 条带显然是最好的。但是如果你想要随机 I/O 的性能和可靠性,RAID1 镜像是最好的,代价是容量下降。如果容量和可靠性是你的主要目标,选择 RAID 5,代价是小写入的性能。最后如果在按顺序执行 I/O 操作并希望最大化容量,也可以选择 RAID-5。

    参考资料

    《操作系统导论》[美]Remzi H.Arpaci-Dusseau,Andrea C.Arpaci-Dusseau 著,王海鹏 译,人民邮电出版社
    《计算机操作系统(第四版)》,汤小丹 梁红兵 哲凤屏 汤子瀛 编著,西安电子科技大学出版社