# RAID 磁盘阵列

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击[联系博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

## 一、摘要

&#x20;          早在 1978 年美国加州大学伯克利分校就提出了 RAID 虚拟存储系统。&#x20;

&#x20;          **RAID 全称**： **Redundant Array of Independent Disk**，独立冗余磁盘阵列。其思想是将多块独立的磁盘 按不同的方式组合为一个逻辑磁盘，从而提高存储容量或提升存储性能或提供数据备份功能。&#x20;

&#x20;          RAID 存储系统的组合方式根据 RAID 级别定义。&#x20;

**RAID 种类**：软件 RAID，硬件 RAID。在现有的操作系统中如 Windows、 Linux、 Unix 等已经集成了软 RAID 的功能。

* **软件 RAID** 可以实现与硬件 RAID 相同的功能，但由于其没有独 立的硬件控制设备，所以性能不如硬件 RAID，但软 RAID 实现简单、不需要额外的硬件设备。&#x20;
* **硬件 RAID** 通常需要有 RAID 卡， RAID 卡本身会有独立的控制部件与内存，所以不会占有系统资源，效率高、性能强。当然目前市面上有很多主板已经集成了 RAID 卡，具体的使用方 式可以参考硬件说明书。&#x20;

现在 RAID 存储系统被广泛应用于生产环境作为存储解决方案。

## 二、RAID 级别

&#x20;           RAID 根据组合的方式不同有多种设计解决方案，以下介绍几种常见的 RAID方案（RAID 级别）。

### RAID 0 &#x20;

#### 不含校验与冗余的条带存储

多块磁盘组合为 RAID 0 后，数据将被分割并分别存储在每块硬盘中，所以能最大的 提升存储性能与存储空间，但无法容错， RAID 0 至少需要两块磁盘。存储原理如下图：

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5Y36CYyaQjT3ti9h1v%2F-M5Y3tKh3p2qgoGjBRUe%2Fimage.png?alt=media\&token=491c7828-905e-4a23-b63f-5351b8aa8a8b)

**说明：**&#x52;AID0 的读写性能理论上是单块磁盘的N倍（仅限理论，因为实际中磁盘的寻址时间也是性能占用的大头）

但RAID0的问题是，它并不提供数据校验或冗余备份，因此一旦某块磁盘损坏了，数据就直接丢失，无法恢复了，因此RAID0就不可能用于高要求的业务中，但可以用在对可靠性要求不高，对读写性能要求高的场景中。

* **原理：** 它将两块以上的硬盘合并成一块，数据同时分散在每块[硬盘](https://baike.baidu.com/item/%E7%A1%AC%E7%9B%98/159825)中。由于带宽加倍，读/写速度也加倍。这种数据上的并行操作可以充分利用总线的[带宽](https://baike.baidu.com/item/%E5%B8%A6%E5%AE%BD/266879)，显著提高磁盘整体存取性能，但同时忽略了数据的可靠性，其中的任何一个硬盘失效或故障则影响到所有的数据。
* **优点：**&#x6CA1;有数据冗余，高可用性，很高的传输速率，大大提高储存性能
* **缺点：**&#x56E0;为没有校验与备份，两个硬盘中如果有一块磁盘损坏，即磁盘中的任何一个 数据块损坏将导致整个文件无法读取。

#### 适用环境：适用于对性能要求高，而对数据安全不太在乎的领域，如个人，或者图像工作站等对数据安全要求不高的领域

{% hint style="warning" %}

#### 注意事项：

1. **RAID0的两个硬盘必须容量、规格相同。**
2. **组成RAID0的两个硬盘在改变主从盘设置时将需要重新分区，原来磁盘里的所有数据将全部丢失。**
3. **同一通道的两个硬盘在不改变主从盘设置的前提下可以更改位置，其结果不影响磁盘里的数据和读写操作。**
4. **组成RAID0的磁盘改变为无RAID的模式或无RAID模式的一对磁盘改变为带RAID0模式时， 系统将需要对相应的磁盘重新分区，原硬盘里的所有数据将全部丢失**。
   {% endhint %}

### RAID 1

#### 不含校验的镜像存储

多块磁盘组合为 RAID 1 后，数据将被同时复制到每块硬盘中，制作这种磁盘阵列 至少需要 2 块硬盘，该级别的 RAID 只要有一块磁盘可用即可正常工作，该级别的阵列安全 行是最好的，磁盘利用率是最低的。

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5Y8wo2JNk2k5sdNpN8%2F-M5Y9LdbcDlsCF26Un3-%2Fimage.png?alt=media\&token=a478f5a3-28cf-4ade-bc2b-65e16fe076bc)

**说明：**&#x52;AID1 是磁盘阵列中单位成本最高的一种方式，因为它的原理是在往磁盘写数据的时候，将同一份数据无差别的写两份到磁盘，分别写到工作磁盘和镜像磁盘，那么它的实际空间使用率只有50%了，两块磁盘当做一块用，这是一种比较昂贵的方案。 RAID 1 写 入数据的效率会降低，因为数据需要同时写入两块磁盘，但 RAID 1 读取数据的效率会提升， 因为可以同时从两块磁盘读取数据。

* **原理**：将一块硬盘的数据以相同位置指向另一块硬盘的位置， RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。
* **优点：**&#x6700;大限度的保证用户数据的可用性和可修复性，安全性高
* **缺点：**&#x7531;于完整备份，导致磁盘利用率低下（1/2），存储成本高，不能提高存储性能

#### 适用环境：存放重要数据，如服务器和数据库存储等领域。

{% hint style="warning" %}

#### 注意事项：两个硬盘必须容量、规格相同，

{% endhint %}

### RAID 2

#### 位级别的校验式条带存储

&#x20;RAID 2是RAID 0的改良版，以[汉明码](https://baike.baidu.com/item/%E6%B1%89%E6%98%8E%E7%A0%81/3226749)（Hamming Code）的方式将数据进行编码后分割为独立的位元，并将数据分别写入硬盘中。因为在数据中加入了错误修正码（ECC，Error Correction Code），所以数据整体的容量会比[原始数据](https://baike.baidu.com/item/%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE/10119290)大一些。

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5YLYntetGo39AFv6Ye%2F-M5YOs31kcYrAHokKDYL%2Fimage.png?alt=media\&token=9152425b-bc3d-4518-af7d-b0c8572fa172)

**说明：** RAID 2是为大型机和[超级计算机](https://baike.baidu.com/item/%E8%B6%85%E7%BA%A7%E8%AE%A1%E7%AE%97%E6%9C%BA)开发的带[汉明码](https://baike.baidu.com/item/%E6%B1%89%E6%98%8E%E7%A0%81)校验[磁盘阵列](https://baike.baidu.com/item/%E7%A3%81%E7%9B%98%E9%98%B5%E5%88%97)。它是将数据条带化地分布于不同的硬盘上，条块单位为位或者字节，并使用“加重平均纠错码”的编码技术来提供错误检查及恢复，这种纠错码也被称为“海明码”。海明码需要多个磁盘存放检查及恢复信息，使得RAID2技术实施更复杂，因此在商业环境中很少使用。

磁盘驱动器组中的第1个、第2个、第4个......第2的n次[幂](https://baike.baidu.com/item/%E5%B9%82/16481527)个磁盘驱动器是专门的效验盘，用于效验和纠错。

* **原理：**&#x52;AID2的设计目标是在RAID0级别的基础上，加了海明纠错码，将数据条块化分布于不同的硬盘上， 条块单位为位或字节。然而RAID 2 使用一定的编码技术来提供错误检查及恢复。&#x20;
* **优点：**&#x5927;数据量的读写具有极高的性能。
* **缺点：**&#x5C11;量的数据读写时性能反而不好，数据的整体容量会比原来的大一些，实际使用较少。

**适用环境：**&#x5927;数据量的读写，如进行影像处理或者CAD/CAM的工作站等，并不适用于一般的多用户环境、网络服务器和PC。

{% hint style="warning" %}

#### 注意事项：由于RAID 2的特殊性，只要我们使用的磁盘驱动器越多，效验盘在其中占的百分比越少。

{% endhint %}

### RAID 3

#### 字节级别的校验式条带存储

RAID3是把数据按照字节分别存在不同的磁盘中，并且最后一个磁盘提供纠错冗余

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5YVfyilW4Mgk_f2O9Y%2F-M5YVuxxNkyozGUxiMjY%2Fimage.png?alt=media\&token=f3b6b866-3ac2-449b-81d5-612856e6d7c8)

**说明：**&#x52;AID 3是把数据分成多个“块”，按照一定的容错算法，存放在N+1个硬盘上，实际数据占用的有效空间为N个硬盘的空间总和，而第N+1个硬盘上存储的数据是校验容错信息，当这N+1个硬盘中的其中一个硬盘出现故障时，从其它N个硬盘中的数据也可以恢复原始数据

* **原理：** RAID3的数据存取方式和RAID2一样，把数据以位为单位来分割并且存储到各个硬盘上，并且在数据安全方面以[奇偶校验](https://baike.baidu.com/item/%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C)取代海明码做错误校正及检测，所以只需要一个额外的校验盘。

奇偶校验值的计算是以各个硬盘的相对应位进行异或的逻辑运算，然后将结果写入奇偶校验硬盘。

* **优点：**&#x5B89;全性是可以都到保障，坏掉一块盘，还可以正常工作。
* **缺点：**&#x6548;验盘很容易成为系统的瓶颈，访问较短记录时，性能会有所下滑，实际适用较少。

**适用环境：**&#x9002;用于写入操作较少，读取操作较多的应用环境，如数据库和web服务器等。

{% hint style="warning" %}

#### 注意事项：对于哪些经常需要执行大量写入操作的应用来说，效验盘的负载将会很大，无法满足程序的运行速度。

{% endhint %}

### RAID 4

#### 数据块级别的校验式条带存储

RAID4是把数据按照分块分别存在不同的磁盘中，并且最后一个磁盘提供纠错冗余

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5YaLZ1p63qDTnSl9Nv%2F-M5Yae2_JP7tQLt07TBO%2Fimage.png?alt=media\&token=c3f6fd5d-3f1c-4889-a67d-b0796d9159b9)

**说明：** RAID4和RAID3很象，数据都是依次存储在多个硬盘之上，奇偶校验码存放在独立的奇偶校验盘上，唯一不同的是，在数据分割上RAID3对数据的访问是按位进行的，RAID4是以数据块为单位。

一个数据块是一个完整的数据集合，比如一个文件就是一个典型的数据块。当然，对于硬盘的读取，一个数据块并不是一个文件，而是由操作系统所决定的，这就是我们熟悉的簇（Cluster）。RAID 4这样按块存储可以保证块的完整，不受因分条带存储在其他硬盘上而可能产生的不利影响（比如当其他多个硬盘损坏时，数据就完了）。

* **原理：**&#x628A;数据以块为单位来分割并且存储到各个硬盘上，不同的是RAID 4在写入时要等一个硬盘写完后才能写一下个，并且还要写入校验数据所以写入效率比较差，读取时也是一个硬盘一个硬盘的读，但校验迅速，所以相对速度更快。
* **优点：**&#x52;AID3访问所有磁盘，RAID4访问有用的，读数据的速度大大提高。
* **缺点：**&#x5199;数据需要校验，处理时间较长，恢复数据难度大，控制器的设计难度也大。

**适用环境：**&#x6821;验硬盘和RAID3一样，也形成其性能的瓶颈。在失败恢复时，它的难度比RAID3大得多了，控制器的设计难度也要大许多，推荐适用其他RAID方案。

### RAID 5

#### 数据块级别的分布式校验条带存储

RAID5跟RAID4一样，把数据以块为单位来分割，不同的是RAID5把数据块分别存在不同的磁盘中，并且冗余信息也会分块分布在多块磁盘中

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5YgjM-68u4RtSmZu3M%2F-M5YhvzDQxURXpBx4kho%2Fimage.png?alt=media\&token=5218bd5c-20e5-47b2-8454-b160ee61f0e5)

**说明：**&#x6570;据以块为单位分布到各个硬盘上。RAID 5不对数据进行备份，而是把数据和与其相对应的[奇偶校验](https://baike.baidu.com/item/%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C)信息存储到组成RAID5的各个磁盘上，并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。

* **原理：**&#x52;AID5把数据和与其相对应的[奇偶校验](https://baike.baidu.com/item/%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C)信息存储到组成RAID5的各个磁盘上，大大减轻了奇偶校验盘的负载。
* **优点：**&#x574F;掉一块盘，RAID还能正常工作，数据安全性高，速度较快，磁盘利用率也相对较高，应用广泛。
* **缺点：**&#x53EA;允许有一块磁盘出现故障，必须及时恢复。

#### 适用环境：

1. 输入/输出 密集，读/写 比率高的应用程序，事务处理等。

{% hint style="warning" %}

#### 注意事项：只允许有一块磁盘出现故障，出现故障是需要尽快更换，当更换故障磁盘后，在故障期间写入的数据会进行重新校验，如果在未解决故障又坏一块，那就是灾难性的了。

{% endhint %}

### RAID6 <a href="#raid6" id="raid6"></a>

#### 带有两个独立分布式校验方案的独立数据磁盘

RAID6是把数据块按照分块分别存在不同的磁盘中，并且冗余信息为两份奇偶校验码，分布在多块磁盘中

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5Yn25JJ5DTmLrydZUT%2F-M5YpWL7UXHt2G34nIgX%2Fimage.png?alt=media\&token=d6ad081e-5865-4d27-9b44-5346b6a6210a)

**说明：**&#x52;AID6是在RAID5的基础上为了进一步加强数据的保护而设计的一种RAID的方案， 与RAID 5的不同之处于除了每个[硬盘](https://baike.baidu.com/item/%E7%A1%AC%E7%9B%98/159825)上都有同级数据XOR校验区外，还有一个针对每个[数据块](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%9D%97/107672)的XOR校验区。

这样一来，等于每个[数据块](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%9D%97/107672)有了两个校验保护屏障（一个分层校验，一个是总体校验），因此RAID 6的[数据冗余](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%86%97%E4%BD%99/10168463)性能相当好。但是，由于增加了一个校验，所以写入的效率较RAID 5还差，而且控制系统的设计也更为复杂，第二块的校验区也减少了有效[存储空间](https://baike.baidu.com/item/%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4/10657950)。

* **原理：**&#x8DDF;RAID5一样，多了一个总体校验。
* **优点：**&#x66F4;高的数据冗余，坚强的数据保护能力，可以应付多个硬盘同时发生故障。
* **缺点：**&#x975E;常复杂的控制器设计、计算校验地址占用相当多的处理时间、由于第二个校验区，至少需要N+2个硬盘。（N表示大于1的整数）。

{% hint style="warning" %}

#### 注意事项：一个RAID6的阵列中可以最多有16个硬盘。

{% endhint %}

### RAID7

#### &#x20;最优化的异步高I/O速率和高[数据传输率](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%8E%87/603683)

RAID 7等级是至今为止，理论上性能最高的RAID模式，因为它从组建方式上就已经和以往的方式有了重大的不同。

### **RAID1 + 0**

#### 镜象阵列条带

RAID10其实就是RAID1与RAID0的一个合体。

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-M5YuyQbscACRNZhh-OU%2F-M5YvOcj-43nAzxGT2QZ%2Fimage.png?alt=media\&token=2ad5c41f-abb0-4f55-97b3-747938e2cf08)

**说明：**&#x52;AID10兼备了RAID1和RAID0的有优点，首先基于RAID1模式将磁盘分为2份，当要写入数据的时候，将所有的数据在两份磁盘上同时写入，相当于写了双份数据，起到了数据保障的作用，且在每一份磁盘上又会基于RAID0技术将数据分为N份并发的读写，这样也保障了数据的效率。

* **原理：**&#x5148;进行镜像（RAID1），再进行条带存放（RAID0）。
* **优点：**&#x7EE7;承了Raid0的快速和Raid1的安全。
* **缺点：**&#x52;AID10需要4 + 2\*N 个磁盘驱动器（N >=0)， 而且只能使用其中一半或更小的磁盘用量，例如 4 个 250G 的硬盘使用RAID10 阵列， 实际容量是 500G。

#### 适用环境：

1. 适用于数据库存储服务器等需要高性能、高容错但对容量要求不大的场合。

{% hint style="warning" %}

#### 注意事项：

#### 注意一下Raid 10 和 Raid01的区别：

1. **RAID01又称为RAID0+1，先进行条带存放（RAID0），再进行镜像（RAID1）。**
2. **RAID10又称为RAID1+0，先进行镜像（RAID1），再进行条带存放（RAID0）。**
   {% endhint %}

####
