上一篇日志讲述了RAID原理,下面我将linux下配置software RAID
软件磁盘阵列的设置还是比较简单的,因为在centos中使用mdadm磁盘阵列软件套件,它只有一条命令mdadm
- [root@CentOS5 ~]# mdadm --detail /dev/md0
- [root@CentOS5 ~]# mdadm --create --auto=yes /dev/md[0-9] --raid-devices=N \
- > --level=[015] --spare-devices=N /dev/sdx /dev/hdx ...
- --create:为新建RAID的参数
- --auto=yes:决定新建后面的软件磁盘阵列设备,既/dev/md0,/dev/md1等
- --raid-devices=N:使用几个磁盘作为磁盘阵列设备
- --spare-devices=N:使用几个磁盘作为备用设备
- --level=[015]:设置这组磁盘阵列的等级
- --detail:后面所接的那个磁盘阵列设备的详细信息
先查看一下我的硬盘
- [root@CentOS5 ~]# fdisk -l
- Disk /dev/sda: 53.6 GB, 53687091200 bytes
- 255 heads, 63 sectors/track, 6527 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Device Boot Start End Blocks Id System
- /dev/sda1 * 1 13 104391 83 Linux
- /dev/sda2 14 6527 52323705 8e Linux LVM
- Disk /dev/sdb: 21.4 GB, 21474836480 bytes
- 255 heads, 63 sectors/track, 2610 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Disk /dev/sdb doesn't contain a valid partition table
正式开始我的RAID之旅
第一步分区:
- [root@CentOS5 ~]# fdisk /dev/sdb
- ….系统提示部分省略…
- Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
- Command (m for help): n
- Command action
- e extended
- p primary partition (1-4)
- e
- Partition number (1-4): 1
- First cylinder (1-2610, default 1):
- Using default value 1
- Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): +20480M
- 下面操作在循环四次
- Command (m for help): n
- Command action
- l logical (5 or over)
- p primary partition (1-4)
- l
- First cylinder (1-2491, default 1):
- Using default value 1
- Last cylinder or +size or +sizeM or +sizeK (1-2491, default 2491): +1000M
- #最后可以看到
- Command (m for help): p
- Disk /dev/sdb: 21.4 GB, 21474836480 bytes
- 255 heads, 63 sectors/track, 2610 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Device Boot Start End Blocks Id System
- /dev/sdb1 1 2491 20008926 5 Extended
- /dev/sdb5 1 123 987934+ 83 Linux
- /dev/sdb6 124 246 987966 83 Linux
- /dev/sdb7 247 369 987966 83 Linux
- /dev/sdb8 370 492 987966 83 Linux
- /dev/sdb9 493 615 987966 83 Linux
- Command (m for help): w
- The partition table has been altered!
- Calling ioctl() to re-read partition table.
- Syncing disks.
- [root@CentOS5 ~]# partprobe
第二步建立RAID:
- [root@CentOS5 dev]# mdadm --create --auto=yes /dev/md1 --level=5 \
- > --raid-devices=4 --spare-devices=1 /dev/sdb{5,6,7,8,9}
- mdadm: array /dev/md1 started.
在查看下RAID
- [root@CentOS5 dev]# mdadm --detail /dev/md1
- /dev/md1:
- Version : 00.90.03
- Creation Time : Wed Sep 28 00:51:30 2011
- Raid Level : raid5
- Array Size : 2963520 (2.83 GiB 3.03 GB)
- Used Dev Size : 987840 (964.85 MiB 1011.55 MB)
- Raid Devices : 4
- Total Devices : 5
- Preferred Minor : 1
- Persistence : Superblock is persistent
- Update Time : Wed Sep 28 00:51:42 2011
- State : clean
- Active Devices : 4
- Working Devices : 5
- Failed Devices : 0
- Spare Devices : 1
- Layout : left-symmetric
- Chunk Size : 64K
- UUID : a9d780b6:0c39ade4:9b2cf2af:9328f5fd
- Events : 0.2
- Number Major Minor RaidDevice State
- 0 8 21 0 active sync /dev/sdb5
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 4 8 25 - spare /dev/sdb9
上面用了五个分区,其中四个用给了RAID5做磁盘阵列设备,另外一个做了spare disk设备。另外还可以查阅如下的文件看看系统软件磁盘阵列的情况:
- [root@CentOS5 dev]# cat /proc/mdstat
- Personalities : [raid6] [raid5] [raid4]
- md1 : active raid5 sdb8[3] sdb9[4](S) sdb7[2] sdb6[1] sdb5[0]
- 2963520 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
- unused devices: <none>
md1开始,第一行指出md1是raid5,且使用sdb5、sdb6、sdb7、sdb8四个设备,每个设备后面的括号[]中的数字为此磁盘在RAID的顺序sdb9后面中S表示spare之意。
第二行磁盘阵列拥有2963520个block,使用RAID 5等级,写入磁盘的小区块大小为64KB,使用algorithm 2磁盘阵列算法[m/n]代表数组需要m个设备,且有n个设备正常运行。因此这个的4个设备都运行正常,最后的[UUUU]表示四个所需的设备启用情况,U表示正常,_表示不正常
第三步格式化分区与挂载:
- [root@CentOS5 dev]# mkfs -t ext3 /dev/md1
- [root@CentOS5 dev]# mkdir /mnt/raid
- [root@CentOS5 dev]# mount /dev/md1 /mnt/raid
- [root@CentOS5 dev]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/VolGroup00-LogVol00
- 49039600 2574532 43933740 6% /
- /dev/sda1 101086 12072 83795 13% /boot
- tmpfs 411956 0 411956 0% /dev/shm
- /dev/md1 2916920 69952 2698792 3% /mnt/raid
到这里RAID,已经做成功了,是不是很简单呢。下面我们测试下
测试操作一:仿真RAID错误的救援模式
- [root@CentOS5 dev]# mdadm --manage /dev/ma[0-9] [--add 设备] [--remove 设备] [--fail 设备]
- --add:会将后面的设备添加到这个md中
- --remove:会将后面的设备从这个md设备中删除
- --fail:会将后面的设备设置成为出错状态
首先拷贝一些数据到md1中
- [root@CentOS5 ~]# cp -a /etc /var /mnt/raid
- [root@CentOS5 ~]# df /mnt/raid/ ; du -sm /mnt/raid/
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/md1 2916920 258820 2509924 10% /mnt/raid
- 196 /mnt/raid/
接下来把/dev/sdb7设置成错误
- [root@CentOS5 ~]# mdadm --manage /dev/md1 --fail /dev/sdb7
- mdadm: set /dev/sdb7 faulty in /dev/md1
- [root@CentOS5 ~]# mdadm --detail /dev/md1
- …省略系统信息…
- Number Major Minor RaidDevice State
- 0 8 21 0 active sync /dev/sdb5
- 1 8 22 1 active sync /dev/sdb6
- 4 8 25 2 spare rebuilding /dev/sdb9
- 3 8 24 3 active sync /dev/sdb8
- 5 8 23 - faulty spare /dev/sdb7
在看看/proc/mdstat
- [root@CentOS5 ~]# cat /proc/mdstat
- Personalities : [raid6] [raid5] [raid4]
- md1 : active raid5 sdb8[3] sdb9[2] sdb7[4](F) sdb6[1] sdb5[0]
- 2963520 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
- unused devices: <none>
可以看到sdb7后面躲了个F,既是fail的缩写。最后面的[UUUU]还是四个U,表示RAID已经恢复了数据
测试操作二:删除错误的磁盘并添加新的磁盘
- [root@CentOS5 ~]# fdisk /dev/sdb
- (e.g., DOS FDISK, OS/2 FDISK)
- Command (m for help): n
- Command action
- l logical (5 or over)
- p primary partition (1-4)
- l
- First cylinder (616-2491, default 616):
- Using default value 616
- Last cylinder or +size or +sizeM or +sizeK (616-2491, default 2491): +1000M
- Command (m for help): w
- [root@CentOS5 ~]# partprobe
- [root@CentOS5 ~]# mdadm --manage /dev/md1 --add /dev/sdb10 --remove /dev/sdb7
- mdadm: added /dev/sdb10
- mdadm: hot removed /dev/sdb7
- [root@CentOS5 ~]# mdadm --detail /dev/md1
- …省略…
- Number Major Minor RaidDevice State
- 0 8 21 0 active sync /dev/sdb5
- 1 8 22 1 active sync /dev/sdb6
- 2 8 25 2 active sync /dev/sdb9
- 3 8 24 3 active sync /dev/sdb8
- 4 8 26 - spare /dev/sdb10
第四步开机自动启动RAID并自动挂载:
现在很多linux版本会自动查询/dev/md[0-9],不过建议大家还是修改一下配置文件,该配置文件位于/etc/mdadm.conf,这个配置文件可以见简单的设置,只要知道/dev/md1的UUID就可以了,如下
- [root@CentOS5 ~]# mdadm --detail /dev/md1 | grep -i uuid
- UUID : a9d780b6:0c39ade4:9b2cf2af:9328f5fd
- [root@CentOS5 ~]# vi /etc/mdadm.conf
- ARRAY /dev/md1 UUID : a9d780b6:0c39ade4:9b2cf2af:9328f5fd
- [root@CentOS5 ~]# vi /etc/fstab
- /dev/md1 /mnt/raid ext3 defaults 1 2
- [root@CentOS5 ~]# umount /dev/md1
- [root@CentOS5 ~]# mount –a
- [root@CentOS5 ~]# df /mnt/raid/
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/md1 2916920 258820 2509924 10% /mnt/raid
最后,删除RAID
方法一:
- [root@CentOS5 ~]# mdadm --detail /dev/md1 | grep -i uuid
- UUID : a9d780b6:0c39ade4:9b2cf2af:9328f5fd 将其注释掉
- [root@CentOS5 ~]# umount /mnt/md0
- [root@CentOS5 ~]# vi /etc/fstab
- /dev/md1 /mnt/raid ext3 defaults 1 2
- #将这句删除
方法二:
- 直接在mdadm中stop掉
- [root@CentOS5 ~]# mdadm --stop /dev/md1
到此software RAID设置宣告结束