RAID的英文全程是 Redundant Array of Independent Disks,从英文解释就可以看出,RAID主要是为了将独立磁盘组成冗余的阵列。
RAID的模式有很多,常见的一般是0,1,5,6,10,50
RAID 中主要有三个关键概念和技术:镜像(Mirroring)、数据条带(Data Stripping)和数据校验(Data parity)。
- raid0
raid0的目的是将数块硬盘组成一个整体,例如2块500G的硬盘,通过raid0就可以组成逻辑意义上1T的硬盘。
raid0利用了data stripping技术,数据保存在一块逻辑磁盘中,但是实际上是分片保存在不同的物理磁盘中,这样无论是读和写,通过并发能获得比单块磁盘更高的IO性能。
raid0没有数据修复和备份的能力,在生产环境中较少应用。
- raid1
raid1的目的是将硬盘组成冗余的阵列,这样当一块物理盘损坏的时候,逻辑盘仍能依靠另一块正常的物理盘提供服务。
raid1利用了mirroring技术,提高了可靠性,同时也提高了并发读的性能,但是为了确保数据正确地写到多个磁盘则需要时间,因此写性能稍低。
raid1常用于生产环境的系统盘。
- raid5
raid5相比较于raid0,添加了磁盘设备的奇偶校验信息,而且该数据分布式地存放于其他的数据盘上,提高了磁盘阵列的可靠性和容错能力。
校验通常采用海明码、异或操作等算法来计算获得。数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。
奇偶校验的数据总体为1块盘的大小。(raid3就是单独用一块盘专门做奇偶校验)
- raid6
raid6在raid5的基础上又增加了一种校验码,与raid5只能坏一块相比,raid6允许同时坏2块。
- raid10
raid10是raid1+raid0的方式组合而成,准确的说,是先做raid1再做raid0,而并不是raid1 over raid0。(仔细体会下区别)
相比较于raid10,raid01则是先做raid0再做raid1。
二者的联系在于:
- 都是基于raid1和raid0
- 都拥有冗余机制
二者的区别在于:
- 执行raid的步骤不一样
- raid10在一组array(如disk1)已损坏的情况下,仍能够允许另一组array(disk3 or disk4)损坏,
- raid01在一组array(如disk1)已损坏的情况下,此时不允许再损坏另一组array了。
因此raid10要优于raid01。
- raid50
raid50是raid5+raid0的方式组合而成,先做raid5,再做raid0。
- 小结
raid类型 | 容错性 | 冗余盘 | 磁盘数 | 空间利用率 | 备注 |
raid0 | 无 | 0 | n>=1 | 100% | |
raid1 | 有 | N/2 | 2n | 50% | N为磁盘总数 |
raid5 | 有 | 1 | n>=3 | n-1/n | |
raid6 | 有 | 2 | n>=4 | n-2/n | |
raid10 | 有 | N/2 | 2n(n>=2) | 50% | N为磁盘总数 |
raid50 | 有 | m*1 |
n>=3 |
m*(n-1)/n | m为raid5的组数 |
- tips
raid10是基于raid1和raid0的基础上的,raid0可以单盘做,raid1至少2块,那结合起来2块就够了,为什么raid01和raid01也需要至少4块?
单盘可以做raid0,2块盘可以做raid1,但是对于单块盘来说,只能有1个raid属性,如果只有2块盘,无论如何组合,相当于既做了raid1又做了raid0,在操作上是不支持的,因此raid10和raid01都需要至少4块盘。