mdadm程序是一个独立的程序,能完成所有的软件RAID管理功能,主要有7种使用模式:
模式名字 主要功能
Create 使用空闲的设备创建一个新的阵列,每个设备具有元数据块。
Assemble 将原来属于一个阵列的每个块设备组装为阵列。
Build 创建或组装不需要元数据的阵列,每个设备没有元数据块
Manage 管理已经存储阵列的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘。
Misc 报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息
Grow 改变阵列中每个设备被使用的容量或阵列中的设备的数目
Monitor 监控一个或多个阵列,上报指定的事件。
为磁盘划分分区
如果MD驱动被编译到内核中,当内核调用执行MD驱动时会自动查找分区为FD(Linux raid autodetect)格式的磁盘。所以一般会使用fdisk工具将HD磁盘或者SD磁盘分区,再设置FD的磁盘。
如果MD驱动是模块形式加载,需要在系统运行时由用户层脚本控制RAID阵列启动运行。如系统中在/etc/rc.d/rc.sysinit文件中有启动 RAID阵列的指令,若RAID的配置文件mdadm.conf存在,则调用mdadm检查配置文件时的先项,然后启动RAID阵列。
创建新的阵列
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]1 –x1 /dev/sdb
创建一个RAID10设备
mdadm –C /dev/md0 –l10 –n6 /dev/sd[b-g] –x1 /dev/sdh1
创建一个RAID0+1设备
mdadm –C /dev/md0 –l1 –n2 /dev/sdb1 /dev/sdc1
mdadm –C /dev/md1 –l1 –n2 /dev/sde1 /dev/sdf1
mdadm –C /dev/md2 –l1 –n2 /dev/sde1 /dev/sdg1
mdadm –C /dev/md3 –l0 –n3 /dev/md0 /dev/md1 /dev/md2
当 RAID1/5/10等创建成功后,需要计算每个条带的校验和信息并写入到相应磁盘上,所以RAID阵列有一个冗余组数据同步的初始化过程(resync)。但是MD设备只是创建成功后即可以外被上层主主应用读写使用,当然由于上层数据读写降低数据同步的性能。初始化的时间长短和磁盘阵列自身性能以及读写的应用负载相关,使用cat /proc/mdstat信息查询RAID阵列当前重构的速度和预期的完成时间。
如果一个块设备已经正在被其他的MD设备或者文件系统使用,则不能用来创建新的MD设备。会出现以下这样情况
mdadm –C /dev/md1 –l0 –n2 /dev/sdh1 /dev/sdi1
mdadm:Cannot open /dev/sdh:Device or resource busy
mdadm:create aborted
build模式可以用来创建没有元数据的RAID0/1设备,不能创建RAID4/5/6/10等带有冗余级别的MD设备
mdadm –BR /dev/md0 –l0 –n6 /dev/sd[b-g]1
mdamd –BR /dev/md0 –l1 –n2 /dev/sd[b-c]1
使用阵列和停止正在运行的阵列
MD设备可以像普通设备那样直接读写,也可以做文件系统格式化。
#mkfs.ext3 /dev/md0
#mkdir –p /mnt/md-test #mount /dev/md0 /mnt/md-test
当阵列没有文件系统或者其他存储应用以及高级设备使用的话,可以使用-stop(或者其缩写-S)停止阵列;如果命令返回设备或者资源忙类型的错误,说明/dev/md0正在被上层应用使用,暂时不能停止,必有要首先停止上层的应用,这样也能阵列上数据的一致性。
#umount /dev/md0
#mdadm –stop /dev/md0
组装曾创建过的阵列
模式--assemble或者其缩写(-A)主要是检查底层设备的元数据信息,然后再组装为活跃的阵列。如果我们已经知道阵列由那些设备组成,可以指定使用那些设备来启动阵列。
mdadm –A /dev/md0 /dev/sd[d-h]1
如果有配置文件(/etc/mdadm.conf)可使用命令mdadm –As /dev/md0
mdadm先检查mdadm.conf中的DEVICE的信息,然后从每个设备上读取元数据信息,并检查是否和ARRAY信息一致,如果信息一致则启动信息。如果没有配置/etc/mdadm.conf文件,而且又不知道阵列由那些磁盘组成,则可以使用命令--examine(或者其缩写 -E)来检测当前的块设备上是否有阵列的元数据信息。
配置文件
/etc/mdadm.conf作为默认的配置文件,主要作用是方便跟踪RAID的配置,尤其是可以配置监视和事件上报选项。Assemble命令也可以使用--config(或者其缩写-c)来指定配置文件。我们通常可以如下命令来建立配置文件。
#echo DEVICE /dev/sd[b-h]1 /dev/sd[i-k]1 >/etc/mdadm.conf
#mdadm –Ds >>/etc/mdadm.conf
#cat /etc/mdadm.conf
使用配置文件启动阵列时,mdadm会查询配置文件中的设备和阵列内容,然后启动运行所有能运行RAID阵列。如果指定阵列的设备名字,则只启动对应的阵列。
查询阵列的状态
我们可以通过 cat /proc/mdstat信息查看所有运行的RAID阵列的状态,我们也可以通过mdadm命令查看指定阵列的简要信息(使用--query或者其缩写-Q)和详细信息(使用--detail或者其缩写-D)详细信息包括RAID的版本、创建的时间、RAID级别、阵列容量、可用空间、数据数量、超级块状态、更新时间、UUID信息、各个设备的状态、RAID算法级别类型和布局方式以及块大小等信息。设备状态信息分为 active,sync,spare,faulty,rebuilding,removing等等。
#mdadm –-query /dev/md0
管理阵列
mdadm可以在Manage模式下,对运行中的阵列进行添加及删除磁盘。常用于标识failed磁盘,增加spare(热备)磁盘,以及从阵列中移走已经失效的磁盘等等。使用—faill(或者其缩写-f) 指定磁盘损坏。
#mdadm /dev/md0 –fail /dev/sdb1
当磁盘已经损坏时,使用 –removie(或者其缩写 –f)参数将这个磁盘从磁盘阵列中移走;但如果设备还正在被阵列使用,则不能从阵列中移走。
#mdadm /dev/md0 –remove /dev/sdb1
如果阵列带有spare磁盘,那么自动将损坏磁盘上的数据重构到新的spare磁盘上;如果阵列没有热备磁盘,可以使用—add(或者其缩写-a)参数增加热备磁盘
Mdadm /dev/md0 –add /dev/sdh
扩展阵列
如果在创建阵列不想使用整个块设备,可以指定用于创建RAID阵列每个块设备使用的设备大小
mdadm –CR /dev/md0 –l5 –n6 /dev/sd[b-g]1 x1 /dev/sdh –size=102400
然后在阵列需要扩展大小时,使用模式—grow(或者其缩写-g)以及—size参数(或者其缩写-z)在加上合适的大小数值就能分别扩展阵列所使用每个块设备的大小
Mdadm还提供增加或减少阵列中设备个数的功能,使用模式--grow和--raid-disks(或者其缩写-n)参数再加上合适的设备个数。扩展后阵列中原来的热备盘变为活跃磁盘,所以阵列的设备个数增加,阵列的大小也相应增加。
#mdadm –grow /dev/md0 –raid-disks=7
RAID0
添加硬盘
RAID 设备的成员是硬盘分区,需先对硬盘分区,分区不能在同一物理硬盘上
#fdisk /dev/sdb n 创建主分区,t 分区类型fd,w 写保存
#fdisk /dev/sdc
#mdadm –Cv /dev/md0 –l0 –n2 /dev/sdb1 /dev/sdc1
-C,--create 创建一个新的阵列 -v,verbose 显示细节
/dev/md0 阵列设备的名称 -l,--level= 阵列级别,如0,1,4,5,6
-n,--raid-devices= 阵列活动数目
/dev/sd[bc]1 阵列包含的设备列表
#more /proc/mdstat 查看阵列状态
#mkfs.ext3 /dev/md0 创建文件系统
#mount /dev/md0 /mnt/raid
让系统自动挂载,修改/etc/fstab,添加 /dev/md0 /mnt/raid ext3 defaults 0 0
RAID5 故障模拟
前面已创建了一个RAID5 设备md0
#mdadm –Cv /dev/md0 –l5 –n3 –x1 –c128 /dev/sd[b,c,d,e]1
1.将/dev/sdb1 标记为已损坏的设备
#mdadm /dev/md0 –f /dev/sdb1
这时阵列开始重构和恢复数据
查看损坏信息 cat /proc/mdstat F表示坏的
2.移除损坏的设备
#mdadm /dev/md0 –r /dev/sdb1
3.将新设备添加到阵列
注意,一:对硬盘正确分区,二:添加设备名要与被移除的一致,如sdb1
#mdadm /dev/md0 –a /dev/sdb1
生成配置文件/etc/mdadm.conf
格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md10 level=raid10 num-devices=4
UUID=12334343dkfj
其中UUID 信息通过#mdadm –D /dev/md10 得到
#mdadm –Ds 扫描该文件信息
other:
1.虚拟机上添加5块新磁盘
2.fdisk /dev/sdb,添加三个1G的分区,类型设为fd(linux raid autodetect)
3.dd if=/dev/sdb of=/dev/sdx bs=1024 count=1(将sdb的分区表复制到其它磁盘上去)
fdisk /dev/sdx然后按w保存(不然/dev/sdxx这些分区的设备文件不存在)
4.创建一个raid0
mdadm -C /dev/md0 -l0 -n2 /dev/sdb1 /dev/sdc1
禁用md0
mdadm -S /dev/md0
启用md0
mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
5.创建raid1
mdadm -C /dev/md1 -l1 -n2 /dev/sdb2 /dev/sdc2
cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdc2[1] sdb2[0]
987904 blocks [2/2] [UU]
md0 : active raid0 sdb1[0] sdc1[1]
1975680 blocks 64k chunks
unused devices:
格式化挂载,在挂载了/dev/md1的情况下执行换盘操作
mdadm /dev/md0 -f /dev/sdb2 (设置sdb2失效)
mdadm /dev/md0 -r /dev/sdb2 (移除sdb2)
mdadm /dev/md0 -a /dev/sdb3 (添加sdb3)
cat /proc/mdstat
6.创建raid5
mdadm -C /dev/md5 -l5 -n3 /dev/sdd1 /dev/sde1 /dev/sdf1 -x1 /dev/sdc3
mdadm /dev/md5 -f /dev/sdd1
mdadm /dev/md5 -r /dev/sdd1
cat /proc/mdstat (sdc3自动加入到raid5)
mdadm /dev/md5 -a /dev/sdd1 (sdd1成为热备盘)
7.保存所有配置
echo DEVICE /dev/sd*[1-9] > /dev/mdadm.conf
mdadm -D -s >> /dev/mdadm.conf
mdadm 使用参考(转)
mdadm是linux下用于管理软件 raid 的工具
以下内容来自 manpage 页:
基本语法 : mdadm [mode] [options]
[mode] 有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Build a legacy array ,每个device 没有 superblocks
Create:创建一个新的阵列,每个device 具有 superblocks
Manage: 管理阵列,比如 add 或 remove
Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。
Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态
Grow:改变raid 容量或 阵列中的 device 数目
可用的 [options]:
-A, --assemble:加入一个以前定义的阵列
-B, --build:Build a legacy array without superblocks.
-C, --create:创建一个新的阵列
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
-F, --follow, --monitor:选择 Monitor 模式
-G, --grow:改变在用阵列的大小或形态
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V, --version
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail 和 --examine 选项
-f, --force
-c, --config= :指定配置文件,缺省为 /etc/mdadm/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的选项:
-c, --chunk=:Specify chunk size of kibibytes. 缺省为 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:设定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:设定 raid5 的奇偶校验规则:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--layout=:类似于--parity
-n, --raid-devices=:指定阵列中可用 device 数目,这个数目只能由 --grow 修改
-x, --spare-devices=:指定初始阵列的富余device 数目
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于 --build 选项
-R, --run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force:通常mdadm不允许只用一个device 创建阵列,而且创建raid5时会使用一个device作为missing drive。此选项正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}: