RAID(独立冗余磁盘阵列)技术,全称为 redundant array of independent disks,是目前商用服务器常见的磁盘管理技术。RAID 作为一种磁盘冗余阵列,能够提供一个独立的大型存储设备解决方案。将几个物理磁盘合并成一个更大的虚拟设备,在提高硬盘容量的同时,还能够充分提高硬盘的速度,使数据更加安全,更加易于磁盘的管理。
RAID 的基本作用
- 数据冗余,是指把数据的校验信息存放在冗余的磁盘中,在某些磁盘数据损坏时,能从其他未损坏的磁盘中,重新构建数据。
- 性能提升,是指 RAID 能把多块独立的磁盘组成磁盘阵列,通过把数据切成分片的方式,使得读/写数据能走多块磁盘,从而提升性能。
根据 RAID 的冗余信息程度,切分数据的方式等不同,可以把 RAID 分成不同的级别,分别是
- RAID 0
- RAID 1
- RAID 1+0
- RAID 0+1
- RAID 2
- RAID 3
- RAID 4
- RAID 5
- RAID 6
RAID 0 的基本原理
RAID 0 设计的目标是为了提升读写性能,但并不带冗余信息。
通过将连续的数据拆分成 block(块),将数据块的读写请求分散给各个磁盘,达到“同时”读/写的目的。也叫 Stripe 条带模式。
说明:磁盘上只有实实在在的扇区结构,并没有什么 Stripe 结构,Stripe 只是一种逻辑上由程序根据某种算法实现的一种概念。Stripe 后的多个磁盘,数据的读/写是并行的,而不是读/写满了一个磁盘的 Stripe 区域后,再读/写下个磁盘的 Stripe 区域。
如图所示:
N 块磁盘的 RAID 0 的特性如下:
- 读性能最好情况下是单块盘的 N 倍
- 写性能最好情况下是单块盘的 N 倍
- 数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体读写性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会提高
- 空间利用率为 100%
- 不具有冗余信息,任何一块磁盘损坏,整个 RAID 不可用
RAID 1 的基本原理
RAID 1 的设计目标是为每份数据都提供一份或多分数据冗余。也称为镜像(Mirroring)。
如图所示:
RAID 1 中一个磁盘都有一个或多个冗余的镜像盘,所有磁盘的数据都是一模一样的。RAID 1 读数据时,可以利用所有数据盘的带宽;写数据时,要同时写入数据盘和镜像盘,因此,需要等待最慢的磁盘写完成,写操作才能完成。因此,写性能跟最慢的磁盘相当。
N 块磁盘的 RAID 1 的特性如下:
- 读性能最好情况下是原来的 N 倍
- 写性能跟最慢的磁盘相当
- 空间利用率为 1/N
- N 块盘,坏掉 N-1 块,RAID 还能正常使用
- 具有极高的可靠性和安全性。支持“热替换”,即不断电的情况下对故障磁盘进行更换。
RAID 1+0 的基本原理
直观理解就是先做 RAID 1,再做 RAID 0。
如图所示:
如图,有 HDD07 共八块磁盘,其中 HDD03 是数据盘,HDD4~7 是对应的镜像盘。同时,有“ABCD”四个数据的磁盘写请求。当数据 A 的写请求在磁盘 HDD0 上执行时,就在对应的镜像盘 HDD4 中进行镜像 A'。与此同时,按照与数据 A 类似的步骤,并行在相应磁盘中写入数据 B/C/D。
N 块磁盘的 RAID 1+0 的特性如下:
- 兼顾了 RAID 0 和 RAID 1 的优点,在可靠性和 I/O 性能上有了保证。只要不是数据盘和对应的镜像盘同时出现损坏,数据就能保证完整性,写功能不会受到影响。如果损坏了其中一块比如 HDD0 时,读性能可能会稍微降低(读取数据操作可以并行操作)。
- 需要分出一半的磁盘组作为 mirror,因此空间利用率只有 50%,成本大。
RAID 1+0 由于兼具可靠性和好的性能,在商业应用中很广泛,常应用于数据库等要求安全性、小数据频繁写的场合。
RAID 0+1 的基本原理
直观理解就是先做 RAID 0,再做 RAID 1。
先对数据进行 RAID 0 条带化,然后将 Stripe 后的数据进行备份。
RAID 0+1 几乎不会在实际环境中应用,因为 RAID 0+1 和 RAID 1+0 在读取效率上没有差异,但是 RAID 0+1 在安全性和可靠性上低。
如图所示:
RAID 2 的基本原理
RAID 2 的设计目标就是在 RAID 0 级别的基础上,加入了海明纠错码。
海明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即 SEC(Single Error Correcting)码。海明码通过在要传输的数据位中增加一些 bit 作为校验位,可以验证数据的有效性。
海明码的原理:
如果传输的数据位数为 k,使用的校验位的位数为 r,组成一个 n=k+r 位数的海明码。为了能够发现这 n 位数的数据在传输中是否出错,并且能够指明是哪一位数据出错,那么 r 位的校验位至少能够代表 k+r+1 个状态(k+r 表明出错的位置,其中多出来的 1 表示数据传输正确)。那么关系式如下:
2r-1>=n 或 2r-1>=k+r+1
也就是说,如果要传输 k=4 位数据位,根据算式必须校验位 r>=3,如果 r=3 作为校验位数,那么总共传输的数据位数 n=k+r=7。
RAID 2 就是利用海明码的原理,使用校验磁盘作为错误检查和纠正 ECC 盘。如图所示,A0-A3 四个盘是数据盘,Ax-Az 三个盘是校验盘。
根据原理,海明码只能纠正一个 bit 的错误,并且因为校验的原因,校验位和数据位需要一同并行写入或读取(例如,A0-A3,Ax-Az 的磁盘需要进行联动)。
RAID 2 技术过于极端,目前已经基本被淘汰了。根据原理,RAID 2 需要在 I/O 数据到来之后,控制器将数据按 bit 分开,顺序并同时在每个数据盘和相应校验盘中存放 1bit,而磁盘上的 I/O 最小单位是扇区 512B,那么如何确保写入 1bit 并且不至于浪费过多空间的算法就很复杂,此外,需要占用相对较多的校验盘也是原因之一,虽然随着数据的增加,校验盘的数量会呈指数下降。
N 块盘的 RAID 2 的特性如下:
- 读性能不到原来的 N 倍,因为还有一部分是校验盘
- 写性能会有下降,因为每次都要写校验盘,受限于校验盘的数量
- 空间利用率小于 100%,因为海明纠错码需要的冗余盘一般比数据盘的数量少
- 根据海明纠错码位数的不同,能容忍的坏盘数不同
RAID 3 的基本原理
RAID 3 就是把数据按照字节分别存在不同的磁盘中,并且最后一个磁盘提冗余纠错。
RAID 2 的主要缺点是将数据以 bit 作为单位来分隔,将原本物理连续的扇区转变成了物理不连续、逻辑连续的,这样导致效率低下。RAID 3 就准备从根本上解决这个问题。
RAID 3 保留了 RAID 2 的一些优点,比如多磁盘联动,性能高(利用将一个 I/O 尽量做到能够分割成小块,让每个磁盘能够参与工作)。不过 RAID 3 放弃了将数据分割成 bit 这么极端的做法,因为这样就将磁盘扇区的物理连续性打破了。RAID 3 将数据以一个扇区(512B)或者几个扇区(例如 4KB)作为单位来分割数据。此外,RAID 3 也放弃了使用海明码来校验,取而代之的是 XOR 校验。XOR 校验算法只能判断数据是否有误,不能判断出哪一位有误,更不能更正错误,但是 XOR 算法可以只需要一块校验盘即可。
如图所示:
在一个磁盘阵列中,一般情况下多于一个磁盘出现故障的几率是很小的,所以一般情况下,RAID 3 的安全性还是有保障的。同 RAID 2 一样,由于需要多磁盘同时联动,同时还需要校验。显然,RAID 3 不适用于有大量写操作的情况,因为这样会使校验盘的复负荷较大,降低 RAID 的系统性能。RAID 3 常用于写操作较少,读操作较多的应用环境,比如数据库和 WEB 服务器。
N 块盘的 RAID 3 的特性如下:
- 读性能是 N-1 倍,其中一块是校验盘
- 写性能受限于校验盘的写性能
- 空间利用率为(N-1)/N
- 坏掉一块盘,RAID 还能正常工作
RAID 4 的基本原理
RAID 4 是把数据按照分块分别存在不同的磁盘中,并且最后一个磁盘提供纠错冗余。
从 RAID 2 和 RAID 3 的设计来看,都是为了尽量达到全盘联动,也就是说主要都是为了提高数据传输效率而设计的,但是却无法做到并发 I/O。
然而,现实中的例如数据库等应用的特点就是高频率的随机 I/O 读写,例如每秒产生的 I/O 数目很大,但是每个 I/O 请求的数据长度都很小。这种情况下,如果所有的磁盘同一时刻都被一个 I/0 占用并且不能并发 I/O,只能一个 I/O 一个 I/O 的做,必然产生极大的浪费。
那么,要实现并发 I/O,就需要保证有空闲的磁盘没有被 I/O 占用,这样才能让其他 I/O 去占有这个磁盘的访问。要达到有空闲磁盘的目的,那么就需要增加每次读写的容量,例如按块(block)读写。
RAID 4 对于写 I/O 有个很难克服的问题,那就是校验盘的争用。例如上图 A0-A3 四个数据盘和一个校验盘构成的 RAID 4 系统中,某一时刻一个写 I/O 只占用了 A0 和 A1 两个磁盘和校验盘,此时虽然后面两块磁盘是空闲的,可以同时接受新的 I/O 请求,但是接受了新的 I/O 请求,则新的 I/O 请求也要使用校验盘。这样就导致了校验盘的争用成为了并发的瓶颈。
基于这个原因,需要特别优化请求的 I/O 数据,才能高效使用 RAID 4,然而,要优化到并发几率很高是很不容易的,目前只有 NetApp 的 WAFL 文件系统还在使用 RAID 4,其他产品均未使用了。
RAID 4 面临淘汰,取而代之的是拥有高盲并发几率的 RAID 5 系统。所谓的高盲并发几率,就是上层文件系统不用感知下层磁盘的结构,即可增加并发的几率。
读数据时,当数据分布在多块盘时,能够利用多块数据盘的带宽;写数据时,如果数据分布在多块盘时,能利用所有磁盘带宽,但写校验数据只能在一块盘上,因此,写性能主要受限于校验盘。
N 块盘的 RAID 4 的特性如下:
- 读性能是 N-1 倍,其中一块是校验盘
- 写性能受限于校验盘的写性能
- 空间利用率为(N-1)/N
- 坏掉一块盘,RAID 还能正常工作
RAID 5 的基本原理
RAID 5 是把数据块按照分块分别存在不同的磁盘中,并且冗余信息也会分块分布在多块磁盘中。
奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。
RAID 5 把数据和相对应的奇偶校验信息存储到组成 RAID 的各个磁盘,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意 N-1 块磁盘上都存储完整的数据,也就是说相当于有一块磁盘容量的空间用于存储奇偶校验信息。因此当 RAID 5 的一个磁盘发生损坏后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID 还会自动利用剩下的奇偶校验信息去重建此磁盘上的数据,来保持 RAID 5 的高可靠性。
RAID 5 可以理解为是 RAID 0 和 RAID 1 的折中方案。RAID 5 可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率比镜像高。RAID 5 具有和 RAID 0 近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢。
N 块盘的 RAID 5 的特性如下:
- 读性能是 N 倍
- 写性能略微弱于 RAID 0
- 空间利用率为(N-1)/N
- 坏掉一块盘,RAID 还能正常工作
RAID 6 的基本原理
RAID 6 是把数据块按照分块分别存在不同的磁盘中,并且冗余信息为两份奇偶校验码,分布在多块磁盘中。
类似 RAID 5,但是增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但 RAID 6 需要分配给奇偶校验信息更大的磁盘空间,相对于 RAID 5 有更大的“写损失”,因此“写性能”非常差。
每个硬盘上除了都有同级数据 XOR 校验区外,还有一个针对每个数据块的 XOR 校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的。从数学角度来说,RAID 5 使用一个方程式解出一个未知变量,而 RAID 6 则能通过两个独立的线性方程构成方程组,从而恢复两个未知数据。
伴随着硬盘容量的增长,RAID 6 已经变得越来越重要。TB 级别的硬盘上更容易造成数据丢失,数据重建过程(比如 RAID 5,只允许一块硬盘损坏)也越来越长,甚至到数周,这是完全不可接受的。而 RAID 6 允许两块硬盘同时发生故障,所以渐渐受到人们的青睐。
伴随 CD,DVD 和蓝光光盘的问世,存储介质出现了擦除码技术,即使媒介表面出现划痕,仍然可以播放,大多数常见的擦除码算法已经演变为上世纪 60 年代麻省理工学院林肯实验室开发的 Reed-Solomon 码。实际情况中,多数 RAID 6 实现都采用了标准的 RAID 5 校验比特和 Reed Solomon 码。而纯擦除码算法的使用使得 RAID 6 阵列可以失效两块以上的硬盘,保护力度更强,有些实现方法提供了多种级别的保护,甚至允许用户(或存储管理员)指定保护级别。
N 块盘的 RAID 6 的特性如下:
- 读性能是 N 倍
- 写性能略微弱于 RAID 0
- 空间利用率为(N-2)/N
- 坏掉两块盘,RAID 还能正常工作
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。