什么是RAID.
- RAID是Redundant Arrays of Independent Disks的首字母缩略词,翻译过来就是由独立磁盘组成的、具有冗余能力的阵列,通常简称为磁盘阵列。RAID是分级别的,不同级别之间并不是单纯的优劣关系,而出于优化某些方面性能而选择了不同的技术来组成磁盘阵列。
什么不是RAID.
- 在出现磁盘阵列系统之前,不同的磁盘之间是没有任何关系的。假设我有磁盘A和磁盘B,存放在磁盘A中的文件和磁盘B一点关系都没有。写入文件时,磁盘B就围观;读取文件时,磁盘B继续围观,同理对于B来说也是这样,A和B是完全独立的数据存储器。两块磁盘这样放在一起,就是1+1=2的结果,没有因为数量的增加而发生某些本质性的变化。这样的结构有个很直接的名字——Just a Bunch Of Disk(仅仅是一堆磁盘),简称为JBOD结构。
- JBOD结构的弊端也很明显了,这来源于它的组织方式(虽然根本没有组织方式),我们操作磁盘A时,磁盘B划水;操作磁盘B时,磁盘A划水。除非好巧不巧,我们恰好同时需要A和B中的数据,否则总有一块磁盘在划水。几乎一半的磁盘性能都在划水中浪费掉了,所以为了完全发挥出每一块磁盘的性能,让我买电脑时花的钱都物尽其用,RAID来了。
用户视角看RAID.
- RAID在我们的电脑中是显示为一块普通磁盘的,也就是说对我们封装了其中的阵列组成细节,我们看不到其中的子磁盘,如下图所示,只有C和D两个磁盘:
- 至于我们向其中写入文件时,它到底是冗余存储一份副本,还是分割之后计算恢复码进行存储,我们都无法感受到。我们只需要像使用传统的磁盘那样使用RAID,存文件、读文件,舒舒服服。
RAID等级.
- 目前行业公认的RAID等级为0-6,不同等级代表的是RAID的功能不同,而非RAID6要比RAID5优秀、先进,买电脑的时候别交了智商税。其中常用的RAID是RAID0、RAID1、RAID5以及RAID6,另外的RAID2、RAID3、RAID4都很少见,只是在理论研究领域讨论得多。另外还有特殊的RAID7以及RAID不同级别的组合阵列。
RAID0.
- 【原理】至少需要两块磁盘,将一份完整的数据拆分为二,写入数据时同时向两块磁盘写入,读取数据时也同时从两块磁盘读出,简单粗暴但是卓有成效,速度肉眼可见地变快了(理论上是2倍)。
- 更加彪悍的一点在于,有n块磁盘,就能够将速度翻n倍,但这一速度是连续读写的速度,也就是一段时间之内连续读取或写入一定大小的数据。随机读写的能力依旧受制于磁盘的寻道和寻址能力,所以组件RAID0以后的随机读写能力相较于无RAID的磁盘系统,并没有很明显的提高。
下图截取自浮梁卖茶人
→
- 相反地,如果是多块磁盘组成的RAID0阵列进行随机读写时,如果出现某一块磁盘突然拉了胯,那么已经完成任务的磁盘就要等待这块不太行的磁盘,出现由于木桶短板效应导致的随机读写能力低下。
- RAID0的连续读写速度是所有磁盘阵列中最快的,但其代价是安全性能是最低的,并且安全性能和速度是反比例关系。假设我有一个10块磁盘组建的RAID0阵列,那么我的每一份数据就被拆分成了10块保存。试想在读取时,只要有一块磁盘中的数据损坏了,那就全都没用了。
RAID1.
- 【原理】一个词概括为镜像,至少需要两块磁盘组成,会将存入的数据复制一份副本存放到另外的磁盘。假如我有磁盘A和磁盘B,那么写入数据时,就会向两块磁盘中写入一模一样的数据,完全可以将其理解为自动备份,而且是全自动实时备份。
- 另外关于我们前面说到的关于用户视角看RAID的问题,用户并不知道RAID1进行了备份存储,所看到的仅仅是一块传统的普通磁盘。
- RAID1和RAID0是存储阵列中的两个极端,前者追求极致安全,复制副本,多重保障(导致空间利用率和速度很低);后者追求极致快感,没有冗余,不留后路(导致数据几乎没有安全性可言)。
RAID2.
- 【原理】是一种利用海明码校验的阵列,主要目的是在RAID0的基础上增加检错能力。关于海明码的细节,可以看●中的12-14条目。
- RAID2由于使用了海明码,也继承了海明码的一大缺点——编码的数据位数越少,实际数据的占比就越低,4位编码对应的海明码是7位,而2位编码对应的海明码是5位,也就意味着磁盘的利用率就越低。
- RAID2兼顾了速度和安全性,类似RAID0那样并发存取数据的能力,但由于存取时又使用了海明码进行检错,又损失了一部分的速度来换取安全性。
RAID3.
- 【原理】使用恢复码技术,至少需要3块磁盘组成。假设现在使用了2块磁盘组成了RAID0阵列,此时发现RAID0没有安全性,所以又增加了一块冗余数据盘用于存放前面两块磁盘的恢复码。
- 当RAID0阵列中有一块磁盘出现损坏时,我们凭借着剩下的一块磁盘以及恢复码还是能够成功读取出数据;而如果恢复码磁盘损坏,也并不影响RAID0阵列中数据的读取。所以相较于RAID0的零容灾,RAID3的容灾能力增加到了1块
- 另外由于继承RAID0阵列的并发存取性能,RAID3的速度是最接近RAID0的;虽然也有一块磁盘用于存放恢复码,但相较于RAID2那种存放多位海明码的策略,恢复码的开销小了很多。
- 【存储策略】假如现在有一个两块磁盘组成的RAID0以及一块恢复码磁盘共同组成的RAID3阵列,那么向其中存储文件A和文件B时,其方法是这样的:首先文件A拆分为组a和组b存入RAID0阵列,恢复码盘中存入a和b两组的恢复码;而后文件B拆分为组c和组d存入RAID0阵列,恢复码盘中存入c和d两组的恢复码,如下所示。
| RAID0-1 |
RAID0-2 |
恢复码盘 |
| A-a |
A-b |
Recover(a,b) |
| B-c |
B-d |
Recover(c,d) |
- 注意RAID3的存储策略,和RAID4的进行比较。
RAID4.
- 【原理】和RAID3相同的恢复码思想,区别在于存储时的策略。
- 【存储策略】和上面RAID3中相同的情景假设,RAID4会将两个文件整个的恢复码准备好,然后整理写入,如下所示:
| RAID0-1 |
RAID0-2 |
恢复码盘 |
| A |
B |
Recover(A,B) |
- RAID4中的一个关键角色就是增加的恢复盘,注意恢复盘仅有那一块,3块数据盘的时候使用一块恢复盘,5块数据盘的时候也是使用一块恢复盘,10块数据盘依旧是使用这一块恢复盘,这样的设置使得恢复盘成为了制约整个磁盘阵列性能的瓶颈。如果一次写入的过程中,数据盘的数据都已经写入完成,但恢复盘还在写入,那么是无法开启下一次写数据的。
RAID5.
- 【原理】RAID5针对RAID4中的问题,采取不指定恢复码,而是将恢复码分散道各个磁盘中。
- 例如现在有一个4块磁盘组成的RAID5,向其中写入文件A、B和C,存储的策略如下所示:
| 1 |
2 |
3 |
4 |
| Recover(A1,B1,C1) |
A1 |
B1 |
C1 |
| A2 |
Recover(A2,B2,C2) |
B2 |
C2 |
| A3 |
B3 |
Recover(A3,B3,C3) |
C3 |
| A4 |
B4 |
C4 |
Recover(A4,B4,C4) |
- 细细分析,RAID5是有一块磁盘的容灾能力的,无论哪一个磁盘损坏,剩余的磁盘都能够恢复出完整的数据;另外RAID5也能够做到接近RAID0的读写性能,还解决了RAID4中存在的恢复码磁盘成为性能瓶颈的问题。这些优点使得RAID5成为了民用层面出现最为广泛的RAID。关于RAID5,CCF认证中曾今出过一道第三题【20190303】,当时也是对于RAID一点概念都没有,完全抓瞎。
RAID6.
- 【原理】RAID3-RAID5在增加了一块恢复盘的情况下,其容灾能力都只是一块磁盘。可如果有人就是那么天选,就要坏超过一块磁盘,那就选择RAID6——两块恢复码磁盘,超强容灾能力(2块)。
- 例如现在有一个5块磁盘组成的RAID6,向其中写入文件A、B和C,存储的策略如下所示:
| 1 |
2 |
3 |
4 |
5 |
| A1 |
B1 |
C1 |
Recover(A1,B1,C1) |
Recover(A1,B1,C1) |
| A2 |
B2 |
Recover(A2,B2,C2) |
Recover(A2,B2,C2) |
C2 |
| A3 |
Recover(A3,B3,C3) |
Recover(A3,B3,C3) |
C2 |
B3 |
| Recover(A4,B4,C4) |
Recover(A4,B4,C4) |
A4 |
B4 |
C4 |
RAID7.
- RAID7和前面出现RAID0-6几乎完全是两个世界的存在了,RAID0-6之间都是基于在安全性与读写速度之间进行平衡或优化的理念而设计的,本身并没有脱离CPU的管辖范围。而RAID7除了是一种组织磁盘阵列的技术以外,其本身就是一个独立的计算机系统,拥有自己的操作系统和管理工具,是完全可以独立运行的。
- RAID7是目前为止理论上性能最高的磁盘阵列架构,其组成方式相较于之前的RAID就有了很大的不同,下图是RAID6和RAID7的组成结构展示:


- 【我的理解】我看出来的不同就是RAID7中应该是能够直接访问不同磁盘中的每一个Block,这样的设计使得在读写某一区域的数据时能够迅速地定位,不会像RAID6的组织形式那样局限于单个磁盘的寻道,也就是说RAID7中每一个硬盘都相当于以往的多个独立硬盘(我认为就是每一个Block都作为一个Disk存在了),所以能够达到相当高的存取效率。如果有不对的地方欢迎指出,毕竟我确实没见过RAID7,买不起主要是。
- 注意上图RAID中有一块区域名为Real Time Operation System,这一实时操作系统能够对随机发生的外部事件(指那些与计算机系统所连接的设备提出的服务要求)做出及时的响应并处理。
RAID7 通过自身系统中的专用控制板来控制读写速度,存储计算机操作系统可使主机 I/O 传递性能达到最佳。如果一个磁盘出现故障, RAID7 还能够自动执行恢复操作,并可管理备份磁盘的重建过程。RAID7 突破了以往 RAID 标准的技术架构,采用了非同步访问,极大地减轻了数据写瓶颈,提高了 I/O 速度。 RAID7 系统内置实时操作系统还可自动对主机发送过来的读写指令进行优化处理,以智能化方式将可能被读取的数据预先读入快速缓存中,从而大大减少了磁头的转动次数,提高存储系统的 I/O 速度。RAID7 可帮助用户有效地管理日益庞大的数据存储系统,并使系统的运行效率大大提高,满足不同用户的存储需求。但是, RAID7 的成本比其他 RAID 等级要高许多。另外, RAID7 已被某公司注册为商标,目前仅有一家公司提供 RAID7 的产品,用户没有更多的选择。技术封闭,缺乏主流专业存储厂商的参与和研发严重制约了 RAID7 的发展。
- 【一点小疑问】为什么RAID7组成图中的最后一部分,是PANTY呢,很奇怪啊。
组合RAID.
- 即将多种RAID的阵列组织技术复合起来,常见的有RAID10以及RAID50,千万不要以为是某种超级先进的RAID技术。一听人说这是RAID50,以为比RAID5猛到哪去了,又交一波智商税。
RAID10.
- 首先将磁盘在第一级组成多个RAID0阵列结构,而后将每一个RAID0结构视为一个整体上的虚拟磁盘,将它们组建成一个RAID1阵列结构,这就是所谓的RAID10.
- 例如我们有四块磁盘,名字为a、b、c、d,我们将(a,b)、(c,d)分别组件为RAID1的结构,而后将这两组视为两个单独的磁盘,组建一个RAID0的结构,如下图所示:
RAID50.
- 和RAID10异曲同工,在第一级将多块磁盘组织成多个RAID5阵列结构,而后在第二级将这些RAID5阵列视为单个独立磁盘,组建RAID0阵列结构,这就是RAID50.
总结.
- 基本上较为常见的磁盘阵列就是如上介绍的这些,关于更多存储厂商私有定制的RAID级别,我也不是很了解,不是那种对于硬件设备门儿清的人,我这只管拿来用了。
- 有兴趣的可以看这篇文章,看起来挺专业的,我也不是很懂。