分类: LINUX
2008-12-31 17:18:08
Create | 使用空闲的设备创建一个新的阵列,每个设备具有元数据块 |
---|---|
Assemble | 将原来属于一个阵列的每个块设备组装为阵列 |
Build | 创建或组装不需要元数据的阵列,每个设备没有元数据块 |
Manage | 管理已经存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘 |
Misc | 报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息 |
Grow | 改变阵列中每个设备被使用的容量或阵列中的设备的数目 |
Monitor | 监控一个或多个阵列,上报指定的事件 |
[root@fc5 mdadm-2.6.3]# cat /proc/mdstat Personalities : [raid10] md0 : active raid10 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU] [===>...........] resync = 15.3% (483072/3145536) finish=0.3min speed=120768K/sec unused devices:[root@fc5 mdadm-2.6.3]# cat /proc/mdstat Personalities : [raid10] md0 : active raid10 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU] unused devices:
当阵列没有文件系统或者其他存储应用以及高级设备使用的话,可以使用--stop(或者其缩写-S)停止阵列;如果命令返回设备或者资源忙类型的错误,说明/dev/md0正在被上层应用使用,暂时不能停止,必须要首先停止上层的应用,这样也能保证阵列上数据的一致性。
[root@fc5 mdadm-2.6.3]# ./mdadm --stop /dev/md0 mdadm: fail to stop array /dev/md0: Device or resource busy [root@fc5 mdadm-2.6.3]# umount /dev/md0 [root@fc5 mdadm-2.6.3]#./mdadm --stop /dev/md0 mdadm: stopped /dev/md0
模式--assemble或者其缩写(-A)主要是检查底层设备的元数据信息,然后再组装为活跃的阵列。如果我们已经知道阵列由那些设备组成,可以指定使用那些设备来启动阵列。
[root@fc5 mdadm-2.6.3]# ./mdadm -A /dev/md0 /dev/sd[b-h] mdadm: /dev/md0 has been started with 6 drives and 1 spare.
如果有配置文件(/etc/mdadm.conf)可使用命令mdadm -As /dev/md0。mdadm先检查mdadm.conf中的DEVICE信息,然后从每个设备上读取元数据信息,并检查是否和ARRAY信息一致,如果信息一致则启动阵列。如果没有配置/etc/mdadm.conf文件,而且又不知道阵列由那些磁盘组成,则可以使用命令--examine(或者其缩写-E)来检测当前的块设备上是否有阵列的元数据信息。
[root@fc5 mdadm-2.6.3]# ./mdadm -E /dev/sdi mdadm: No md superblock detected on /dev/sdi. [root@fc5 mdadm-2.6.3]# ./mdadm -E /dev/sdb /dev/sdb: Magic : a92b4efc Version : 00.90.00 UUID : 0cabc5e5:842d4baa:e3f6261b:a17a477a Creation Time : Sun Aug 22 17:49:53 1999 Raid Level : raid10 Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Array Size : 3145536 (3.00 GiB 3.22 GB) Raid Devices : 6 Total Devices : 7 Preferred Minor : 0 Update Time : Sun Aug 22 18:05:56 1999 State : clean Active Devices : 6 Working Devices : 7 Failed Devices : 0 Spare Devices : 1 Checksum : 2f056516 - correct Events : 0.4 Layout : near=2, far=1 Chunk Size : 64K Number Major Minor RaidDevice State this 0 8 16 0 active sync /dev/sdb 0 0 8 16 0 active sync /dev/sdb 1 1 8 32 1 active sync /dev/sdc 2 2 8 48 2 active sync /dev/sdd 3 3 8 64 3 active sync /dev/sde 4 4 8 80 4 active sync /dev/sdf 5 5 8 96 5 active sync /dev/sdg 6 6 8 112 6 spare /dev/sdh从上面命令结果可以找到阵列的唯一标识UUID和阵列包含的设备名字,然后再使用上面的命令来组装阵列,也可以使用UUID标识来组装阵列。没有一致的元数据的信息设备(例如/dev/sda和/dev/sda1等)mdadm程序会自动跳过。
[root@fc5 mdadm-2.6.3]# ./mdadm -Av --uuid=0cabc5e5:842d4baa:e3f6261b:a17a477a /dev/md0 /dev/sd* mdadm: looking for devices for /dev/md0 mdadm: no recogniseable superblock on /dev/sda mdadm: /dev/sda has wrong uuid. mdadm: no recogniseable superblock on /dev/sda1 mdadm: /dev/sda1 has wrong uuid. mdadm: no RAID superblock on /dev/sdi mdadm: /dev/sdi has wrong uuid. mdadm: /dev/sdi1 has wrong uuid. mdadm: no RAID superblock on /dev/sdj mdadm: /dev/sdj has wrong uuid. mdadm: /dev/sdj1 has wrong uuid. mdadm: no RAID superblock on /dev/sdk mdadm: /dev/sdk has wrong uuid. mdadm: /dev/sdk1 has wrong uuid. mdadm: /dev/sdb is identified as a member of /dev/md0, slot 0. mdadm: /dev/sdc is identified as a member of /dev/md0, slot 1. mdadm: /dev/sdd is identified as a member of /dev/md0, slot 2. mdadm: /dev/sde is identified as a member of /dev/md0, slot 3. mdadm: /dev/sdf is identified as a member of /dev/md0, slot 4. mdadm: /dev/sdg is identified as a member of /dev/md0, slot 5. mdadm: /dev/sdh is identified as a member of /dev/md0, slot 6. mdadm: added /dev/sdc to /dev/md0 as 1 mdadm: added /dev/sdd to /dev/md0 as 2 mdadm: added /dev/sde to /dev/md0 as 3 mdadm: added /dev/sdf to /dev/md0 as 4 mdadm: added /dev/sdg to /dev/md0 as 5 mdadm: added /dev/sdh to /dev/md0 as 6 mdadm: added /dev/sdb to /dev/md0 as 0 mdadm: /dev/md0 has been started with 6 drives and 1 spare.
配置文件: /etc/mdadm.conf作为默认的配置文件,主要作用是方便跟踪软RAID的配置,尤其是可以配置监视和事件上报选项。Assemble命令也可以使用--config(或者其缩写-c)来指定配置文件。我们通常可以如下命令来建#立配置文件
使用配置文件启动阵列时,mdadm会查询配置文件中的设备和阵列内容,然后启动运行所有能运行RAID阵列。如果指定阵列的设备名字,则只启动对应的阵列。
[root@fc5 mdadm-2.6.3]# ./mdadm -As mdadm: /dev/md1 has been started with 3 drives. mdadm: /dev/md0 has been started with 6 drives and 1 spare. [root@fc5 mdadm-2.6.3]# cat /proc/mdstat Personalities : [raid0] [raid10] md0 : active raid10 sdb[0] sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] 3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU] md1 : active raid0 sdi1[0] sdk1[2] sdj1[1] 7337664 blocks 32k chunks unused devices:[root@fc5 mdadm-2.6.3]# ./mdadm -S /dev/md0 /dev/md1 mdadm: stopped /dev/md0 mdadm: stopped /dev/md1 [root@fc5 mdadm-2.6.3]# ./mdadm -As /dev/md0 mdadm: /dev/md0 has been started with 6 drives and 1 spare. [root@fc5 mdadm-2.6.3]# cat /proc/mdstat Personalities : [raid0] [raid10] md0 : active raid10 sdb[0] sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] 3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU] unused devices:
我们可以通过cat /proc/mdstat信息查看所有运行的RAID阵列的状态,在第一行中首先是MD的设备名,active和inactive选项表示阵列是否能读写,接着是阵列的RAID级别,后面是属于阵列的块设备,方括号[]里的数字表示设备在阵列中的序号,(S)表示其是热备盘,(F)表示这个磁盘是faulty状态。在第二行中首先是阵列的大小,单位是KB,接着是chunk-size的大小,然后是layout类型,不同RAID级别的layout类型不同,[6/6]和[UUUUUU]表示阵列有6个磁盘并且6个磁盘都是正常运行的,而[5/6]和[_UUUUU] 表示阵列有6个磁盘中5个都是正常运行的,下划线对应的那个位置的磁盘是faulty状态的。
[root@fc5 mdadm-2.6.3]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid5 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 5242560 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU] unused devices:[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 -f /dev/sdh /dev/sdb mdadm: set /dev/sdh faulty in /dev/md0 mdadm: set /dev/sdb faulty in /dev/md0 [root@fc5 mdadm-2.6.3]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid5 sdh[6](F) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[7](F) 5242560 blocks level 5, 64k chunk, algorithm 2 [6/5] [_UUUUU] unused devices: 我们也可以通过mdadm命令查看指定阵列的简要信息(使用--query或者其缩写-Q)和详细信息(使用--detail或者其缩写-D) 详细信息包括RAID的版本、创建的时间、RAID级别、阵列容量、可用空间、设备数量、超级块状态、更新时间、UUID信息、各个设备的状态、RAID算法级别类型和布局方式以及块大小等信息。设备状态信息分为active, sync, spare, faulty, rebuilding, removing等等。
root@fc5 mdadm-2.6.3]# ./mdadm --query /dev/md0 /dev/md0: 2.100GiB raid10 6 devices, 1 spare. Use mdadm --detail for more detail. [root@fc5 mdadm-2.6.3]# ./mdadm --detail /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Sun Aug 22 17:49:53 1999 Raid Level : raid10 Array Size : 3145536 (3.00 GiB 3.22 GB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 6 Total Devices : 7 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Aug 22 21:55:02 1999 State : clean Active Devices : 6 Working Devices : 7 Failed Devices : 0 Spare Devices : 1 Layout : near=2, far=1 Chunk Size : 64K UUID : 0cabc5e5:842d4baa:e3f6261b:a17a477a Events : 0.122 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 3 8 64 3 active sync /dev/sde 4 8 80 4 active sync /dev/sdf 5 8 96 5 active sync /dev/sdg 6 8 112 - spare /dev/sdh
mdadm可以在Manage模式下,对运行中的阵列进行添加及删除磁盘。常用于标识failed磁盘,增加spare(热备)磁盘,以及从阵列中移走已经失效的磁盘等等。使用--fail(或者其缩写-f)指定磁盘损坏。
[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 当磁盘已经损坏时,使用--remove(或者其缩写--f)参数将这个磁盘从磁盘阵列中移走;但如果设备还正在被阵列使用,则不能从阵列中移走。
[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --remove /dev/sdb mdadm: hot removed /dev/sdb [root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --remove /dev/sde mdadm: hot remove failed for /dev/sde: Device or resource busy如果阵列带有spare磁盘,那么自动将损坏磁盘上的数据重构到新的spare磁盘上;
[root@fc5 mdadm-2.6.3]# ./mdadm -f /dev/md0 /dev/sdb ; cat /proc/mdstat mdadm: set /dev/sdb faulty in /dev/md0 Personalities : [raid0] [raid10] md0 : active raid10 sdh[6] sdb[7](F) sdc[0] sdg[5] sdf[4] sde[3] sdd[2] 3145536 blocks 64K chunks 2 near-copies [6/5] [U_UUUU] [=======>........] recovery = 35.6% (373888/1048512) finish=0.1min speed=93472K/sec unused devices:如果阵列没有热备磁盘,可以使用--add(或者其缩写-a)参数增加热备磁盘
[root@fc5 mdadm-2.6.3]# ./mdadm /dev/md0 --add /dev/sdh mdadm: added /dev/sdh 监控阵列可以使用mdadm对RAID阵列进行监控,监控程序定时查询指定的事件是否发生,然后根据配置来妥善处理。例如当阵列中的磁盘设备出现问题的时候,可以发送邮件给管理员;或者当磁盘出现问题的时候由回调程序来进行自动的磁盘替换,所有监控事件都可以记录到系统日志中。目前mdadm支持的事件有RebuildStarted, RebuildNN(NN is 20, 40, 60, or 80), RebuildFinished, Fail,FailSpare,SpareActive,NewArray, DegradedArray, MoveSpare, SparesMissing, TestMessage。
如果配置每300秒mdadm监控进程查询MD设备一次,当阵列出现错误,会发送邮件给指定的用户,执行事件处理的程序并且记录上报的事件到系统的日志文件。使用--daemonise参数(或者其缩写-f)使程序持续在后台运行。如果要发送邮件需要sendmail程序运行,当邮件地址被配置为外网地址应先测试是否能发送出去。
[root@fc5 mdadm-2.6.3]#./mdadm --monitor --mail=root@localhost --program=/root/md.sh --syslog --delay=300 /dev/md0 --daemonise