一、RAID是什么?

RAID是通过RAID控制器把多块磁盘组合起来使用的一项技术,常见的组合方式有以下几种:

1、RAID0

2、RAID1

3、RAID5

4、RAID01

5、RAID10

二、它们的原理及优势

1、RAID0

RAID0通过RAID控制器把两块或两块以上的磁盘组合在一起,并把要存的数据分成两份或两份以上(取决于你使用的硬盘数)分别存在不同的硬盘上。那么这里就有一个问题,数据到底分多大?1KB还是2KB?RAID使用条带化技术,过程如下:

假设用两块盘组成RAID0,RAID控制器把数据分为大小相等的一块块数据(比如32M)然后第一块数据往第一块硬盘中存,第二块数据往第二块硬盘中存,第3块数据又往第1块上存,第4块往第2块上存。。。

由于使用了两块硬盘同时存取数据,因此RAID0是速度最快的组合,并且磁盘利用率是100%,然而正因为数据分别存在两块盘中,当其中的一块盘坏了,整个RAID0也就不能用了,数据都被损坏了。

2、RAID1

上面我们说到RAID0数据容易被损坏,于是就有了RAID1,用两块盘做镜像,RAID控制器把数据分成两份一样的,分别存在磁盘中。两块盘中的数据是一样了,这样,当有一块盘坏掉的时候,剩下的那块盘中的数据还是完整的,可用的。这时只要把坏盘取下,换块新的盘重新同步就好了。但是这样呢,磁盘利用率就只有50%,做写入操作的时候,就没有RAID0的优势,读取还是有两块盘的优势。

3、RAID5

RAID0速度快,磁盘利用率高。RAID1数据安全性高。当我们既想速度快,磁盘利用率高,又想数据安全的时候该怎么办?此时我们可以在RAID0的基础上添加一块检验盘,用来校验数据的完整性。但是这样有两个问题,当读取频繁的时候,检验盘也需要被频繁的读取,并校验其它两块盘中的数据。此时I/O的瓶颈可能就变成了校验盘的读取速率。而校验盘的频繁读取,又大大的增加了校验盘挂掉的机率。当检验盘挂掉了怎么办?此时整个数据也就无从知道是不是完整的,因此我们可以把检验的数据分别存在3块盘中。这样,当一块盘挂掉,数据还是完整的,此时把坏盘的换下来,换块新的盘上去就可以了。这就是RAID5,它的磁盘利用率是(n-1)/n。

4、RAID01和RAID10是RAID1和RAID0的不同组合方式。RAID01是先用多块磁盘做RAID0,然后再用2组RAID0组成RAID1。而RAID10则相反,这里要注意的是他们之间的区别。RAID01中如果两组RAID0中其中的一块盘坏了,则这一组中的数据就是坏的了,需要用到另外一组中的数据来恢复数据。但是一组RAID0中的磁盘都坏了并不影响另外一组。而RAID10中两组RAID1中有一块盘坏了,只需要用当前组中另一块盘中的数据恢复,并不影响别外一组。但是如果两组RAID1中有一组中的磁盘全坏了,那么数据就损坏了。一般使用RAID10

二、在Linux中做软RAID

1、MD(Multiple Disk)模块,MD模块是内核中的一个模块,可以用来在内核中做软RAID。这是一种折中的方式,但是这样做很不安全。因为用MD做的软RAID是内核在维护,那么当系统出错,磁盘中的数据什么的也就没了。

2、mdadm,这是用户空间中的MD模块的管理命令,我们将使用它来创建一个RAID5。MD模块支持使用块设备创建软RAID,也就是硬盘、分区等等。

首先,我们先查看磁盘,然后分3个分区出来,并把分区标记为RAID。

fdisk -l

wKiom1aHfKyjH80mAABGcLM-0Xg220.png

我们可以看到/dev/sdb没有使用,这里我们创建3个分区,三个分区要一样大,都是1G。

wKiom1aHfY_CXldVAAAbIlSoz3g900.png

输入t调整分区

wKiom1aHflnxtuujAAB4S-D3HDs271.png

输入fd,调整完后的效果如下

wKiom1aHfuHSsI01AAAeffEn6Sk570.png

输入w保存并退出。

然后我们开始创建RAID

mdadm -C -l 5 -n 3 md1 /dev/sdb1 /dev/sdb2 /dev/sdb3

mdadm是模式化命令,工作在不同的模式之下,-C是创建模式。-C的各选项意义如下

    -l 级别,也就是Raid0、Raid1这些

    -n 设备的个数

    -c/--chunk 指定chunk大小(数据块),大小为2^n,一般为64K

    -x 指定空闲盘的个数(当有盘坏的时候,空闲盘会自动换上去)

md1为创建的RAID的名字,查看/dev下,多了个md/md1。

wKioL1aHgWzA6fg2AAAVq0HfEM4245.png

使用cat /proc/mdstat可以查看活动的RAID

wKiom1aHgvOyNeo3AAAeGPT2Z1U400.png

可以看到当前有一个活动的设备md127(不同的环境结果不同),由sdb1,sdb2,sdb3组成的RAID5。可是我们创建的名字是md1啊,进入到/dev/md/,ls -l md1查看到md1是指向md127的软链接。

格式化md1然后挂载

mke2fs -j /dev/md/md1

wKiom1aHhDbDZi39AABGejPszOQ068.png

mount /dev/md/md1 /mnt

wKioL1aHhKWxet8MAAAS6RjDrYs675.png

3、进阶操作

mdadm --fail可以把一块盘设置成出错状态,接下来我们模拟RAID5中其中一块盘出错。

通过mdadm -D /dev/md/md1查看陈列详细信息。

wKiom1aHhg3SrtfvAABI7BeZ-2g795.png

mdadm --fail /dev/md/md1 /dev/sdb1

wKiom1aHhrOgyhgwAAAZedHPbl0265.png

mdadm -D /dev/md/md1查看详信息

wKioL1aHh0DgI6o5AAAXkbunawI483.png

可以看到有一个出错的盘。

我们新建一个分区,并把这个分区添加进去。

mdadm -a /dev/md/md1 /dev/sdb5

wKioL1aHjKuzWHxPAAAT_vfHyQM240.png

mdadm -D /dev/md/md1查看信息

wKiom1aHjM-hcUAzAAAb2Dq2unU044.png

mdadm -r /dev/md/md1 /dev/sdb1 移除/dev/sdb1

其它命令

mdadm -S /dev/md/md1 停止/dev/md/md1,停止后rm -f /dev/md/md1,rm -f /dev/md127就可以删除md1了。

停止后我们可以用mdadm -A /dev/md/md1 设备列表(/dev/sdb1、/dev/sdb2...) 启用。除了指定设备列表外,我们还可以使用mdadm -D --scan > /dev/mdadm.conf,下次装配的时候就不用指定设备列表了。