目前单块磁盘的容量已经能达到8TB,但这对于现代应用程序来说还远远不够。那么是否必须要制造单盘容量更大的硬盘,为解决这个问题人们发明了RAID(Redundant Arrays of Independent Disks,独立磁盘冗余阵列)技术。
RAID最初是为了组合小的廉价磁盘来代表大的昂贵磁盘,同时希望磁盘失效时不会对数据的访问造成损失而开发的一定水平的数据保护技术。它就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下作为一个独立的大型存储设备出现。RAID充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能,确保数据的安全性,易于管理,并在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响。
RAID简单的理解就是将多台硬盘通过RAID控制器(基于软件和硬件)结合成虚拟单台大容量的硬盘使用。目前,RAID技术的实现方式大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。基于软件的RAID包含在操作系统中,其RAID功能完全用软件方式由系统的核心磁盘代码来实现。基于硬件的RAID是利用硬件RAID适配卡来实现的。RAID适配卡上集成了处理器,能够独立于主机对存储子系统进行控制。因为拥有自己独立的存储器和处理器,RAID适配卡可以自己计算奇偶校验信息并完成文件定位,减少对主机CPU运算时间的占用,提高了数据传输速度。由此可见,基于硬件的RAID比基于软件的RAID在工作性能上要强一些。
根据组成磁盘阵列的磁盘组织架构、数据布局以及相关技术的不同,磁盘阵列可以分为多种级别。
RAID0是最早出现的RAID模式,即数据分条(Data Stripping)技术。RAID0是组建磁盘阵列中最简单的一种形式,只需要两个以上的硬盘即可,成本低,且可以提高整个磁盘的性能和吞吐量。RAID0没有提供冗余或错误修复能力,但实现成本是最低的。
RAID0最简单的实现方式就是把N个同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以软件的方式串联在一起创建一个大的卷集。在使用中计算机数据依次写入各硬盘中,它的最大优点就是可以成倍地提高硬盘的容量。最大的缺点在于任何一个硬盘出现故障,整个系统将会受到破坏,可靠性仅为单独一个硬盘的1/N。为了解决这一问题,便出现了RAID0的另一种模式,即在N个硬盘上选择合理的带区来创建带区集,其原理就是将原先顺序写入的数据分散到所有的N个硬盘中同时进行读写,这样对N个硬盘的并行操作使得同一时间内磁盘读写的速度较串联读写模式提升了N倍。
虽然RAID0可以提供更多的空间和更好的性能,但是整个系统是非常不可靠的,如果出现故障,无法进行任何补救。所以,RAID0一般只是在那些对数据安全性要求不高的情况下才被人们使用。
RAID1是利用镜像技术来实现存储数据容错的阵列技术,又称为磁盘镜像,它对存放的数据完全冗余,通过简单地将一个盘上的数据镜像到另一个盘上来实现数据冗余,当数据写在某一个硬盘上时,它会同时被写到相应的镜像盘上,在不影响性能的情况下最大限度地保证了系统的可靠性和可修复性。RAID1中的数据盘与镜像盘没有主从关系,它们可以相互镜像或恢复。这种方法虽然简单,但实现成本却要比RAID0贵一倍。在这种模式下,任何一个硬盘出现故障都不会影响到整个阵列的正常工作,因为它还有一个镜像盘可以工作,甚至在一半数量以上的硬盘出现问题时系统都可以正常工作。
RAID1主要是通过二次读写实现磁盘镜像,因此磁盘控制器的负载也相当大,尤其是在需要频繁写入数据的环境中。为了避免出现性能瓶颈,使用多个磁盘控制器就显得很有必要。
RAID2采用内存系统中常用的纠错码——汉明码进行数据保护。汉明码是在原有数据中插入若干校验码来进行错误检查和纠正的编码技术,它根据现有的数据编码各位的值,生成自己的校验码,然后再将校验码与原来的数据码合并,转换成新的数据编码。
RAID2中也采用数据条带的方式进行存取,在RAID2中,条带非常小,用户数据以位或字节为单位进行条纹化,划分为若干相互重叠的子集,每个子集的用户数据计算校验数据并存放在一个校验磁盘上。当一个磁盘发生故障时,几个校验组的数据会不一致,而丢失数据即为这几个校验组共同包含的数据,用其中一个校验组的剩余数据即可恢复丢失数据。RAID2一般应用于多磁盘易出错环境中,对于单磁盘而言意义不大。
RAID3是在RAID2的基础上发展而来的,关键是使用相对简单的奇偶校验代替了较为复杂的汉明码校验,大大降低了阵列的成本。与RAID2不同的是,无论磁盘阵列数目有多少,RAID3只需要单个冗余校验盘。在RAID3中,数据分布在不同的较小的条带上,并且进行并行方式读写操作。如果一块磁盘失效,奇偶盘与其他数据盘可以重新生成数据,如果奇偶盘失效则不影响数据使用。
RAID4是独立的数据盘和共享的校验盘阵列技术,它以数据块为单位进行存储空间分配。RAID4使用一个磁盘作为奇偶校验盘,每次写操作都需要访问校验盘,这时校验盘也会成为写操作的瓶颈。
RAID4与RAID3基本相同,不同之处在于RAID4采用粗粒度条纹化,条纹单元较大。由于条纹单元较大,多数较小请求只涉及一个磁盘,磁盘阵列可并行处理多个请求。因此RAID4更适合用于并发度高,而请求相对较小的应用。但对于相对较大的请求,RAID4也可提供较高的数据传输率。
RAID5是目前市场上最常见的RAID产品,它是一种无独立校验盘的奇偶校验硬盘阵列,它具有较高的存储性能、较强的数据安全性以及实现成本低等特点。它的奇偶校验码存在于所有磁盘上,当硬盘出现问题时,可以利用剩下的数据和对应的奇偶校验信息来恢复磁盘阵列和正常工作。RAID3与RAID5相比,重要的区别在于RAID3每进行一次数据传输,需涉及所有的阵列盘。而对于RAID5来说,大部分数据传输只对一个磁盘操作,可进行并行操作。在RAID5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
RAID6的基本思想就是进行两种不同的奇偶计算,并将校验数据分开存储在不同的磁盘上。那么,如果用户需要N个磁盘的阵列,则总的磁盘数目将是N+2。RAID6在设计时引入两级冗余的技术,主要是为了保证即使阵列中出现两个硬盘同时失效,仍然能够正常工作,并恢复相应的数据。该技术把数据和校验信息分布到一组硬盘中,当有硬盘失效时,丢失的那部分数据则可以通过剩余硬盘上的数据和校验信息通过计算而恢复。所以说,RAID6是一种双重奇偶校验存取阵列。RAID6的控制器在设计时非常复杂,实现成本极高,目前主要用于数据绝对安全的环境中,不太适合于普及应用。
在实际应用中,选择相应RAID级别主要依据可用性、存储性能和实现成本这三个因素,RAID基本级别的一些主要特征如表1-3所示。
表1-3 RAID级别对照表