从RAID0到RAID6,不同级别的RAID在性能、冗余、价格等方面做了不同程度的折中。组合不同级别的RAID,目的是扬长避短,产生具有优势特性的混合RAID级别。常用的组合RAID主要有RAID10,RAID01,RAID50和RAID05.
RAID10是先做1,再做0;而RAID01则是先做0,在做1,RAID50和RAID05同理。
一、RAID10和RAID01
RAID10结合RAID1和RAID0,先镜像,再条带化。比如现在有6块硬盘,其中每两块形成一组镜像——RAID1,然后将3组镜像合起来做成RAID0。RAID10的磁盘利用率是50%,它允许同组镜像阵列里坏一块,但是如果一组镜像阵列里两块都坏了,那么整个镜像都坏了,进而整个阵列都无法工作了。
RAID10的特性
RAID01则是先将6块磁盘分成两份,形成镜像,每一份中的三块磁盘做成RAID0的形式。它允许一组镜像坏掉,但不能两组镜像都坏。RAID01的风险大于RAID10,因为每组阵列各坏一块磁盘的可能性,要大于一组磁盘镜像里同时坏多块磁盘的情况。因此出于安全性和易用性的考虑,RAID10使用更为广泛。
二、RAID50和RAID05
RAID50是RAID5和RAID0的结合,先实现RAID5,再条带化。它和RAID10的情况非常相似,假设也是6块磁盘,每三块做成RAID5,一共是两组,合起来做成RAID0。
RAID50的特性
RAID50的利用率要根据盘的数量来定,比如同样是用12块盘做RAID50,它可以使用的方案有3*4,4*3和6*2,而做成RAID5的盘中有一块是冗余的,故可能产生三种不同的冗余数量,这就导致了总共冗余数量可能是4,3和2,从而导致了最终的利用率可能是67%,75%和83%这三种情况。
三、常用RAID级别的比较
常用的RAID级别主要有 RAID0,RAID1,RAID3,RAID5和RAID10,它们之间的差异见下表:
RAID级别没有高低上下之分,它们只有专注的特性差异。
四、硬件RAID和软RAID概述
1. 硬件RAID
硬件RAID有专门的RAID控制处理器和I/O处理芯片来处理RAID任务,不需占用主机CPU资源。有些RAID设备还有专门的电池来供电,以防止突然断电造成的数据丢失。正因为有这些附加设备,所以硬件RAID非常昂贵
硬件RAID的组件是在BOIS中完成的,当操作系统安装完成时,RAID也就装好了,计算机会将一组RAID设备当成一个整体,而不是单独的几块硬盘。通常操作系统会将其识别为/dev/sdb或/dev/sdc等等,之所以不识别为/dev/sda是因为/dev/sda常被预留为安装操作系统的设备,而RAID设备是用来存数据的。
2. 软件RAID
上面介绍了硬件RAID的结构,如果RAID设备没有RAID芯片,操作系统看到的将不再是一个整体,而是多块单独的磁盘。但是现在希望仍将其视为一个整体,这就需要通过软件来模拟RAID硬件功能。因此在Linux的内核中提供了一个模块,用来将多个硬件设备组合成一个逻辑设备,该设备被称为md(Multi Devices)模块。
比如现在一个操作系统上的硬件有以下三个设备:
/dev/sdb1 /dev/sdc1 /dev/sdd1
现在使用md模块将这三个设备模拟成一个RAID(软RAID),于是就形成了这样的设备:
/dev/md0 /dev/md1 /dev/md2 ......
有多少组RAID阵列,就会出现多少组/dev/md#设备。而这里的0,1,2......既不是/dev/sdb1中的1,也不代表RAID级别的编号,它仅代表使用软件模拟出来的RAID设备的编号。
md模块需要配置一些参数才能正常工作。md是内核提供的模块,故这些配置也需要针对内核来完成,和内核进行交互的接口是/proc,故配置md需要修改/proc和/sys文件中的参数。但修改这些参数是非常困难的,好在Linux中有专门针对md设定的系统调用,人们通过这些系统调用开发了专门的RAID管理工具——mdadm(Multi Device Administrator)。通过mdadm,可以定义多个磁盘设备,将它们组装成一个RAID设备,并指定RAID级别、磁盘个数、冗余磁盘、备份磁盘等等参数。但是要注意的是,真正其作用的是md,而不是mdadm这个命令。