RAID 6简史
上帝他老人家有言在先:太阳底下没有新鲜事。从2004年起逐渐成为焦点话题的RAID 6,其实早在1993年就已被定义,而StorageTek随后便着手开发支持RAID 6技术的Iceberg系列,其1995年出货的Iceberg 9200磁盘阵列子系统更一度被引为实现RAID 6的元老——要知道1988年RAID概念才真正成形,这个时间似乎还不能算晚……
之后发生的事情大家都很清楚——RAID 6的受欢迎程度远不及RAID 5,到本世纪初甚至已少有人知。原因并不复杂:RAID 6采用双重校验,在一个RAID组中需要“浪费”两台硬盘驱动器的容量来保存校验数据,写入数据的速度亦因此而受到更大的影响。既然所消耗的磁盘空间超过RAID 5,并有明显的性能下降,RAID 6遭到冷遇也就不足为奇了。
直到上世纪90年代末,RAID 5还是SCSI/FC硬盘的领地,它们的可靠性很高,一个RAID组内同时坏掉两台硬盘驱动器的几率不大。另一方面,为了保证性能,有些大型数据仓库(OLTP类应用)甚至舍RAID 5而RAID 1。在这种情况下,效率和性能都有所不及的RAID 6自然难觅出头的机会。
支持RAID 6的HighPoint RocketRAID 3220 SATA RAID卡
2001年之后,SATA RAID的异军突起给RAID 6带来了“咸鱼翻生”的契机。SATA硬盘驱动器的容量动辄几百GB(现在已达1TB),速度又相对较慢,完全访问一遍至少要几个小时,加之可靠性没有SCSI/FC硬盘驱动器那么高,坏掉一台硬盘驱动器的RAID组在重建过程中,“幸存者”们再有个三长两短的可能性要大很多。正所谓“祸兮福所倚”,RAID 6由此获得了再战江湖的主要推动力。
人们对“双保险”的需求使RAID 6重获关注,但并非每种能够容忍两台硬盘驱动器(同时)离线的技术都属于RAID 6。不过,由于RAID 6的“名头”过于响亮,引得惠普(HP)的RAID 5 ADG和NetApp的RAID-DP等技术都来搭顺风车,客观上也壮大了RAID 6的声势。
ADG是Advanced Data Guarding的简写,即“高级数据保护”,其历史可以追溯到康柏(Compaq)时代。RAID 5 ADG与RAID 5一样将校验数据分散在所有的硬盘驱动器上,只是多了一重校验,并需要增加一块硬盘驱动器来保证同样的有效存储空间,因而从血统上来说,RAID 5 ADG符合RAID 6的传统定义。当初RAID 6的知名度还不高,用“ADG”的称呼对市场宣传比较有利,现在改成“RAID 6 (ADG)”的写法也无可厚非。
RAID-DP是在RAID 4的基础上发展而来,继承了后者的独立校验盘设计,区别在于校验盘增加了一个,形成Double-Parity,明明白白地告诉大家是“双重校验”。从这个意义上来说,RAID-DP不能算RAID 6,然而两者所用的算法却有一定的渊源。
RAID 6的“对角线算法”示意图,第一重校验P是与RAID 5相同的水平校验,第二重校验P'则是斜向校验(绿色斜线方向),可以看到磁盘3(纵向最右一列)其实就是一个独立的校验盘。对角线方向上的三条绿色斜线覆盖的区域都有P和P',形成双重校验
很多种算法都可以实现RAID 6,其中就有一种在横向和斜向两个方向上进行XOR(异或)运算的Dual-XOR算法,横向当然是与RAID 5一样了,区别在于斜向,所以也被称为“对角线算法”。它的校验数据生成过程相对简单,但在两台硬盘驱动器掉线的时候,只能支持逐个数据块的恢复,而且不同条带之间还要一起参与计算(斜向嘛)。这种做法在分布式校验的环境中很是麻烦,却很适合独立校验的口味,于是成为了RAID-DP的基础。
NetApp的RAID-DP采用独立校验盘,以“P”和“DP”代表,后者体现出了与前述“对角线算法”的共同点
真正被广为接受的还是基于P+Q的RAID 6算法。这个P么,就是RAID 5的那个P(Parity),也即同一条带中全部原始数据(当然不包括Q)的XOR运算结果。至于多出来的Q,则是同一条带中其他数据(包括P)进行伽罗华域(Galois Field,简称GF,有限域)乘法运算的结果。
广为采用的P+Q RAID 6原理示意图,P和Q虽然是对角线分布的,但运算都发生在水平方向上,即同一条带(Stripe)内,这简化了恢复过程
P+Q算法的优势在于恢复数据相对简单。在一台硬盘驱动器掉线时,丢掉原始数据或P内容的条带,与RAID 5一样利用XOR恢复数据;丢掉Q域的条带,利用GF变换的逆运算恢复数据。而如果有两台硬盘驱动器掉线,就需要同时使用XOR和GF变换来恢复数据了。
然而,无论采用哪种算法,RAID 6都比RAID 5需要更多的计算资源。如果I/O处理器(IOP)没有对此进行专门的优化,性能下降显然是不可避免的。