创建软件RAID的指令是mdadm,允许将任何块设备做成RAID。
mdadm是一个模式化的命令,有如下几种工作模式:
创建模式:Create 对应的选项:-C 或--create
管理模式:Manage 对应的选项:--add、--fail、--remove
监控模式:Monitor 对应的选项:-F或--monitor
增长模式:Grow 对应的选项:-G或--grow
装配模式:Assemble 对应的选项:-A或--assemble
创建模式中的专用选项:
-l:指定raid level。长选项:--level=
-n:RAID磁盘的个数。长选项:--raid-devices=
-x:备用磁盘的个数。长选项:--spare-devices=
-a:自动创建设备文件。长选项:--auto= 。默认为--auto=yes
-c:指定chunk的大小,即每一次分配数据块的大小。长选项:--chunk。默认为64KB
示例1:
步骤1:磁盘分区,并将分区类型改为fd
步骤2:让kernel识别分区。partx -a /dev/sda
[root@Server3 ~]# cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 204800 sda1 8 2 10485760 sda2 8 4 1 sda4 8 5 1059932 sda5 8 6 1060258 sda6[root@Server3 ~]#[root@Server3 ~]# partx -a /dev/sdaBLKPG: Device or resource busyerror adding partition 1BLKPG: Device or resource busyerror adding partition 2BLKPG: Device or resource busyerror adding partition 4BLKPG: Device or resource busyerror adding partition 5BLKPG: Device or resource busyerror adding partition 6[root@Server3 ~]# [root@Server3 ~]# cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 204800 sda1 8 2 10485760 sda2 8 4 1 sda4 8 5 1059932 sda5 8 6 1060258 sda6 8 7 1060258 sda7 8 8 1060258 sda8 8 9 1060258 sda9[root@Server3 ~]#
步骤3:创建RAID
[root@Server3 ~]# mdadm --create /dev/md0 --auto=yes --level=0 --raid-devices=2 /dev/sda{6,7}mdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.[root@Server3 ~]#
步骤4:格式化,挂载
格式化:
[root@Server3 ~]# mke2fs -t ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)Stride=128 blocks, Stripe width=256 blocks132464 inodes, 529408 blocks26470 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=54525952017 block groups32768 blocks per group, 32768 fragments per group7792 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912Writing inode tables: done Creating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 27 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.[root@Server3 ~]#
挂载:
[root@Server3 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 9.9G 7.8G 1.6G 83% /tmpfs 245M 0 245M 0% /dev/shm/dev/sda1 194M 28M 156M 16% /boot[root@Server3 ~]# mount /dev/md0 /backup/[root@Server3 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 9.9G 7.8G 1.6G 83% /tmpfs 245M 0 245M 0% /dev/shm/dev/sda1 194M 28M 156M 16% /boot/dev/md0 2.0G 68M 1.9G 4% /backup[root@Server3 ~]#
测试RAID0的性能:
说明:RAID0的性能比没有做RAID的单块设备的性能,提供了1倍多。没有做RAID的设备,写入一个1500M的内容需要8.352s,做了RAID0的设备写入1500M的内容只用了3.971s。
查看RAID设备的状态:cat /proc/mdstat
[root@Server3 backup]# cat /proc/mdstat Personalities : [raid0] md0 : active raid0 sda7[1] sda6[0] 2117632 blocks super 1.2 512k chunks unused devices:[root@Server3 backup]#
查看RAID设备的详细信息:mdadm -D /dev/md0 长选项:mdadm --detail
[root@Server3 ~]# mdadm -D /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 15:16:34 2014 Raid Level : raid0 Array Size : 2117632 (2.02 GiB 2.17 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Jul 16 15:16:34 2014 State : clean Active Devices : 2Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Name : Server3:0 (local to host Server3) UUID : d3c6d4f8:7447631e:c8941e61:a538f979 Events : 0 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 1 8 7 1 active sync /dev/sda7[root@Server3 ~]#
管理模式:添加(--add)、删除(--remove)、模拟设备损坏(--fail)。
模拟设备损坏:--fail
[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:06:18 2014 Raid Level : raid1 Array Size : 1059222 (1034.57 MiB 1084.64 MB) Used Dev Size : 1059222 (1034.57 MiB 1084.64 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:07:17 2014 State : clean, degraded Active Devices : 1Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Name : Server3:0 (local to host Server3) UUID : d19b864a:36cdb744:52bc5688:39a9668f Events : 18 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 1 0 0 1 removed 1 8 7 - faulty spare /dev/sda7[root@Server3 ~]#
移除损坏的设备:--remove
[root@Server3 ~]# mdadm --manage /dev/md0 --remove /dev/sda7mdadm: hot removed /dev/sda7 from /dev/md0[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:06:18 2014 Raid Level : raid1 Array Size : 1059222 (1034.57 MiB 1084.64 MB) Used Dev Size : 1059222 (1034.57 MiB 1084.64 MB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:09:00 2014 State : clean, degraded Active Devices : 1Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Name : Server3:0 (local to host Server3) UUID : d19b864a:36cdb744:52bc5688:39a9668f Events : 21 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 1 0 0 1 removed[root@Server3 ~]#
添加设备:--add
[root@Server3 ~]# mdadm --manage /dev/md0 --add /dev/sda7mdadm: added /dev/sda7[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:06:18 2014 Raid Level : raid1 Array Size : 1059222 (1034.57 MiB 1084.64 MB) Used Dev Size : 1059222 (1034.57 MiB 1084.64 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:11:04 2014 State : clean, degraded, recovering Active Devices : 1Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 24% complete Name : Server3:0 (local to host Server3) UUID : d19b864a:36cdb744:52bc5688:39a9668f Events : 36 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 2 8 7 1 spare rebuilding /dev/sda7[root@Server3 ~]#
停止阵列:--stop
[root@Server3 ~]# mdadm --stop /dev/md0mdadm: stopped /dev/md0[root@Server3 ~]#
重新启用阵列:--assemble
[root@Server3 ~]# mdadm --assemble /dev/md0 /dev/sda{6,7}mdadm: /dev/md0 has been started with 2 drives.[root@Server3 ~]# cat /proc/mdstat Personalities : [raid0] [raid1] md0 : active raid1 sda6[0] sda7[2] 1059222 blocks super 1.2 [2/2] [UU] unused devices:[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:06:18 2014 Raid Level : raid1 Array Size : 1059222 (1034.57 MiB 1084.64 MB) Used Dev Size : 1059222 (1034.57 MiB 1084.64 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:11:07 2014 State : clean Active Devices : 2Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : Server3:0 (local to host Server3) UUID : d19b864a:36cdb744:52bc5688:39a9668f Events : 51 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 2 8 7 1 active sync /dev/sda7[root@Server3 ~]#
彻底删除RAID
[root@Server3 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 9.9G 7.8G 1.6G 83% /tmpfs 245M 0 245M 0% /dev/shm/dev/sda1 194M 28M 156M 16% /boot/dev/md0 3.0G 69M 2.8G 3% /backup[root@Server3 ~]# umount /dev/md0[root@Server3 ~]# mdadm --stop /dev/md0mdadm: stopped /dev/md0[root@Server3 ~]# mdadm --zero-superblock /dev/sda{6,7,8,9,10}[root@Server3 ~]#说明:--zero-superblock 加上该选项时,会判断如果该阵列是否包含一个有效的阵列超级快,若有则将该超级块中阵列信息抹除。[root@Server3 ~]# rm /etc/mdadm.conf 删除mdadm的配置文件。如果以前配置过。
开机自动装配RAID设备:
mdadm --detail --scan > /etc/mdadm.conf作用是将raid信息保存进mdadm.conf,以后装配时,就可以用mdadm -A /dev/md0这种格式来装配。
示例2:创建RAID5,并演示所有操作
测试1:创建RAID 5,并指定RAID等级,RAID设备数和备份设备数
[root@Server3 ~]# mdadm --create /dev/md0 --auto=yes --level=5 --raid-devices=4 /dev/sda{6,7,8,9} --spare-devices=1 /dev/sda10 mdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:36:03 2014 Raid Level : raid5 Array Size : 3176448 (3.03 GiB 3.25 GB) Used Dev Size : 1058816 (1034.17 MiB 1084.23 MB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:36:29 2014 State : clean Active Devices : 4Working Devices : 5 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : Server3:0 (local to host Server3) UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86 Events : 20 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 1 8 7 1 active sync /dev/sda7 2 8 8 2 active sync /dev/sda8 5 8 9 3 active sync /dev/sda9 4 8 10 - spare /dev/sda10[root@Server3 ~]#
测试2:模拟设备故障
[root@Server3 ~]# mdadm --manage /dev/md0 --fail /dev/sda6mdadm: set /dev/sda6 faulty in /dev/md0[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:36:03 2014 Raid Level : raid5 Array Size : 3176448 (3.03 GiB 3.25 GB) Used Dev Size : 1058816 (1034.17 MiB 1084.23 MB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:42:52 2014 State : clean, degraded, recovering Active Devices : 3Working Devices : 4 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 14% complete Name : Server3:0 (local to host Server3) UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86 Events : 24 Number Major Minor RaidDevice State 4 8 10 0 spare rebuilding /dev/sda10 1 8 7 1 active sync /dev/sda7 2 8 8 2 active sync /dev/sda8 5 8 9 3 active sync /dev/sda9 0 8 6 - faulty spare /dev/sda6[root@Server3 ~]# 说明:可以看到,当模拟sda6出现故障时,备份盘sda10立马被激活。
测试3:移除故障盘
[root@Server3 ~]# mdadm --manage /dev/md0 --remove /dev/sda6mdadm: hot removed /dev/sda6 from /dev/md0[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:36:03 2014 Raid Level : raid5 Array Size : 3176448 (3.03 GiB 3.25 GB) Used Dev Size : 1058816 (1034.17 MiB 1084.23 MB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:44:28 2014 State : clean Active Devices : 4Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : Server3:0 (local to host Server3) UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86 Events : 42 Number Major Minor RaidDevice State 4 8 10 0 active sync /dev/sda10 1 8 7 1 active sync /dev/sda7 2 8 8 2 active sync /dev/sda8 5 8 9 3 active sync /dev/sda9[root@Server3 ~]#
测试4:添加新的备用盘
[root@Server3 ~]# mdadm --manage /dev/md0 --add /dev/sda6mdadm: added /dev/sda6[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:36:03 2014 Raid Level : raid5 Array Size : 3176448 (3.03 GiB 3.25 GB) Used Dev Size : 1058816 (1034.17 MiB 1084.23 MB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Wed Jul 16 16:46:10 2014 State : clean Active Devices : 4Working Devices : 5 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : Server3:0 (local to host Server3) UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86 Events : 43 Number Major Minor RaidDevice State 4 8 10 0 active sync /dev/sda10 1 8 7 1 active sync /dev/sda7 2 8 8 2 active sync /dev/sda8 5 8 9 3 active sync /dev/sda9 6 8 6 - spare /dev/sda6[root@Server3 ~]#
测试5:格式化,开机自动挂载
[root@Server3 ~]# echo "/dev/md0 /backup ext4 defaults 0 0" >> /etc/fstab [root@Server3 ~]# mount -a[root@Server3 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 9.9G 7.8G 1.6G 83% /tmpfs 245M 0 245M 0% /dev/shm/dev/sda1 194M 28M 156M 16% /boot/dev/md0 3.0G 69M 2.8G 3% /backup[root@Server3 ~]#
测试6:停止RAID
[root@Server3 ~]# mdadm --stop /dev/md0mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?[root@Server3 ~]# umount /dev/md0[root@Server3 ~]# mdadm --stop /dev/md0mdadm: stopped /dev/md0[root@Server3 ~]# 说明:停止之前需要先卸载
测试7:重新装载RAID。mdadm -As 长选项 mdadm --assemble --scan
[root@Server3 ~]# mdadm --assemble --scanmdadm: /dev/md/0 has been started with 4 drives and 1 spare.[root@Server3 ~]#
测试8:重启系统,测试是否自动挂载RAID
[root@Server3 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 9.9G 7.8G 1.6G 83% /tmpfs 245M 0 245M 0% /dev/shm/dev/sda1 194M 28M 156M 16% /boot[root@Server3 ~]# mount -amount: special device /dev/md0 does not exist[root@Server3 ~]# ls -l /dev/mmapper/ mcelog md/ md127 mem midi [root@Server3 ~]# ls -l /dev/md说明:重启系统后,发现RAID设备没有自动挂载,并且在/dev目录下md0设备也没有了,而是变成了md127,这是因为没有将raid信息添加到/etc/mdadm.conf这个配置文件的原因。查看/proc/mdstat:[root@Server3 ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md127 : active raid5 sda6[6](S) sda9[5] sda8[2] sda10[4] sda7[1] 3176448 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] unused devices:[root@Server3 ~]#
解决方法:
1. 获取md127的UUID信息:mdadm --detail /dev/md127 | grep 'UUID'
[root@Server3 ~]# mdadm --detail /dev/md127 | grep UUID UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86[root@Server3 ~]#
2. 创建配置文件mdadm.conf
[root@Server3 ~]# cat /etc/mdadm.conf DEVICE /dev/sda6 /dev/sda7 /dev/sda8 /dev/sda9 /dev/sd10ARRAY /dev/md0 UUID=3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86[root@Server3 ~]# 说明:DEVICE:指定所有的RAID设备。ARRAY:定义RAID名称和UUID
3. 重启系统
[root@Server3 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 9.9G 7.8G 1.6G 83% /tmpfs 245M 0 245M 0% /dev/shm/dev/sda1 194M 28M 156M 16% /boot/dev/md0 3.0G 69M 2.8G 3% /backup[root@Server3 ~]# [root@Server3 ~]# [root@Server3 ~]# [root@Server3 ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sda8[2] sda6[6] sda7[1] sda9[5] 3176448 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] unused devices:[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:36:03 2014 Raid Level : raid5 Array Size : 3176448 (3.03 GiB 3.25 GB) Used Dev Size : 1058816 (1034.17 MiB 1084.23 MB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Wed Jul 16 17:19:26 2014 State : clean Active Devices : 4Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : Server3:0 (local to host Server3) UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86 Events : 64 Number Major Minor RaidDevice State 6 8 6 0 active sync /dev/sda6 1 8 7 1 active sync /dev/sda7 2 8 8 2 active sync /dev/sda8 5 8 9 3 active sync /dev/sda9[root@Server3 ~]# 说明:重启系统以后,发现可以自动挂载了,但是spare 磁盘没了。
重新添加一个spare设备。并重启系统就可以了。
[root@Server3 ~]# mdadm --manage /dev/md0 --add /dev/sda10mdadm: added /dev/sda10[root@Server3 ~]# mdadm --detail /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Jul 16 16:36:03 2014 Raid Level : raid5 Array Size : 3176448 (3.03 GiB 3.25 GB) Used Dev Size : 1058816 (1034.17 MiB 1084.23 MB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Wed Jul 16 17:32:23 2014 State : clean Active Devices : 4Working Devices : 5 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : Server3:0 (local to host Server3) UUID : 3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86 Events : 65 Number Major Minor RaidDevice State 6 8 6 0 active sync /dev/sda6 1 8 7 1 active sync /dev/sda7 2 8 8 2 active sync /dev/sda8 5 8 9 3 active sync /dev/sda9 4 8 10 - spare /dev/sda10[root@Server3 ~]#
综上所述:在创建好raid之后,如果没有创建配置文件/etc/mdadm.conf的话,重启系统后,新创建的md设备会变成md127,因此在创建好raid后,需要创建mdadm.conf配置文件,该文件中的信息可以采用如下方式添加:
[root@Server3 ~]# echo "DEVICE /dev/sda6 /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10 " >> /etc/mdadm.conf [root@Server3 ~]# mdadm -Ds >> /etc/mdadm.conf [root@Server3 ~]# echo "MAILADDR frame@frame.com" >> /etc/mdadm.conf MAILADDR指定出问题时监控系统发邮件的地址 # 格式如下: DEVICE /dev/sda6 /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10ARRAY /dev/md0 metadata=1.2 spares=1 name=Server3:0 UUID=3eed72e6:c0f4fa9c:72ff6b5d:32b3cc86MAILADDR mospiral@gmail.com #DEVICE行指明:依据该配置文件开启阵列时,去查找那些设备的超级快信息;若没有该行,就去搜索mtab中所有设备分区的超级快信息;所以改行可以不写,但是只要写上,以后添加spare设备时就需要同时修改改行信息;#ARRAY行指明raid的名称,UUID等信息。
可以参考:http://molinux.blog.51cto.com/2536040/516008