当前版本 | 1.2 | ||
创建人 | 朱荣泽 | ||
创建时间 | 2011.01.07 | ||
修改历史 | |||
版本号 | 时间 | 内容 | |
1.0 | 2011.01.07 | 创建《mdadm详细使用手册》1.0文档 | |
1.1 | 2011.01.10 | 增加”实验”内容 | |
1.2 | 2012.04.13 | 删除”实验内容” | |
mdadm是一个用于创建、管理、监控RAID设备的工具,它使用linux中的md驱动。
mdadm程序是一个独立的程序,能完成所有软件RAID的管理功能,主要有7中使用模式。
模式名字 | 主要功能 |
(对于存储管理系统) |
Create | 使用空闲的设备创建一个新的阵列,每个设备具有元数据块 |
创建RAID时使用的命令 |
Assemble | 将原来属于一个阵列的每个块设备组装为阵列 |
在存储管理系统一般不使用该模式 |
Build | 创建或组装不需要元数据的阵列,每个设备没有元数据块 |
在存储管理系统一般不使用该模式 |
Manage | 管理已经存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘 |
用于增加热备盘 移除失效盘 |
Misc | 报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息 |
用于查询RAID信息 |
Grow | 改变阵列中每个设备被使用的容量或阵列中的设备的数目,改变阵列属性(不能改变阵列的级别) |
在存储管理系统一般不使用该模式 |
Monitor | 监控一个或多个阵列,上报指定的事件,可以实现全局热备 |
监控RAID,写入日志 |
/proc/mdstat : 当前md(软RAID)的状态信息
/etc/mdadm.conf : mdadm的配置文件
Active devices : RAID中的活动组件设备
Faulty device : RAID中失效的设备
Spare device : RAID中热备盘
Device Names : RAID设备名、标准格式是”/dev/mdNN”或者”/dev/md/NN”
md : Multiple Devices虚拟块设备(利用底层多个块设备虚拟出一个新的虚拟块设备)。
md driver : MD的驱动
Array : 阵列,跟RAID意思相同
Raid :不解释
md device : 就是使用MD创建的软件RAID
md array :同上
md设备 :同上
命令概要: mdadm [模式选项] [RAID设备名] [子选项…] [组件设备名…]
模式选项 | 子选项 |
备注 |
无特定模式 | �Cverbose |
显示更详细的信息 用于 �Cdetail �Cscan 或者 �Cexamine �Cscan |
�Cforce |
某些选项强制执行 |
|
�Cconfig= |
指定配置文件,默认是”/etc/mdadm.conf”或者是”/etc/mdadm/mdadm.conf”,假如配置文件名是 “partitions”,则mdadm会读取/proc/partitions的设备用于scan。 假如配置文件名是”none”,则mdadm会认为配置文件是空的。 |
|
�Cscan |
从配置文件或者/proc/mdstat中扫描信息。 |
|
�Cmetadata= |
定义组件设备上超级块的类型。对于�Ccreate,默认是0.90。 0,0.90 : 限制一个RAID中的设备数为28个,限制组件设备大小为2TB 1,1.0,1.1,1.2 :不同的子版本号标识在不同的地方存储超级块。1.0在设备的结尾,1.1在设备的开头,1.2在设备的4K处。 |
|
�Chomehost= |
在创建一个RAID时,homehost名会记录在超级块中。在1.X超级块中,它是RAID名字的前缀。0.90超级块中,homehost名的的SHA1值会保存在UUID的后半部分。 当使用Auto-Assemble时,只有相同homehost名的RAID才会被组建。 |
|
�Ccreate �Cbuild �Cgrow |
�Craid-devices= |
指定一个RAID中active devices的数目。 |
�Cspare-devices= |
指定创建一个RAID时spare devices中的数目。 |
|
�Csize= |
在RAID1/4/5/6中每个设备所能利用的数据容量。这个值必须是 chunk size的整数倍。而且必须留128K的设备空间用于RAID超级块。假如没有指定,则默认使用最小设备空间。 该选项能用�Cgrow 进行扩容。 |
|
�Cchunk= |
条带大小 |
|
�Crounding= |
在linear array中的rounding factor,等于条带大小 |
|
�Clevel |
设置RAID级别,RAID级别有(有些是同义词,比如raid5和5): Linear,raid0,0,stripe,raid1,1,mirror,raid4,4,raid5,5,raid6,6,raid10,10,multipath,mp,faulty。 �Cbuild只支持linear,stripe,raid0,0,raid1,multipath,mp,faulty。 �Cgrow不支持改变RAID级别。 |
|
�Clayout= (�Cparity=) |
设置RAID5、RAID10数据布局类型,控制faulty级别的failure的模式。 |
|
--bitmap= |
这个选项对性能可能有影响,具体查看《mdadm手册翻译》 设置一个文件用于保存write-intent位图。 当文件名是”internal”时,位图复制保存在RAID组件设备(一个RAID的所有组件设备)的超级块中。当�Cgrow,文件名是”none”时,位图会被移除。 |
|
�Cbitmap-chunk= |
这个选项对性能可能有影响,具体查看《mdadm手册翻译》 设置位图中每位所映射块的大小。 当使用”internal”位图时,映射块的大小是自动设置的(根据超级块中可用空间)。 |
|
�Cwrite-mostly |
�Cbuild、�Ccreate、�Cadd后的设备都被标记上”wirte-mostly”。这个选项只对RAID1有效,即”md”driver会避免从RAID1的所有设备读取数据。假如镜像的速度很慢,这是非常有用的。 |
|
�Cwrite-behind= |
该选项只对RAID1有效。这个选项会设置最大的写队列深度,默认值是256。使用write-behind的前提是先设置write-intent bitmap,先设置设备为write-mostly。 |
|
�Cassume-clean |
告诉mdadm这个array已经clean。当array从一个严重的故障中恢复时,这个选项会保证没有数据会被覆盖。当创建RAID1和RAID10时,这个选项也能避免初始化同步。但是使用该选项必须要很谨慎。 |
|
�Cbackup-file= |
当使�Cgrow为RAID5增加组件设备数时,该文件保存关键数据。(该文件不能在该RAID5上,以免发生死锁。) |
|
�Cname |
给一个RAID设置名字,只在1.X超级块中有用,它是简单的字符串,用于assembling时识别RAID组件设备。 |
|
�Crun |
强制激活RAID。(当一个RAID中的某些组件设备被其他RAID或者文件系统占用时)。使用这个选项,设备上有旧的元数据信息的提示会被忽略。 |
|
�Cforce |
mdadm无条件接受指定的参数。 使用该选项可以只使用一个设备创建RAID; 创建RAID5时使用该选项,使得RAID5初始化不使用recovery模式,而是校验同步所有组件设备上的数据(比recovery模式要慢)。详情请见命令举例中的创建RAID |
|
�Cauto= |
创建md设备文件。选项是{no,yes,md,mdp,part,p}{NN}。默认是yes。 “yes”要求RAID设备名是标准格式的,然后设备文件类型和minor号会自动确定。 比如RAID设备名是”/dev/mdx” 查看/proc/partitions可以看到mdx的major号是9,minor号是x。 当使用”md”时,RAID设备名可以是非标准格式,比如”/dev/md/zhu”,然 后创建两个设备文件/dev/md/zhu 还有 /dev/mdx,并给这两个设备文件分配相同的major号和minor号(也就是这两个设备文件指向同一个设备)。分配minor号的方法是:分配一 个没有使用过的minor号,这个minor号就是/dev/mdx中的数字x。查看/proc/partitions和/proc /mdstat,RAID设备名还是/dev/mdx。 当使用”mdp,p,part”时,RAID设备名可以是非标准格式,比如”/dev /md/zhu”,除了创建设备文件/dev/md/zhu 还有 /dev/mdx外,还会创建 /dev/md/zhup1, /dev/md/zhup2, /dev/md/zhup3, /dev/md/zhup4,这些是分区设备文件。 |
|
�Csymlink=no |
默认下�Cauto会创建/dev/md/zhu的软连接 /dev/md_zhu。假如使用该选项,则不会创建软连接。 |
|
�Cassemble | �Cuuid= |
重组RAID,要求组件设备的uuid相同 |
�Csuper-minor= |
minor号会保存在每个组件设备中的超级块中,可以根据这个重组RAID。 |
|
�Cname= |
根据RAID名重组RAID。 |
|
�Cforce |
即使一些超级块上的信息过时了,也可以强制重组。 |
|
�Crun |
即使RAID中的组件设备不完整(例如原来创建4块盘的RAID5,现在只发现3块成员盘),RAID也被重组,并启动。 (假如不用�Crun,RAID只被重组,但是不启动) |
|
�Cno-degraded |
和�Cscan选项一起使用。 禁止RAID中的组件设备不完整时启动RAID,知道RAID中的组件完整。 |
|
�Cauto |
如�Ccreate中的 �Cauto |
|
�Cbitmap |
指定bitmap文件(当RAID创建时所指定的bitmap文件),假如RAID使用internal类型的bitmap,则不需指定。 |
|
�Cbackup-file= |
当增加RAID5的组件设备数,指定backup-file文件。在RAID5重构过程 中,假如系统当机,backup-file文件会保存关键数据,使得重启系统之后,重构可以继续进行。假如没有指定backup-file,mdadm会 使用热备盘上的空间作为备份空间。 |
|
�Cupdate= |
更新RAID中每个组件设备的超级块信息。选项有sparc2.2、summaries、uuid、name、homehost、resync、byteorder、super-minor |
|
�Cauto-update-homehost |
只对auto assembly情况下有用。 |
|
Manage模式 | �Cadd |
给RAID在线添加设备(可用于添加热备盘) |
�Cre-add |
给RAID重新添加一个以前被移除的设备。 假如一个RAID使用write-intent bitmap时,它的一个设备被移除后又被重新添加,bitmap可以避免完全重建,而是只更新那些设备被移除后已经被更新过的块数据。 |
|
�Creomve |
移除设备,只能移除failed(失效)和spare(热备)设备。(因此假如要移除RAID5中的一个活动设备,需要先使用�Cfail选项使该设备的状态变成failed,然后才能移除。) 该选项后面跟的是设备名(比如是 /dev/sdc),也可以是failed和detached关键字。Failed使得所以失效的部件被移除,detached使得所以被拔出的硬盘被移除。 |
|
�Cfail |
使RAID中某个设备变成failed状态。 该选项后面跟的是设备名(比如是 /dev/sdc),也可以是detached关键字。 |
|
Misc模式 | �Cquery |
查询一个RAID或者一个RAID组件设备的信息 |
�Cdetail |
查询一个RAID的详细信息 |
|
�Cexamine |
查询组件设备上的超级块信息 |
|
�Csparc2.2 |
用于修正超级块信息,详情请见用户手册。 |
|
�Cexamnie-bitmap |
查看bitmap文件中的信息 |
|
�Crun |
启动不完整的RAID(比如本来是有4块盘的RAID5,现在3块盘也可以启动)。 |
|
�Cstop |
禁止RAID活动,释放所有资源。但是RAID中组件设备上的超级块信息还在。还可以重新组建和激活RAID。 |
|
�Creadonly |
使RAID只能只读 |
|
�Creadwrite |
使RAID能读写 |
|
�Czero-superblock |
假如一个组件设备包含有效的超级块信息,那么这个超级块会被写0覆盖。假如使�Cforce选项,则不管超级块中是否有信息,都会被写0覆盖。 |
|
�Ctest |
假如�Cdetail一起使用,则mdadm的返回值是RAID的状态值。 0 代表正常 1 代表降级,即至少有一块成员盘失效 2 代表有多快成员盘失效,整个RAID也失效了(对于RAID1/5/6/10都适用)。 4 读取raid信息失败 |
|
�Cmonitor (�Cfollow) |
�Cmail |
设置警报邮件 |
�Cprogram |
当监测到一个事件发生时,关于该事件的信息会作为参数被发给该程序 |
|
�Csyslog |
所有事件都会通过syslog报告 |
|
�Cdelay |
Mdadm会隔多少秒轮询各个RAID,默认是60秒 |
|
�Cdaemonise |
Mdadm会创建一个子进行作为后台监控程序。该子进程的PID号会输入到stdout上。 |
|
�Cpid-file |
当�Cdaemonise一起使用时,子进程的PID号会写入该文件中 |
|
�Coneshot |
只会检测RAID一次。它会检测NewArray、DegradedArray、SparesMissing事件。 在cron脚本中运行”mdadm �Cmonitor �Cscan �Coneshot”会定期报告。 |
|
�Ctest |
对每个RAID产生TestMessage,用于测试mail、program是否正确。 |
用法:mdadm �Cassemble md-devices options-and-component-devices…
例子:#mdadm �Cassemble /dev/md0 /dev/sda1 /dev/sdb1
说明:把sda1和sdb1重组成/dev/md0。
用法:mdadm �Cassemble �Cscan md-devices-and-options…
例子:#mdadm �Cassemble �Cscan /dev/md0
说明:从配置文件读出设备列表,根据超级块中的信息,重组/dev/md0。
用法:mdadm �Cassemble �Cscan options…
例子:#mdadm �Cassemble �Cscan �Cuuid=xxxxxxx
说明:从配置文件读出设备列表,根据超级块中的uuid信息,重组uuid是xxxxxxx的RAID。
假如#mdadm �Cassemble �Cscan命令后面没有设备列表,mdadm会读取配置文件中所列的RAID信息,并尝试重组。假如系统中没有/etc/mdadm.conf配置文件, 则会从/proc/partitions中读取设备列表。因此使用mdadm时,必须保证mdadm中的状态信息(/proc/mdstat)和/etc /mdadm.conf配置文件一致,否则重启操作系统后,会出现问题。
用法:mdadm �Ccreate md-device �Cchunk=X �Clevel=Y �Craid-devices=Z devices
例子:# mdadm �Ccreate /dev/md0 �Cchunk=64 �Clevel=0 �Craid-devices=2 /dev/sda1 /dev/sdb1
说明:使用sda1和sdb1创建RAID0,条带大小是64KB。
例子:#mdadm �Ccreate /dev/md1 �Cchunk=64 �Clevel=1 �Craid-devices=1 /dev/sdc1 missing
说明:创建一个降级的RAID1,同样可以使用missing创建降级的RAID4/5/6。
用法:mdadm options… devices..
例子:#mdadm �Cdetail �Ctest /dev/md0
说明:这条命令的返回值:0代表md0正常;1代表md0至少有一个failed的组件设备;2代表md0有多个failed组件设备,这个md0已经不能使用,即失效(md0是raid1、raid5、raid6、raid10时);4代表获取md0设备信息错误。
用法: mdadm �Cmonitor options… devices..
说明:mdadm除了报告事件以外,mdadm还可以把一个RAID中的热备盘移动到另一个没有热备盘的RAID中,前提条件是这些RAID都属于同一个spare-group(RAID的spare-group可以在配置文件里设置)。
说明:当命令中有设备列表时,mdadm只会监控这些设备。当没有设备列表时,配置文件中的所有RAID都会被监控。当使用�Cscan选项时,/proc/mdstat中的设备也会被监控。
说明:传给program的三个参数是事件名、涉及到的md device名、涉及到的其他设备(比如组件设备失效)。
说明:监控的事件有
DeviceDisappeared 当RAID0和linear中某个设备失效时,就会出现RAID消失。
RebuildStarted 重建RAID
RebuildNN 重建百分比,NN代表20,40,60,80
RebuildFinished 重建结束
Fail RAID中某个活动组件设备失效
FailSpare RAID中某个热备盘失效
SpareActive RAID中热备盘启用,用于重建RAID
NewArray 在/proc/mdstat中监控到有新的RAID被创建
DegradedArray RAID降级
MoveSpare 热备盘从一个RAID中移动到另外一个RAID中,前提是这两个RAID属于同个spare-group
SparesMissing 发现RAID中的热备盘数比配置文件中的少
TestMessage 测试
说明:只有Fail、FailSpare、DegradedArray、SparesMissing、TestMessage事件才会触发发送Email。
说明:能改变RAID1、5、6中的”size”属性。
说明:能改变RAID1、5中的”raid-disks”属性。
说明:增加移除RAID中的write-intent bitmap。
例子:#echo ‘DEVICE /dev/hd*[0-9] /dev/sd*[0-9]‘ > mdadm.conf
#mdadm �Cdetail �Cscan >> mdadm.conf
说明:创建配置文件的原型。
例子:#mdadm �Ccreate /dev/md0 �Cchunk=64 �Clevel=1 �Craid-devices=2 /dev/sda1 /dev/sb1
说明:创建md0,RAID级别是RAID1,条带大小事64KB,成员盘是sda1、sdb1
例子:#mdadm /dev/md0 -add /dev/sdc1
说明:给md0增加热备盘sdc1。
例子:#cat /proc/mdstat
说明:查看当前所有RAID的状态
例子:#mdadm �Cdetail /dev/md0
说明:查看md0的详细信息
例子:#mdadm �Cexamine /dev/sda1
说明:查看组件设备sda1中超级块的信息和状态
例子:#mdadm �Cstop /dev/md0
说明:停止md0的运行
例子:#mdadm ― zero-superblock /dev/sda1
说明:清除组件设备sda1中超级块的信息
格式说明:SYNTAX xxx xxx xxx xxx xxx
注释说明:#This is a comment.
多行说明:假如任意一行中开头是以空白开头的(space/tab),这行被看做是上一行的延续。
空行说明:空行被忽略。
该关键字后面跟的是设备列表(设备和分区),这些设备可能是某个md设备的组件。当要查找某个RAID的组件设备时,mdadm会扫描这些设备。
例子:DEVICE /dev/hda* /dev/hdc*
例子:DEVICE /dev/hd*[0-9] /dev/sd*[0-9]
例子:DEV /dev/sd*
例子:DEVICE /dev/discs/disc*/disc
例子:DEVICE partitions
说明:mdadm会读取/proc/partitions中的设备。假如在配置文件中没有DEVICE关键字,
则假定”DEVICE partitions”,也就是默认会读取/proc/partitions中的设备。
例子:
说明:关键字ARRAY标识一个活动的RAID,ARRAY后面跟着的是RAID的名字。 RAID名字后面跟着的是RAID的属性值,这些属性值标识一个RAID,或者标识一个组的成员RAID(spare-group)。假如给出了多个属性 值,则每个组件设备中的超级块信息必须匹配属性值。
属性值如下:
uuid= | 128bit的值,用16进制表示。 |
name= | 当创建RAID时使用�Cname指定的名字(跟RAID设备名概念不一样)。不是所有的超级块版本都支持�Cname。 |
super-minor= | 当一个RAID,该RAID的设备名是/dev/mdX,minor号码就是X。 |
devices= | 该属性值后面跟着设备名或者设备名模式(它们用逗号隔开)。注意:这些设备名必须包含在DEVICE中。 |
level= | RAID的级别 |
num-devices= | 一个完整的RAID中活动设备数。 |
spares= | RAID中所设定的热备盘数目。 |
spare-group= | RAID组名,所有具有相同spare-group名的RAID会共享热备盘(前提是使用 mdadm �Cmonitor监控RAID)。mdadm会自动把一个RAID中的热备盘移动到另一个RAID(这个RAID有faild盘或者missing盘,而 且没有热备盘)中。 |
auto= | |
bitmap= | 指定write-intent bitmap文件。功能跟”�Cassemble �Cbitmap-file”一样。 |
metadata= | 指定超级块版本。 |
使用monitor模式(同时也使�Cscan选项)时,警报事件发送到的Email地址。
邮件地址。
“mdadm �Cmonitor”监测到的事件都会发送给这个程序。
只能有一个程序。
该行中是创建RAID时使用的默认值。
owner= |
代替系统默认的USER ID(root) |
group= |
代替系统默认的GROUP ID(disk) |
mode= |
权限 |
auto= |
|
metadata= |
超级块的版本 |
symlinks=no |
不用软连接 |
DEVICE /dev/sd[bcdjkl]1 DEVICE /dev/hda1 /dev/hdb1 # /dev/md0 is known by it’s UID. # /dev/md4 and /dev/md5 are a spare-group and spares MAILADDR [email protected] |
当系统中不存在配置文件/etc/mdadm.conf、/etc/mdadm /mdadm.conf时,系统启动时,md驱动会自动查找分区为FD格式的磁盘。所以一般会使用fdisk工具将hd磁盘和sd磁盘分区,再设置为FD 的磁盘分区。因此假如直接使用/dev/sda、/dev/sdb创建RAID,系统重启后,不会重组该RAID。