RAID的全称是Redundant Array of Independent Disks,即独立磁盘冗余阵列(以前叫:Redundant Array of Inexpensive Disks,即廉价磁盘冗余阵列)。RAID的基本思想是将多个便宜的硬盘组合起来,成为一个硬盘阵列组,使性能能和那些价格昂贵,容量大的高性能硬盘媲美。
而RAID是怎么识别多个硬盘呢?RAID是把多个硬盘组合成成一个逻辑磁区,故操作系统会把它当作一个硬盘来使用。RAID常用于那些大型的服务器上,通过硬盘阵列,在一定程度上实现数据存放的安全性和快速的数据读写。
RAID的有七个级别,但有时候我们也可以把两个级别合在一起用,下面是我们常用的RAID的级别及各自的特点:
RAID 0:它是把多块硬盘当作一块硬盘,然后进行分区来使用。它的原理是把要写入的一块数据分成多个chunk存在多个磁盘上,多个chunk同时写入多个磁盘,这就增加了写入的速度;而当读数据的时候可以从这多个磁盘中读取存放的相应数据的多个chunk,这就提高了读出的速度;虽然,它大大提高了磁盘的性能,但是无冗余能力,因为数据是分chunk存放在多个磁盘中的,只要有一块磁盘坏掉,数据就不能用了。
RAID 1:通常组合2,4,6...块磁盘来使用,其中一半的磁盘用于存放数据,而另一半的磁盘用于做镜像,也就是备份存放数据的那一半磁盘。它的原理是:写入的时候一块数据分成多个chunk,此时并不是多个chunk同时写入多个磁盘,而是一个chunk一个chunk的写入,每个chunk不仅要写入存放数据的一块磁盘,而且还要写入用于做镜像的一块磁盘,这样写入的速度就会不变,但读出数据时,则是从数据磁盘和镜像磁盘一起读,读出的速度快。这个级别,增加了磁盘的读取性能,而且提供了冗余功能,保证了数据一定程度的安全性。
RAID 4:至少组合3块磁盘,其中有一块盘来用作校验盘。当存放数据的时候,校验盘用于存放数据的校验码,而数据本身分成多个chunk存放在多个磁盘上,读写性能都很高。由于有一个校验盘,如果有一块磁盘坏掉,可以利用校验盘和其它磁盘对数据进行恢复,这就增强了数据的安全性。而由于只有一块校验盘,每次操作都要计算校验码,会给校验盘带来很大的压力,校验盘容易坏掉。
RAID 5:与RAID 4不同的是,但是数据的校验码会轮流存放在多个磁盘中,减小了校验盘的压力。
RAID 6:至少需要组合4块磁盘,和RAID 5不同的是,校验码要存放两次,这样就可以允许坏掉两块磁盘。
RAID 10:是RAID O和RAID 1的组合,至少需要4块磁盘,其中一半的磁盘用于存放数据,而另一半的磁盘用于做镜像,也就是备份存放数据的那一半磁盘。把磁盘平均分成多个组,每组中有2块磁盘,为RAID1阵列。然后,这多个组再组成RAID0阵列。它的原理是:写入的时候一块数据也是分成多个chunk,多个chunk不仅同时写入多个磁盘组中,而且写入组之后再写入一份数据到组中的镜像盘,这样写入的速度快,也有了冗余;读出数据时,则是从多个磁盘组中一起读取数据的多个chunk,读出的速度更快,要高于写入的速度。这个级别,不仅增加了磁盘的性能,而且提供了冗余功能,保证了数据一定程度的安全性,这个应用比较广泛。
RAID通常有软RAID和硬RAID之分:
硬RAID的机制是:服务器上自带的有RAID芯片,或是服务器上有一个插槽,可以插主机适配器。这种机制广泛用于商业环境。RAID设备在系统中一般被识别为:/dev/sd*
软RAID的机制是:在Linux中存在一个kernel模块,可以实现RAID。随着技术的发展,Linux现在这中应用机制已经比较成熟了。RAID设备在系统中一般被识别为:/dev/md*,并且软RAID还有一个局限是,它是以“磁盘分区”为单位创建RAID的。
下面我们以在Linux中实现软RAID为例,介绍一下RAID的配置:
首先,我们先了解一下mdadm命令,它是一个管理程序,用于和kernel模块通信,实现对RAID的管理。
mdadm有五种模式,分别是:
Assemble:装配模式,将已经停用的RAID设备重新装配使用
Create:创建模式,主要建立新的RAID设备
Follow or Monitor:监控模式,主要用于监控RAID设备的工作
Grow:增长模式,可以用于给RAID设备增加新硬盘
Manage:管理模式,用于删除,增加RAID设备。当使用--add,--fail,--remove等选项时,默认工作在管理模式
mdadm 命令
-A 指定装配模式
-C 指定创建模式
-F 指定监控模式
-G 指定增长模式
--add 用于添加磁盘设备
--fail 用于停掉一块磁盘设备
--remove 用于移除磁盘设备
-v 可以显示详细信息
-s 可以扫描或测试RAID
-n 指定有几个分区来常见RAID
-x 用于指定备用的空闲盘的个数
-c 指定chunk的大小,默认为64K
-l 创建RAID的级别
-a 如果创建的设备不存在则自动创建
-D 查看指定模块的详细信息
一:要创建一个新的RAID设备,要做以下几步:
fdisk /dev/sda
创建磁盘分区,并且修改分区的id为“fd”,保存退出
partprobe /dev/sda
使kernel识别我们新分的区
mdadm -C /dev/md1 -a yes -l 5 -n 3 /dev/sda6 /dev/sda7 /dev/sda8
创建一个RAID 5设备md1,此设备有3个设备组成sda6,sda7,sda8
lsmod | grep "dm_mod"
查看dm_mod这个模块是否已经被kernel加载,如果没有搜索到,说明没有被kernel加载,则需要加载这个模块,使用命令:modprobe dm_mod
mke2fs -j /dev/md1
把这个RAID设备格式化为ext3的文件系统
mkdir /myraid
vi /etc/fstab
/dev/md1 /myraid ext3 defaults 0 0
在这个文件中添加如上行,可以保证这个raid设备在开机时被挂载,当下不生效
mount /dev/md1 /myraid
现在挂载这个RAID设备,这样我们现在就可以使用了
二,查看信息
mdamd --detail /dev/md1
mdamd -D /dev/md1
查看这个模块的详细信息
三,添加移除,移除RAID设备
mdadm /dev/md1 --add /dev/sda9 (这个分区id必须为“fd”)
增加这个空闲设备,如果其中有一块磁盘设备坏掉的话,它可以自动添加进去,并会自动进行数据同步
mdadm /dev/md1 --remove /dev/sda9
移除这个设备
mdadm /dev/md1 --fail /dev/sda9
使这个设备标识为失败,这样/dev/sda9就不能用了
四,停用RAID设备
umount /myraid
卸载RAID设备(如果想永久不使用此RAID,修改/etc/fstab,把上面对应的行删掉)
mdadm -S /dev/md1
停用这个RAID设备
五,重新组装设备
第一种方法:
mdadm -A /dev/md1 /dev/sda6 /dev/sda7 /dev/sda8
可以重新组装起这个设备,必须指定创建RAID的那几个分区,否则会失败
第二种方法:
mdadm -D -s >> /etc/mdadm.conf
如果事先将RAID的信息保存在/etc/mdadm.conf这个文件中,默认mdadm会从/etc/mdadm.conf这个文件中读配置信息
mdamd -A /dev/md1
直接就可以组装这个RAID设备