这篇文章聊聊软RAID
。html
随着数据日益增加,单块硬盘每每由于容量小而不能知足大部分人的需求,因而RAID
就应运而生。RAID
( Redundant Array of Independent Disks
)即独立磁盘冗余阵列,简称磁盘阵列。简单地说,RAID
是由多个独立的高性能磁盘驱动器组成的磁盘组,从而提供比单个磁盘更高的存储性能和数据冗余的技术。linux
这里要提一下JBOD
(Just a Bunch of Disks
)。JBOD
将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。JBOD
的数据存放机制是由第一块磁盘开始按顺序日后存储,当前磁盘存储空间用完后,再依次日后面的磁盘存储数据。JBOD
存储性能彻底等同于单块磁盘,并且也不提供数据冗余。它只是简单提供一种扩展存储空间的机制,JBOD
可用存储容量等于全部成员磁盘的存储空间之和,即拥有容量叠加的做用。目前JBOD
常指磁盘柜,而不论其是否提供RAID
功能。算法
RAID
中主要有三个关键概念和技术:镜像(Mirroring
)、数据条带(Data Stripping
)和数据校验(Data parity
)。windows
I/O
性能提高。不一样等级的RAID
采用一个或多个以上的三种技术,来得到不一样的数据可靠性、可用性和I/O
性能。至于采用何种模式的RAID
,须要在深刻理解系统需求的前提下进行合理选择,综合评估可靠性、性能和成原本进行折中的选择。缓存
<center></center>并发
随着处理器、内存、计算机接口等技术的不断发展,RAID
不断地发展和革新,在计算机存储领域获得了普遍的应用,从高端系统逐渐延伸到普通的中低端系统。RAID
技术如此流行,源于其具备显著的特征和优点,基本能够知足大部分的数据存储需求。整体说来,RAID
主要优点有以下几点运维
RAID
扩大了磁盘的容量,由多个磁盘组成的RAID
系统具备海量的存储空间。如今单个磁盘的容量就能够到10TB
以上,这样RAID
的存储容量就能够达到PB
级,大多数的存储需求均可以知足。通常来讲,RAID
可用容量要小于全部成员磁盘的总容量。不一样等级的RAID
算法须要必定的冗余开销,具体容量开销与采用算法相关。若是已知RAID
算法和容量,能够计算出RAID
的可用容量。一般,RAID
容量利用率在50%
~ 90%
之间。RAID
的高性能受益于数据条带化技术。单个磁盘的I/O
性能受到接口、带宽等计算机技术的限制,性能每每颇有 限,容易成为系统性能的瓶颈。经过数据条带化,RAID
将数据I/O
分散到各个成员磁盘上,从而得到比单个磁盘成倍增加的聚合I/O
性能。RAID
的另外一个重要特征。从理论上讲,由多个磁盘组成的RAID
系统在可靠性方面应该比单个磁盘要差。这里有个隐含假定:单个磁盘故障将致使整个RAID
不可用。RAID
采用镜像和数据校验等数据冗余技术,打破了这个假定。镜像是最为原始的冗余技术,把某组磁盘驱动器上的数据彻底复制到另外一组磁盘驱动器上,保证总有数据副本可用。 比起镜像50%
的冗余开销,数据校验要小不少,它利用校验冗余信息对数据进行校验和纠错。RAID
冗余技术大幅提高数据可用性和可靠性,保证了若干磁盘出错时,不会致使数据的丢失,不影响系统的连续运行。RAID
是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。对于外部主机系统来讲,RAID
是一个单一的、快速可靠的大容量磁盘驱动器。这样,用户就能够在这个虚拟驱动器上来组织和存储应用系统数据。从用户应用角度看,可以使存储系统简单易用,管理也很便利。因为RAID
内部完成了大量的存储管理工做,管理员只须要管理单个虚拟驱动器,能够节省大量的管理工做。RAID
能够动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些均可以大大简化管理工做。<center></center>ide
因为本篇文章主要讲解的是软RAID
,因此就不展开赘述,对RAID
想要深刻了解或对RAID
各类模式感兴趣的,能够阅读如下连接:工具
RAID
分为软件RAID
和硬件RAID
。布局
硬件磁盘阵列(hardwareRAID
)是经过磁盘阵列卡(RAID
卡)来建立磁盘阵列的。在RAID
卡上会有一个专门的芯片来处理RAID
任务,能够大大减轻原来系统的计算压力和I/O
压力,效率也会获得很好的提高;同时如今大部分的RAID
卡都支持热拔插,因此在更换损坏磁盘时是很是方便的。可是很差的一点是RAID
卡比较贵,特别是那些好一点的RAID
卡就会特别贵,并且功能还不能保证特别齐全,因此在这种状况下就出现了软件RAID
,来模拟硬件RAID
。
软件RAID
是一种模拟硬件RAID
的产物,运行在操做系统上面,全部任务的处理都由CPU
来完成,因此须要占用必定的系统资源,特别是计算和I/O
资源,因此性能不如硬RAID
,但软RAID
实现简单,不须要额外的硬件设备。。虽说如今的机器计算速度都很是快了,可是对于一些要求较高的场景或企业,通常最好仍是尽可能不要选择软件RAID
的,毕竟在总的使用成本上来讲硬件RAID
性价比仍是蛮高的(硬RAID
经过RAID
卡解决了不少管理问题,大大地下降了后期运维成本)。
硬RAID
优点:
RAID
操做都由RAID
控制芯片完成,不占用任何CPU
和内存资源,并且RAID
卡上通常还有额外的cache
进一步提高性能,同时拥有独立的电池对缓存进行供电保护,系统重启/电源恢复的时候能够把缓存中未写入硬盘的数据写入硬盘。RAID
能够支持全部与RAID
相关的功能和全部RAID
级别,而软RAID
只能支持几种基础的RAID
级别,而且不具备硬RAID
的许多高级功能,好比点灯、缓存、热插拔等等。RAID
独立于系统,例如windows/linux
均可以用,自己拥有CPU
、内存、电池等。软RAID
依赖于操做系统,若是操做系统出问题,软RAID
就挂了。硬RAID
的兼容性要好不少,万一系统出了问题,也能够很方便地作系统维护和数据恢复。软RAID
优点:
重要的事情说三遍,软RAID
最大的优点就是便宜!!!
总的来讲,硬RAID
功能上是完爆软RAID
的,可是硬RAID
比较昂贵,通常的RAID
都须要几千元。企业级的核心应用推荐采用硬RAID
的方案,花钱解决一切烦恼。而一些不是特别核心的应用或者我的推荐采用软RAID
,软RAID
目前大部分操做系统都支持,而且对基础的RAID
的功能支持的也不错,可以知足大部分需求,最关键的仍是不要钱!!!
mdadm
是Linux
操做系统上开源的软RAID
用户层管理工具,容许用户建立和管理软RAID
磁盘阵列。
目前,mdadm
支持大部分常见的阵列类型,如JBOD
、RAID0
、RAID1
、RAID4
、RAID5
、RAID6
、MULTIPATH
、RAID10
等,建立和管理RAID
也十分的方便,同时,mdadm
使用很是灵活,磁盘或者分区均可以做为RAID
的成员盘来建立软RAID
。主要有7
种使用模式:
模式名字 | 主要功能 |
---|---|
Create | 使用空闲的设备建立一个新的阵列,每一个设备具备元数据块 |
Assemble | 将原来属于一个阵列的每一个块设备组装为阵列 |
Build | 建立或组装不须要元数据的阵列,每一个设备没有元数据块 |
Manage | 管理已经存储阵列中的设备,好比增长热备磁盘或者设置某个磁盘失效,而后从阵列中删除这个磁盘 |
Misc | 报告或者修改阵列中相关设备的信息,好比查询阵列或者设备的状态信息 |
Grow | 改变阵列中每一个设备被使用的容量或阵列中的设备的数目 |
Monitor | 监控一个或多个阵列,上报指定的事件 |
mdadm
使用--create
(或其缩写-C
)参数来建立新的阵列,而且将一些重要阵列的标识信息做为元数据能够写在每个底层设备的指定区间。--level
(或者其缩写-l
)表示阵列的RAID
级别,--chunk
(或者其缩写-c
)表示每一个条带单元的大小,以KB
为单位,默认为64KB
,条带单元的大小配置对不一样负载下的阵列读写性能有很大影响。--raid-devices
(或者其缩写-n
)表示阵列中活跃的设备个数,而--spare-devices
(或者其缩写-x
)表示阵列中热备盘的个数,一旦阵列中的某个磁盘失效,MD
内核驱动程序自动用将热备磁盘加入到阵列,而后重构丢失磁盘上的数据到热备磁盘上。
建立RAID0: mdadm --create /dev/md0 --level=0 --chunk=32 --raid-devices=3 /dev/sd[i-k]1 建立RAID1: mdadm -C /dev/md0 -l1 -c128 -n2 -x1 /dev/sd[i-k]1 建立RAID5: mdadm -C /dev/md0 -l5 -n5 /dev/sd[c-g] -x1 /dev/sdb 建立RAID6: mdadm -C /dev/md0 -l6 -n5 /dev/sd[c-g] -x2 /dev/sdb /dev/sdh 建立RAID10: mdadm -C /dev/md0 -l10 -n6 /dev/sd[b-g] -x1 /dev/sdh
若是一个块设备元数据中含有其余旧阵列信息,这时候会须要交互式命令确认yes/no
,若是想自动化,经过管道符的方式便可:
采用missing做为其中一个设备,至关于建立单盘raid1 yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
Build
模式能够用来建立没有元数据(即没有superblock
)的RAID0/1
设备,不能建立RAID4/5/6/10
等设备。因为不存在元数据块,不少区分和检查工做没法进行,须要对使用设备特别清楚,这种模式不经常使用,经常使用的仍是Create
模式,毕竟元数据块仍是拥有很大的做用。
[root@test ~]# ./mdadm -BR /dev/md0 -l0 -n6 /dev/sd[b-g] mdadm: array /dev/md0 built and started. [root@test ~]# ./mdadm -BR /dev/md0 -l1 -n2 /dev/sd[b-c] mdadm: array /dev/md0 built and started. [root@test ~]# ./mdadm -BR /dev/md0 -l5 -n6 /dev/sd[b-g] mdadm: Raid level 5 not permitted with --build. [root@test ~]# ./mdadm -BR /dev/md0 –l6 -n6 /dev/sd[b-g] mdadm: Raid level 5 not permitted with --build. [root@test ~]# ./mdadm -BR /dev/md0 –l10 -n6 /dev/sd[b-g] mdadm: Raid level 10 not permitted with --build.
经过mdadm
命令查看指定阵列的简要信息(使用--query
或者其缩写-Q
)和详细信息(使用--detail
或者其缩写-D
) 详细信息包括RAID
的版本、建立的时间、RAID
级别、阵列容量、可用空间、设备数量、超级块状态、更新时间、UUID
信息、各个设备的状态、RAID
算法级别类型和布局方式以及块大小等信息。设备状态信息分为active
,sync
,spare
,faulty
,rebuilding
,removing
等等。
查询简要信息 [root@test ~]# mdadm --query /dev/md0 /dev/md0: 2.100GiB raid10 6 devices, 1 spare. Use mdadm --detail for more detail. 查询详细信息 [root@test ~]# ./mdadm --detail /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Sun Aug 22 17:49:53 2018 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
上面是查询阵列里面的详细信息,咱们也能够查询阵列中具体设备的详细信息,使用命令--examine
(或者其缩写-E
)来检测当前的块设备上是否有阵列的元数据信息,包括设备RAID
级别,设备UUID
,阵列UUID
等等。
[root@test ~]# mdadm -E /dev/sdb1 /dev/sdb1: Magic : a92b4efc Version : 1.2 Feature Map : 0x1 Array UUID : df3ceb66:95a8c503:9c6c41b2:db583c57 Name : host244:root Creation Time : Wed Apr 17 18:33:11 2019 Raid Level : raid1 Raid Devices : 2 Avail Dev Size : 167772160 (80.00 GiB 85.90 GB) Array Size : 83886080 (80.00 GiB 85.90 GB) Data Offset : 131072 sectors Super Offset : 8 sectors Unused Space : before=130992 sectors, after=0 sectors State : clean Device UUID : 8054a66a:962c52e8:be0c8425:db207be4 Internal Bitmap : 8 sectors from superblock Update Time : Sat May 4 16:13:56 2019 Bad Block Log : 512 entries available at offset 16 sectors Checksum : 6af807c8 - correct Events : 207 Device Role : Active device 1 Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
咱们还能够经过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@test ~]# 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: <none> [root@test ~]# 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@test ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] 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: <none>
而且还会展现阵列中一些状态,好比recvoery
,resync
等等,而且还有详细包括进度值、速度、完成块大小等。
Linux
系统目前支持sysfs
也能够访问/sys/block/md0
目录查询阵列信息。
[root@test ~]# ls -l /sys/block/md0/ capability holders range size stat uevent dev md removable slaves subsystem [root@test ~]# ls /sys/block/md0/md/ array_state dev-sdg rd1 suspend_lo bitmap_set_bits dev-sdh rd2 sync_action chunk_size layout rd3 sync_completed component_size level rd4 sync_speed dev-sdb metadata_version rd5 sync_speed_max dev-sdc mismatch_cnt reshape_position sync_speed_min dev-sdd new_dev resync_start dev-sde raid_disks safe_mode_delay dev-sdf rd0 suspend_hi [root@test ~]# ls /sys/block/md0/slaves/ sdb sdc sdd sde sdf sdg sdh
当阵列没有文件系统或者其余存储应用以及高级设备使用的话,可使用--stop
(或者其缩写-S
)中止阵列;若是命令返回设备或者资源忙类型的错误,说明/dev/md0
正在被上层应用使用,暂时不能中止,必需要首先中止上层的应用,这样也能保证阵列上数据的一致性。
[root@test ~]# mdadm --stop /dev/md0 mdadm: fail to stop array /dev/md0: Device or resource busy [root@test ~]# umount /dev/md0 [root@test ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
上面只是中止阵列,阵列其中的设备还存在着阵列元数据信息,若是须要完全删除阵列,还须要--zero-superblock
将阵列中全部设备的元数据块删除。
[root@test ~]# mdadm --zero-superblock /dev/sdb
模式--assemble
或者其缩写(-A
)主要是检查底层设备的元数据信息,而后再组装为活跃的阵列。若是咱们已经知道阵列由那些设备组成,能够指定使用那些设备来启动阵列。
[root@test ~]# mdadm -A /dev/md0 /dev/sd[b-h] mdadm: /dev/md0 has been started with 6 drives and 1 spare.
能够经过配置文件/etc/mdadm.conf
从新组装,mdadm
先检查mdadm.conf
中的DEVICE
信息,而后从每一个设备上读取元数据信息,并检查是否和ARRAY
信息一致,若是信息一致则启动阵列。
mdadm -As /dev/md0
若是没有配置/etc/mdadm.conf
文件,并且又不知道阵列由那些磁盘组成,则可使用上面提到的查询命令--examine
(或者其缩写-E
)来检测当前的块设备上是否有阵列的元数据信息,找到阵列的惟一标识UUID
和阵列包含的设备名字,而后再使用上面的命令来组装阵列,也可使用UUID
标识来组装阵列。没有一致的元数据的信息设备(例如/dev/sda
和/dev/sda1
等)mdadm
程序会自动跳过。
[root@test ~]# ./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
)来指定配置文件。咱们一般能够以下命令来创建配置文件。
[root@test ~]# mdadm -Ds > /etc/mdadm.conf [root@test ~]# cat /etc/mdadm.conf # mdadm.conf written out by anaconda MAILADDR root AUTO +imsm +1.x -all ARRAY /dev/md/1 level=raid1 num-devices=2 UUID=fe796549:cdbe506c:51e5404e:fa40fee6 ARRAY /dev/md/2 level=raid1 num-devices=2 UUID=60cecdc1:f115d9e5:f9ddfb52:c3c035ab ARRAY /dev/md/3 level=raid1 num-devices=2 UUID=df3ceb66:95a8c503:9c6c41b2:db583c57 ARRAY /dev/md/4 level=raid0 num-devices=2 UUID=7c5f42c1:9b013ec0:b17b7337:33df22ca ARRAY /dev/md/5 level=raid1 num-devices=2 UUID=4cbb3226:c5acf9e3:fb156e23:9aa56a48
使用配置文件启动阵列时,mdadm
会查询配置文件中的设备和阵列内容,而后启动运行全部能运行RAID
阵列。若是指定阵列的设备名字,则只启动对应的阵列。
[root@test ~]# mdadm -As mdadm: /dev/md1 has been started with 3 drives. mdadm: /dev/md0 has been started with 6 drives and 1 spare. [root@test ~]# 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: <none> [root@test ~]# mdadm -S /dev/md0 /dev/md1 mdadm: stopped /dev/md0 mdadm: stopped /dev/md1 [root@test ~]# mdadm -As /dev/md0 mdadm: /dev/md0 has been started with 6 drives and 1 spare. [root@test ~]# 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: <none>
注意:
这个配置文件不是随着阵列信息随时变化的,而是能够手动修改的。因此根据配置文件组装未必百分百成功,由于以前可能阵列被手动修改过,因此建议在每一次改变阵列信息后,最好同步一下当前的阵列信息到配置文件中。
[root@test ~]# mdadm -Ds > /etc/mdadm.conf
mdadm
能够在Manage
模式下,对运行中的阵列进行添加及删除磁盘。经常使用于标识failed
磁盘,增长spare
(热备)磁盘,以及从阵列中移走已经失效的磁盘等等。 使用--fail
(或者其缩写-f
)指定磁盘损坏。
[root@test ~]# mdadm /dev/md0 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0
当磁盘已经损坏时,使用--remove
(或者其缩写-f
)参数将这个磁盘从磁盘阵列中移走;但若是设备还正在被阵列使用(即不处于失效状态),则不能从阵列中移走。
[root@test ~]# mdadm /dev/md0 --remove /dev/sdb mdadm: hot removed /dev/sdb [root@test ~]# mdadm /dev/md0 --remove /dev/sde mdadm: hot remove failed for /dev/sde: Device or resource busy
若是阵列带有spare
磁盘,那么自动将损坏磁盘上的数据重构到新的spare
磁盘上
[root@test ~]# 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: <none>
还可使用--add
(或者其缩写-a
)参数增长磁盘:
[root@test ~]# mdadm /dev/md0 --add /dev/sdh mdadm: added /dev/sdh
若是在建立阵列时不想使用整个块设备,能够指定用于建立RAID
阵列每一个块设备使用的设备大小。
[root@test ~]# mdadm -CR /dev/md0 -l5 -n6 /dev/sd[b-g] -x1 /dev/sdh --size=102400
而后在阵列须要扩展大小时,使用模式--grow
(或者其缩写-G
)以及--size
参数(或者其缩写-z
)再加上合适的大小数值就能分别扩展阵列所使用每一个块设备的大小。
[root@test ~]# mdadm -Q /dev/md0 /dev/md0: 500.00MiB raid5 6 devices, 1 spare. Use mdadm --detail for more detail. [root@test ~]# mdadm --grow /dev/md0 --size=204800 [root@test ~]# cat /proc/mdstat Personalities : [raid0] [raid10] [raid6] [raid5] [raid4] md0 : active raid5 sdh[6](S) sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 1024000 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU] [============>......] resync = 69.6% (144188/204800) finish=0.0min speed=10447K/sec unused devices: <none> [root@test ~]# mdadm -Q /dev/md0 /dev/md0: 1000.00MiB raid5 6 devices, 1 spare. Use mdadm --detail for more detail.
若是上面是文件系统,在设备大小扩展后,文件系统也要同时扩展。
mdadm
还提供增长或减小阵列中设备个数的功能(reshape
),使用模式—grow
和--raid-disks
(或者其缩写-n
)参数再加上合适的设备个数。扩展后阵列中原来的热备盘变为活跃磁盘,因此阵列的设备个数增长,阵列的大小也相应增长。
[root@test ~]# ./mdadm -D /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Sun Aug 22 22:16:19 1999 Raid Level : raid5 Array Size : 1024000 (1000.17 MiB 1048.58 MB) Used Dev Size : 204800 (200.03 MiB 209.72 MB) Raid Devices : 6 Total Devices : 7 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Aug 22 22:23:46 1999 State : clean Active Devices : 6 Working Devices : 7 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K UUID : 53e6395c:1af16258:087cb2a0:b66b087f Events : 0.12 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 [root@test ~]# ./mdadm --grow /dev/md0 --raid-disks=7 mdadm: Need to backup 1920K of critical section.. mdadm: ... critical section passed. [root@test ~]# cat /proc/mdstat Personalities : [raid0] [raid10] [raid6] [raid5] [raid4] md0 : active raid5 sdh[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0] 1024000 blocks super 0.91 level 5, 64k chunk, algorithm 2 [7/7] [UUUUUUU] [===>.............] reshape = 19.4% (40256/204800) finish=0.7min speed=3659K/sec unused devices: <none>
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@test ~]# mdadm --monitor --mail=root@localhost --program=/root/md.sh --syslog --delay=300 /dev/md0 --daemonise
查看系统日志信息,能够看到哪一个阵列或者阵列中的哪一个设备发生过的哪些事件。
[root@test ~]# mdadm -f /dev/md0 /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 [root@test ~]# tail –f /var/log/messages Aug 22 22:04:12 fc5 mdadm: RebuildStarted event detected on md device /dev/md0 Aug 22 22:04:12 fc5 kernel: md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery. Aug 22 22:04:12 fc5 kernel: md: using 128k window, over a total of 1048512 blocks. Aug 22 22:04:14 fc5 mdadm: Fail event detected on md device /dev/md0, component device /dev/sdb Aug 22 22:04:14 fc5 mdadm: Rebuild80 event detected on md device /dev/md0 Aug 22 22:04:16 fc5 mdadm: RebuildFinished event detected on md device /dev/md0 Aug 22 22:04:16 fc5 mdadm: SpareActive event detected on md device /dev/md0, component device /dev/sdh Aug 22 22:04:16 fc5 kernel: md: md0: recovery done.
回调程序从mdadm
程序接受两个或者三个参数:事件名字,监控阵列的名字和特殊事件可能使用到的底层块设备名字。上面的事件返回的信息以下:
Eventname: RebuildStarted Device: /dev/md0 next: Eventname: Fail Device: /dev/md0 next: /dev/sdb Eventname: Rebuild80 Device: /dev/md0 next: Eventname: RebuildFinished Device: /dev/md0 next: Eventname:SpareActive Device: /dev/md0 next: /dev/sdh
本文讲述了RAID
的特色和优点,而后引入硬RAID
和软RAID
,并分析这二者的优劣势;最后着重对软RAID
的建立,删除,中止和扩展等操做进行了介绍和实践。