RAID的各种等级

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RAID-0 等级

Striped Disk Array without Fault Tolerance( 没有容错设计的条带磁盘阵列)

图中一个圆柱就是一块磁盘(以下均是),它们并联在一起。从图中可以看出,RAID 0 在存储数据时由RAID 控制器(硬件或软件)分割成大小相同的数据条,同时写入阵列中的磁盘。如果发挥一下想象力,你会觉得数据象一条带子横跨过所有的阵列磁盘,每个磁盘上的条带深度则是一样的。至于每个条带的深度则要看所采用的RAID 类型,在NT 系统的软RAID 0 等级中,每个条带深度只有64KB 一种选项,而在硬RAID 0 等级,可以提供8 、16 、32 、64 以及128KB 等多种深度参数。Striped 是RAID 的一种典型方式,在很多RAID 术语解释中,都把Striped 指向RAID 0 。在读取时,也是顺序从阵列磁盘中读取后再由RAID 控制器进行组合再传送给系统,这也是RAID 的一个最重要的特点。

RAID-0 结构图解

这样,数据就等于并行的写入和读取,从而非常有助于提高存储系统的性能。对于两个硬盘的RAID 0 系统,提高一倍的读写性能可能有些夸张,毕竟要考虑到也同时缯加的数据分割与组合等与RAID 相关的操作处理时间,但比单个硬盘提高50% 的性能是完全可以的。

不过,RAID 0 还不能算是真正的RAID ,因为它没有数据冗余能力。由于没有备份或校验恢复设计,在RAID 0 阵列中任何一个硬盘损坏就可导致整个阵列数据的损坏,因为数据都是分布存储的。下面总结

一下RAID 0 的特点:

RAID-1 等级 Mirroring and Duplexing (相互镜像)对比 RAID 0 等级,我们能发现硬盘的内容是两两相同的。这就是镜像——两个硬盘的内容完全一样,这等于内容彼此备份。比如阵列中有两个硬盘,在写入时, RAID 控制器并不是将数据分成条带而是将数据同时写入两个硬盘。这样,其中任何一个硬盘的数据出现问题,可以马上从另一个硬盘中进行恢复。注意,这两个硬盘并不是主从关系,也就是说是相互镜像 / 恢复的。

RAID-1 结构图解

RAID 1 已经可以算是一种真正的 RAID 系统,它提供了强有力的数据容错能力,但这是由一个硬盘的代价所带来的效果,而这个硬盘并不能增加整个阵列的有效容量。下面总结一下 RAID 1 的特点:

其它RAID等级

(1)RAID-2 等级Hamming Code ECC (汉明码错误检测与修正)

现在我们要接触到RAID 系统中最为复杂的等级之一。RAID 2 之所以复杂就是因为它采用了早期的错误检测与修正技术——汉明码(Hamming Code )校验技术。因此在介绍RAID 2 之前有必要讲讲汉明码的原理。

汉明码的原理:

针对 4 位数据的汉明码编码示意图

汉明码是一个在原有数据中插入若干校验码来进行错误检查和纠正的编码技术。以典型的4 位数据编码为例,汉明码将加入 3 个校验码,从而使实际传输的数据位达到7 个(位),它们的位置如果把上图中的位置横过来就是:

注:Dx 中的x 是2 的整数幂(下面的幂都是指整数幂)结果,多少幂取决于码位,D1 是0 次幂,D8 是3 次幂,想想二进制编码就知道了

现以数据码1101 为例讲讲汉明码的编码原理,此时D8=1 、D4=1 、D2=0 、D1=1 ,在P1 编码时,先将D8 、D4 、D1 的二进制码相加,结果为奇数 3 ,汉明码对奇数结果编码为1 ,偶数结果为0 ,因此P1 值为1 ,D8+D2+D1=2 ,为偶数,那么P2 值为0 ,D4+D2+D1=2 ,为偶数,P3 值为0 。这样,参照上文的位置表,汉明码处理的结果就是1010101 。在这个4 位数据码的例子中,我们可以发现每个汉明码都是以三个数据码为基准进行编码的。下面就是它们的对应表:

从编码形式上,我们可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4 个数据位的 3 个位的3 次组合检测来达到具体码位的校验与修正目的(不过只允许一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0 )就是正确,如果为奇数(纠错代码为 1 )则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。

还是刚才的1101 的例子,正确的编码应该是1010101 ,如果第三个数据位在传输途中因干扰而变成了 1 ,就成了1010111 。检测时,P1+D8+D4+D1 的结果是偶数 4 ,第一位纠错代码为0 ,正确。

P1+D8+D2+D1 的结果是奇数3 ,第二位纠错代码为1 ,有错误。P3+D4+D2+D1 的结果是奇数3 ,第三但纠错代码代码为 1 ,有错误。那么具体是哪个位有错误呢?三个纠错代码从高到低排列为二进制编码110 ,换算成十进制就是6 ,也就是说第 6 位数据错了,而数据第三位在汉明码编码后的位置正好是第 6 位。

那么汉明码的数量与数据位的数量之间有何比例呢?上面的例子中数据位是4 位,加上3 位汉明码是7 位,而2 的3 次幂是8 。这其中就存在一个规律,即2 P ≥P+D+1 ,其中P 代表汉明码的个数,D 代表数据位的个数,比如 4 位数据,加上 1 就是5 ,而能大于 5 的2 的幂数就是3 (2 3 =8 ,2 2 =4 )。这样,我们就能算出任何数据位时所需要的汉明码位数:7 位数据时需要4 位汉明码(2 4 >4+7+1 ),64 位数据时就需要7 位汉明码(2 7 >64+7+1 ),大家可以依此推算。此时,它们的编码规也与 4 位时不一样了。

另外,汉明码加插的位置也是有规律的。以四位数据为例,第一个是汉明码是第一位,第二个是第二位,第三个是第四位,1 、2 、4 都是2 的整数幂结果,而这个幂次数是从0 开始的整数。这样我们可以推断出来,汉明码的插入位置为 1 (2 0 )、2 (2 1 )、4 (2 2 )、8 (2 3 )、16 (2 4 )、32 (2 5 )……

相关文档
最新文档