RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。冗余磁盘阵列技术诞生于1987年,由美国加州大学伯克利分校提出。简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用。RAID的采用为存储系统(或者服务器的内置存储)带来巨大利益,其中提高传输速率和提供容错功能是最大的优点,raid主要有raid0,raid1,raid4,raid5等,5其实是在4的基础上发展起来的,4将奇偶校验写在同一个磁盘上,从而造成性能瓶颈,5则分散校验数据,提高性能,1则是单纯的镜像,要浪费50%的空间,0则是数据透写阵列中的所有磁盘,速度快,但不安全,综上所述:raid1最保险,但浪费空间,raid0性能最好,也不浪费空间,但是安全性差;raid5可以说中和了raid1和raid0的优点,但需要三块以上的磁盘,或者分区,磁盘的利用率为n-1,同时需要等大的分区。下面来系统的介绍下在rhel5.4上配置raid5,这个配置步骤之前有记录过,不过很多细节的东西未记录,这在rhce中算重点内容,不能忽视的…
1:通过fdisk工具将磁盘分成四个等大的分区,并转换成fd格式
[root@yang ~]# fdisk -l |grep raid
/dev/hda5 5178 5300 987966 fd Linux raid autodetect
/dev/hda6 5301 5423 987966 fd Linux raid autodetect
/dev/hda7 5424 5546 987966 fd Linux raid autodetect
/dev/hda8 5547 5669 987966 fd Linux raid autodetect
2:创建一个块设备,主要考虑到可能一个系统有多个raid阵列
[root@yang ~]# mknod /dev/md1 b 9 1
[root@yang ~]# ls -li /dev/md*
5162 brw-r—– 1 root disk 9, 0 Mar 6 18:09 /dev/md0
10616 brw-r–r– 1 root root 9, 1 Mar 6 18:19 /dev/md1
3:创建raid5阵列,-C代表create,-l代表level,-n代表阵列中的分区个数,-x用来指定sapre分区
[root@yang ~]# mdadm -C /dev/md1 -l 5 -n 3 /dev/hda{5,6,7} -x 1 /dev/hda8
mdadm: array /dev/md1 started.
在创建的过程中,可以使用watch命令来观察/proc/mdstat这个文件的变化
[root@yang ~]# watch -n 1 “cat /proc/mdstat”
Every 1.0s: cat /proc/mdstat Sat Mar 6 18:23:30 2010
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 hda7[4] hda8[3](S) hda6[1] hda5[0]
1975680 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[======>…………..] recovery = 34.8% (344156/987840) finish=0.2min sp
eed=49165K/sec
unused devices: <none>
4:格式化分区
[root@yang ~]# mkfs.ext3 /dev/md1
………………………………………………
………………………………………………
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@yang ~]# tune2fs -c 0 -i 0 -o acl /dev/md1 //默认格式化完分区后,系统会在分区被挂载34次,或者180天后进行自检,而且默认的格式化不带acl参数
tune2fs 1.39 (29-May-2006)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds
5:挂载分区,并查看详细信息
[root@yang ~]# mkdir /data
[root@yang ~]# mount /dev/md1 /data/
[root@yang ~]# df -h |grep data
/dev/md1 1.9G 35M 1.8G 2% /data
[root@yang ~]# mdadm –detail /dev/md1 |tail -n 5
0 3 5 0 active sync /dev/hda5
1 3 6 1 active sync /dev/hda6
2 3 7 2 active sync /dev/hda7
3 3 8 – spare /dev/hda8
6:查看/etc/rc.sysinit这个文件中关于mdadm的信息,这个文件是在系统启动读取的第四个文件,主要用于设定系统时间,主机名,键盘,selinux,lvm,raid等一系列重要的参数
[root@yang ~]# grep ‘mdadm’ /etc/rc.sysinit //下面的Shell语句意思是当存在/etc/mdadm.conf这个文件的时候,就执行激活raid阵列操作;raid阵列信息是保存在64字节的分区表和各个分区的第一个扇区的512字节中的
if [ -f /etc/mdadm.conf ]; then
/sbin/mdadm -A -s
7:生成mdadm.conf文件
[root@yang ~]# mdadm –detail –scan > /etc/mdadm.conf
[root@yang ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=df904d25:12be50fb:cf70917a:e15d87d9
8:测试在存在mdadm.conf文件的时候,停止阵列后还可以得到重组,若不存在该文件,就要重新创建阵列了,可见该文件非常重要
[root@yang ~]# umount /data/
[root@yang ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
[root@yang ~]# mdadm -A -s
mdadm: /dev/md1 has been started with 3 drives and 1 spare.
9:模拟阵列中的一个分区故障
[root@yang ~]# mdadm /dev/md1 -f /dev/hda5
mdadm: set /dev/hda5 faulty in /dev/md1
从下面的信息可以看到/dev/hda5的状态已经变成faulty了,但是原来的spare分区/dev/hda8迅速顶了上来,说明存在一个热备份的分区还是相当有必要的,不过这个空间也是要被浪费的
[root@yang ~]# watch -n 1 “cat /proc/mdstat”
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 hda5[3](F) hda8[0] hda7[2] hda6[1]
1975680 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices:
10:移除,添加分区到阵列
[root@yang ~]# mdadm /dev/md1 -r /dev/hda5
mdadm: hot removed /dev/hda5
[root@yang ~]# mdadm /dev/md1 -a /dev/hda5
mdadm: added /dev/hda5
11:下面重点演示下当阵列出现故障的时候,系统自动发邮件报警的设定
[root@yang ~]# mail -s “just a test for my rhel mail server” ylw6006@163.com
[root@yang ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=df904d25:12be50fb:cf70917a:e15d87d9
MAILADDR ylw6006@163.com //在文件末尾添加这行
[root@yang ~]# service mdmonitor status //启动mdmonitor服务,并确保其开机自启动
mdadm is stopped
[root@yang ~]# service mdmonitor start
Starting mdmonitor: [ OK ]
[root@yang ~]# chkconfig mdmonitor on
[root@yang ~]# mdadm /dev/md1 -f /dev/hda5 //模拟阵列中的两块磁盘故障
mdadm: set /dev/hda5 faulty in /dev/md1
[root@yang ~]# mdadm /dev/md1 -f /dev/hda6
mdadm: set /dev/hda6 faulty in /dev/md1
[root@yang data]# dd if=/dev/zero of=1.txt bs=1k //分区的I/0马上就会出现故障
dd: writing `1.txt’: Read-only file system
158922+0 records in
158921+0 records out
162735104 bytes (163 MB) copied, 14.6255 seconds, 11.1 MB/s
[root@yang data]# ll
ls: reading directory .: Input/output error
total 0
在定义的邮箱中就会收到报警邮件,要修复类似的故障,只能先停掉阵列,然后重新新建阵列了,格式化分区了,原来的数据就没有了!