mdadm命令详解

创建阵列(-C或--create)

--raid-devices(-n)

  • 功能:指定阵列中成员盘个数。
  • 举例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd
  • 备注:当创建linear, multipath, raid0和raid1时,允许指定成员盘个数为1,但要使用--force参数。raid4与raid5不允许指定成员盘个数为1。成员盘个数可以通过--grow参数来修改,只有RAID1、RAID5 和RAID6阵列支持。

--spare-devices (-x)

  • 功能:指定阵列中热备盘个数。
  • 举例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd
  • 备注:无

--size (-z)

  • 功能:创建阵列时,指定每个成员盘使用多大的空间。单位KB。
  • 举例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] -z 4194304
  • 备注:当创建RAID1/4/5/6时,可以指定每个成员盘使用多大的空间。同时磁盘最后要留下128Kb大小空间,用于存放RAID的superblock。如果没有指定该参数,mdadm将使用最小成员盘的大小指定该值。如果某个成员盘的大小大于最小成员盘1%,将会有警告信息,提示有部分空间没有被使用。创建阵列时,如果RAID中所有成员盘使用了的空间都小于其本身的大小,那么它们剩余的空间可以通过--grow来扩容。--size=max,mdadm将自动选择一个适合的最大值,来创建阵列。

--chunk (-c)

  • 功能:指定条带大小。单位KB,默认值64KB。
  • 举例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd -c 128
  • 备注:测试过指定4、8、16、32、64、128、256、1024、2048、4096、8192、16384、32768、65536、131072。最大值尚未测试出来,不知是否有最大值。

--rounding

  • 功能:指定linear阵列的rounding因子。等价于chunk size,但linear设备的chunk不是条带分布在所有磁盘上,第一个磁盘分布完后,再分布到第二个磁盘上。
  • 举例:mdadm --create /dev/md1 -llinear -n2 /dev/sdb /dev/sdc --rounding=128
  • 备注:如果建立raid5,指定该参数为128。mdadm –D获取详情时,显示Chunk Size为128K。

--level (-l)

  • 功能:设置raid级别。
  • 举例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev/sdc -x1 /dev/sdd --chunk=128
  • 备注:当创建阵列时,--level参数后面可以跟定的值有linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4,raid5, 5, raid6, 6, raid10, 10, multipath, mp, faulty(指定faulty没有创建成功)。其中,存在多个同义值。当--build阵列时,--level参数后面可以跟定的值有linear, stripe, raid0, 0, raid1, multipath, mp, and faulty。该参数不支持--grow。

--layout (-p)

  • 功能:配置raid5和raid10阵列的数据布局,控制faulty失败模式。
  • 举例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] -p ra
  • 备注:raid5奇偶校验块的布局可以为left-asymmetric, left-symmetric, right-asymmetric, right-sym-metric, la, ra, ls, rs。默认为left-asymmetric。

--parity

  • 功能:等同于--layout

--bitmap (-b)

  • 功能:使用bitmap模式记录RAID阵列有多少个块已经同步(resync),正常停止RAID后,再将RAID组装起来时,磁盘上已同步块不用再次同步。
  • 举例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --bitmap=internal --force
  • 备注:可以将bitmap记录在文件中,文件名可以是不存在的,如果文件被用来记录过bitmap可以通过指定--force参数来清空原来的信息。如果创建阵列的时候指定了文件,那么组装阵列时,也要指定该文件。如果值为internal,则bitmap将被当作元数据信息,写入到每个成员盘上面。--grow模式下,如果值为none,则bitmap信息将被清除。
  • 注意:位图文件只能存储在ext2或者ext3文件系统上。存储到其他文件系统上面,可能导致严重问题。

--bitmap-chunk

  • 功能:指定bitmap中的每1个bit位对应RAID中每个数据块的大小,单位为KB。如--bitmap-chunk=1024,则表示bitmap中1个bit对应RAID中1024K。即如果bitmap中第1个bit为1,代表RAID中第1M的数据在各个磁盘上是不一致的,需要同步。
  • 举例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --bitmap=internal --bitmap-chunk=1024
  • 备注:使用一个文件存储位图时,默认使用最小的。不会小于4,不会超过2^21(2M)。当--bitmap=internal时,成员盘中用用记录bitmap的空间有个最大值,如果指定的bitmap-chunk过小,则bitmap就会使用过大的空间,如果超过了最大空间,则无法创建成功。如果不指定bitmap-chunk,则会使用bitmap允许的大空间来自动计算出一个bitmap-chunk的最小值。

--write-mostly(-w)

  • 功能:阵列的成员盘指定该参数后,在应用中该成员盘只进行数据写,而不从它上面读取数据。该参数只针对RAID1有效。
  • 举例:mdadm --create -l1 -n2 /dev/sdi --W /dev/sdj
  • 备注:--create 、–build和—add时,均可指定该参数。
    通过mdadm –D可以查询到哪个设备指定了该参数。
    Number   Major   Minor   RaidDevice State
    0       8      128        0      active sync   /dev/sdi
    1       8      144        1      active sync writemostly   /dev/sdj
      通过cat /proc/mdstat也可以查看该信息。
    md1 : active raid1 sdi[0](W) sdj[1](W)
    dd if = /dev/md1 of=/dev/null bs=1M count=4096 &iostate –x /dev/sdi /dev/sdj 1 10
    发现仅仅有/dev/sdi盘有流量变化。

--write-behind

  • 功能:该参数只针对RAID1有效。对于标记为write-mostly的设备,延迟写。若RAID1中有一个盘是本地磁盘,一个盘是网络上导入的磁盘,则对导入的磁盘设置write-behind参数。在写入数据时,本地磁盘数据写完后,RAID则认为该次写操作已完成。
  • 举例:mdadm --create /dev/md1 -l1 -n2 /dev/sde --wrtie-mostly /dev/sdf --write-behind –bitmap=internal
  • 备注:该参数仅仅支持raid1。使用该参数,必须指定bitmap。该参数没有经过测试。

--assume-clean

  • 功能:创建阵列时,不初始化磁盘上的数据,将指定的磁盘直接组成一个RAID。
  • 举例:mdadm --create -l5 -n3 /dev/sd[b-d] --assume-clean
  • 备注:当我们可以保证RAID上的数据是一致的,不需要初始化,则可以使用这个参数,一方面可以节省初始化时间,更重要的是,当RAID被损坏后,如果磁盘都在系统中,可以使用此参数,恢复RAID上的数据。

--backup-file

  • 功能:通过--grow参数来扩充raid5的成员盘数量时,如果没有空闲盘,可以通过该参数指定一个文件顶替。
  • 举例:mdadm --grow /dev/md4 –n4 –backup-file=/tmp/file.backup
  • 备注:通过该参数,仅仅支持扩展一个磁盘。不能对降级状态的RAID5进行扩容。扩容后,mdadm将执行数据迁移。

--name(-N)

  • 功能:阵列名称。
  • 举例:mdadm --create /dev/md4 -l5 -n3 /dev/sd[e-g] --metadata=1.0 --name=aaa
  • 备注:创建阵列时,superblock采用1.0版本,该参数才生效。组装阵列的时候,可以通过该参数来组装。mdadm -Av --name=aaa /dev/md4 /dev/sd[b-h]。如果创建时,没有指定--name参数,mdadm将自动为阵列选取一个名字。选取规则是,选取md设备名称的最后部分作为该阵列的名字。例如:/dev/md3,则3将被选择为阵列的名称。

--homehost

  • 功能:创建时,通过该参数可以将主机名记录在成员盘的superblock信息中,在组装时用来匹配磁盘中记录的主机名与当前主机是否一致,如果不一致,组装不成功。
  • 举例:mdadm --create /dev/md1 -l5 -n3 /dev/sd[b-d] --homehost=pc3x
  • 备注:它将覆盖mdadm.conf文件里面HOMEHOST字段。homehost信息将被保存在superblock中,对于1.0以上版本superblock,它将作为name的前缀。对于0.90版本superblock,它将存储与UUID后64位中。

--run(-R)

  • 功能:当阵列的活跃盘上面存在其他阵列的superblock信息时,强制启动阵列。
  • 举例:mdada --create /dev/md0 -l5 -n3 /dev/sd[b-d] --run
  • 备注:构建阵列的盘存在其他阵列的superblock信息时,如果不加--run参数,mdadm将会弹出确认信息Continue creating array?。指定--run参数,将跳过确认信息,直接启动阵列。

--force(-f)

  • 功能:强制mdadm接受geometry和layout说明。
  • 举例:mdadm --create /dev/md0 -l1 -n1 /dev/sde --force
  • 备注:正常情况下,mdadm不允许使用一块盘建立阵列,包括linear, multipath, raid0和raid1。加—force,将可以建立一块盘的阵列。
    通常情况下,建立raid5时,mdadm会用n-1个成员盘建立一个降级状态的阵列,然后,将最后一块成员盘被当成热备盘的形式加入到阵列中。这样,mdadm将执行recover操作。加--force,mdadm将直接建立一个active状态的阵列,然后执行resync操作。

-a, --auto{=no,yes,md,mdp,part,p}{NN}

  • 功能:通知mdadm是否创建设备文件,并分配一个未使用的次设备号。
  • 举例:mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --auto=md
  • 备注:
    auto默认值是--auto=yes,需要md设备的设备文件名有一个标准格式,根据这个设备文件名的格式来指定RAID是否可分区以及该RAID的次设备号。
    当--auto=yes时标准格式为:不可分区阵列,/dev/mdNN、/dev/md/NN,如指定设备文件名为/dev/md0,则该RAID是一个不可分区的,且次设备号为0。可分区阵列/dev/md/dNN和/dev/md_dNN。
    --auto=no,将不会创建设备文件,如果不存在指定的设备文件,将不能创建阵列。
    --auto=md,创建一个不可以分区的阵列。
    --auto=mdp/part/p,创建一个可以分区的阵列。
    如果指定了--scan参数,那配置文件(/etc/mdadm.conf)里面指定的auto=将覆盖命令行后面给定的--auto=。

--symlink=no

  • 功能:禁止创建软连接。
  • 举例:mdadm --create /dev/md/0 -l5 -n3 /dev/sd[b-d] --symlink=no
  • 备注:正常情况下,mdadm在/dev/md/下面创建设备时,它会在/dev/目录下面为该设备创建一个软连接,名字以md或者md_开始。指定该参数,将禁止该功能。即使/etc/mdadm.conf文件里面禁止创建软连接,通过--symlink=yes也可以强制创建。

--metadata(-e)

  • 功能:指明被使用superblock类型。
  • 举例:mdadm --create /dev/md/0 -l5 n3 /dev/sd[b-d] -e1.0
  • 备注:当创建阵列时,默认是0.90。默认值可以改变,mdadm.conf文件中,写如下信息:CREATE metadata=1。可选择值为:
    0.90,default:使用默认的0.90版本superblock。这个版本限制阵列只能有28个成员盘和RAID1的成员盘不能大于2TB(没有测试过)。
    1.0,1.1,1.2:使用新版本superblock。它有新的约束。不同子版本,存储superblock于磁盘不同位置。1.0,末尾;1.1,开始;1.2,开始4K。

Build阵列(--build)

该模式同create参数相同,但该模式创建的是无superblock的raid0 、linear、 multipath、 or faulty的RAID。详细参数说明,见create模式。

组装阵列--assemble或-A)

该模式用来组装阵列。当阵列被停止后,或重启设备时,如要继续使用该阵列,此要将该阵列组装起来。下面详细介绍该模式的参数。

--uuid(-u)

  • 功能:通过匹配uuid来重构raid。
  • 举例:mdadm -Av --uuid=af25a90b:0d43e494:46533453:86b2b0d4 /dev/md1
  • 备注:uuid号指raid的uuid号,如果磁盘中记录的uuid号与指定的uuid号不匹配,则不使用该磁盘。

--super-minor(-m)

  • 功能:通过匹配设备次设备号来重构raid。
  • 举例:mdadm -A /dev/md0 --super-minor=0
  • 备注:
    对于superblock版本为1.0的阵列,不能通过该参数进行重组。
    次设备号在创建阵列时,已经分配。重组阵列时,对于不包含该次设备号的设备将不能重组到阵列中。例如:重组的md设备为/dev/md0,那么mdadm将寻找次设备号为0的所有设备。
    如果创建阵列时,阵列为/dev/md1,那么所有设备的次设备号为1,即使重组后,阵列变为/dev/md3,所有设备的次设备号还为1。

--name(-N)

  • 功能:通过name组装阵列。
  • 举例:mdadm -A --name=god /dev/md0
  • 备注:
    仅支持superblock版本为1.0的阵列。
    创建阵列时,要指定--name(或homehost)。组装时,--name要匹配每个设备上的name(或homehost)。下面举例说明:
    mdadm --create /dev/md1 -l5 -n3 /dev/sd[b-d] --e1.0 --homehost=pc3x --assume-clean
    mdadm -D /dev/md1,获取Name字段值,应该为pc3x:N,N为数字。
    mdadm --stop /dev/md1
    mdadm -A --name=Name字段值 /dev/mdX

--force(-f)

  • 功能:当superblock过期时,可以通过该参数强制组装。
  • 举例:mdadm -A --super-minor=0 /dev/md0 --force
  • 备注:如当RAID在重构过程中,设备重启了,再组装RAID时,需要加--force参数,才能组装成功。

--run(-R)

  • 功能:当重组阵列active盘数少于创建时指定个数时,尝试启动阵列。
  • 举例:mdadm -A /dev/md0 /dev/sdb /dev/sdc --run
  • 备注:正常情况下,组装阵列时,如果指定的active盘数小于期望的盘数,mdadm将组装成功,但状态是inactive,无法使用该RAID。如果指定了--run参数,mdadm将通过各种方式使其启动。下面举例说明。
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d]
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sdb /dev/sdc;执行结果如下:
    mdadm: /dev/md0 assembled from 2 drives - need all 3 to start it (use --run to insist).
    cat /proc/mdstate; 查询到md0信息如下:
    md0 : inactive sde[0] sdf[1]
    mdadm --run /dev/md0;可以启动md0阵列。
    mdadm --stop /dev/md0
    mdadm -A --run /dev/md0 /dev/sdb /dev/sdc;组装阵列并启动成功。

--no-degraded

  • 功能:组装降级阵列,不启动阵列。
  • 举例:mdadm -A --no-degraded --scan /dev/md1
  • 备注:正常情况下,mdadm -A --scan组装阵列时,即使扫描到盘个数小于阵列创建时指定盘个数,也可以组装并启动成功。当加上--no-degraded参数,则不启动该阵列。

-a, --auto{=no,yes,md,mdp,part}

  • 功能:更改md设备名称。
  • 举例:mdadm -A --auto=mdp /dev/test /dev/sdb /dev/sdc /dev/sdd
  • 备注:关于该参数具体说明,可以看create模式下相关部分。正常情况下,如果运行mdadm -A /dev/test /dev/sd[b-d]将失败,因为/dev/test不是标准md设备名。而指定了--auto=mdp后,可以组装成功,并为该设备产生一个次设备号。

--bitmap(-b)

  • 功能:指定组装RAID使用的bitmap文件,该文件为创建时指定的文件。
  • 举例:mdadm -A --bitmap=/root/aaa.file /dev/md1 /dev/sd[b-d]
  • 备注:如果是internal类型的bitmap,重组时不需要指定。对于非internal类型的bitmap,如果不指定,组装成功的阵列将不在有bitmap功能。

--backup-file

  • 功能:如果一个RAID使用了backup-file参数进行了扩容,那么组装时,也需要指定backup-file。
  • 举例:mdadm -A /dev/md0 /dev/sd[b-d] --backup-file=/root/aaa
  • 备注: 下面举例说明:
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d]
    mdadm --grow /dev/md0 -n4 --backup-file=/root/aaa
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sd[b-d] --backup-file=/root/aaa
    如果重组时,如果不指定backup file。测试结果如下:
    对于扩容完成的阵列,重组时指定backup file与否没有关系,均可以重组和启动成功。对于正在扩容中的阵列,停止阵列后,再重组,指定backup file与否也没有关系,均可以重启和启动成功,reshape进度继续,而非重新开始。
    the system crashed during the critical section,这种情况下重组阵列,需要指定backup file(个人理解)。因为通过—backup-file扩充盘数时,首先会进行“mdadm: Need to backup 384K of critical section..”这步操作,然后是“mdadm: ... critical section passed.”,扩充磁盘数完成,进行reshape。

--update(-U)

  • 功能:组装阵列,更新每个设备的superblock信息。
  • 举例:mdadm -A /dev/md0 /dev/sd[b-d] --update=xxx
  • 备注:xxx值可能为sparc2.2, summaries, uuid, name, homehost, resync, byteorder, devicesize or super-minor。
     sparc2.2:
    在linux内核版本为2.2下,需要指定该参数来给内核打一个patch。
     super-minor:
    该选项会更新每个设备的superblock信息中preferred minor字段,使该字段的值等于所属阵列的次设备号。当使用--super-minor组装阵列时,更换了md设备名称。这时,该设备的次设备号就会改变。但过mdadm –E可以查询后,发现各个成员盘中记录的阵列的次设备号没有更新。
     uuid:
    更新阵列的UUID。如果通过参数--uuid给定了一个合法的UUID,那么这个UUID将当作阵列的新UUID,而不是拿这个UUID来组装阵列之用。如果--uuid未指定,将随机选择UUID。正常情况下,组装阵列,其UUID是不变的。下面举例说明:
    mdadm -A /dev/md2 --super-minor=2 --update=uuid --uuid=bc3c1314:8ac4d622:8bf1a0f2:72d806aa
    结果为,改变阵列的uuid为bc3c1314:8ac4d622:8bf1a0f2:72d806aa。
     name:
    更改存储在阵列superblock中的Name字段。下面举例说明:
    mdadm --create /dev/md1 -l5 -n3 /dev/sd[e-g] -e1.0 --name=pc3x --assume-clean
    mdadm --stop /dev/md1
    mdadm -A /dev/md1 /dev/sd[e-g] --update=name; 
    结果为,阵列的Name字段由pc3x更新为md阵列的新次设备号,这里也就是1。
    mdadm -A /dev/md1 /dev/sd[e-g] --update=name;
    结果为,阵列的Name字段将不在更新。
    mdadm -A /dev/md1 /dev/sd[e-g] --update=name --name=aaa;
    结果为,阵列的Name字段更新为aaa。
     homehost:
    更新superblock里面的homehost信息。对于0.9版本,更新UUID。对于1.0版本,更新name。
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] -homehost=pc3x --assume-clean
    mdadm -D /dev/md0;查询UUID
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sd[b-d] --homehost=aaa --update=homehost
    mdadm -D /dev/md0;查询UUID,与上面相比已改变。
     resync:
    标识阵列为dirty来表示所有冗余数据都可能是不正确。强迫mdadm开启resync,来保证冗余数据的正确性。
     byteorder:
    该选项的存在,允许阵列在不同字节序的机器上面移动。仅针对0.9版本superblock。(没有测试)
     summaries:
    纠正superblock中的摘要信息。包括total,working,active,failed,和spare devices。(没有测试)
     devicesize:
    这个属性很少使用,仅仅支持superblock版本为1.1和1.2。当阵列的成员盘改变大小的时候,这个功能会有用。成员盘的superblock中记录了成员盘可以用于存储数据的空间大小,当增加了成员盘空间,superblock并不会改变它相应的字段。这样,当增加阵列空间时,就会报错。使用--update=devicesize,可以修复这个错误。
    下面使用分区来测试说明。
    mdadm --creat /dev/md0 -l5 -n3 /dev/sd[b-d]1; 假设这里分区大小均为2G
    mdadm -E /dev/sdb1; 查看Avail Dev Size字段
    mdadm --stop /dev/md0
    改变每个分区大小,增加到4G;fdisk命令先删除原分区在建立该分区。
    mdadm -E /dev/sdb1; 查看Avail Dev Size字段,没有识别出新增空间。 
    mdadm -A /dev/md0 /dev/sd[b-d]1
    mdadm --stop /dev/md0
    mdadm -A /dev/md0 /dev/sd[b-d]1 --update=devicesize
    mdadm -E /dev/sdb1; 查看Avail Dev Size字段,识别出新增空间。

--auto-update-homehost

  • 功能:该项仅在auto-assembly情况下起作用。该条件下,如果没有发现合适的阵列适合该homehost,mdadm将重新扫描所有阵列并组装它们,并更新它们的homehost为指定值。
  • 举例:mdadm -A --scan --homehost=aaa --auto-update-homehost
  • 备注:下面举例说明。
    mdadm --create /dev/md0 -l5 -n3 /dev/sd[b-d] --homehost=pc3x --assume-clean
    mdadm --stop /dev/md0
    mdadm -A --scan --homehost=aaa --auto-update-homehost

扩容阵列(--grow)

--raid-disks(-n)

  • 功能:改变成员盘数量。
  • 举例:mdadm --grow /dev/md0 --raid-disks=5
  • 备注:阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。对于raid5来说,只能增加成员盘,不能减少。而对于raid1来说,可以增加成员盘,也可以减少。但要减少成员盘时,首先要将盘faulty和removed掉。

--size(-z)

  • 功能:改变成员盘大小。
  • 举例:mdadm --grow /dev/md0 --size=4194304
  • 备注:可以增加或者减小成员空间大小。当增加空间时,将执行resync操作。madam --grow /dev/md0 --size=max,分配可使用最大的空间给阵列。

--bitmap(-b)

  • 功能:增加或者移除bitmap。
  • 举例:
     mdadm --grow /dev/md0 -b internal;增加bitmap
     mdadm --grow /dev/md0 -b none;移除bitmap

--level(-l)

  • 功能:尚不支持改变RAID级别。

--layout(-p)

  • 功能:改变校验数据分布。等同于create模式下--layout选项。

管理磁盘(--manage)

--add(-a)

  • 功能:将指定设备添加到阵列中。
  • 举例:mdadm --add /dev/md0 /dev/sdb
  • 备注:如果RAID是正常状态,则--add一个磁盘后,该磁盘变为RAID的热备盘。如果RAID为降级状态,当--add所掉的成员盘时,若磁盘上记录了bitmap信息,则根据bitmap 信息来重构RAID磁盘中需要同步的部分。如果RAID为降级状态,--add一个非掉的成员盘,RAID开始全局重构。

--re-add

  • 功能:增加一个刚刚从阵列中移除不久的设备。
  • 举例:mdadm -r /dev/md0 /dev/sdb --re-add /dev/sdb
  • 备注:--red-add与--add目前测试看来效果相同。

--fail(-f)

  • 功能:标记指定盘为faulty。
  • 举例:mdadm -f /dev/md0 /dev/sdb
  • 备注:除了可以指定设备名外,也可以指定detached。使用detached,可以导致从系统detached的盘被标记为faulty(这个没有测试)。

--set-faulty

  • 功能:作用等同于--fail

--remove(-r)

  • 功能:从阵列中移除指定设备。
  • 举例:
     mdadm -r /dev/md0 /dev/sdb /dev/sdc,移除md0中的sdb和sdc。
     mdadm -r /dev/md1 faulty;移除一个faulty的设备,并不能同时将所有faulty设备移除。
     mdadm -r /dev/md1 detached;没有测试。
  • 备注:只可以移除spare和faulty盘。

misc模式

--query(-Q)

  • 功能:检查设备是否为md设备,是否为md阵列的组成部分。
  • 举例:mdadm --query /dev/md0 or mdadm --query /dev/sdi
  • 备注:
     查询一个md设备,输出信息如下:
    [root@localhost ~]# mdadm --query /dev/md0
    /dev/md0: 15.100GiB raid5 3 devices, 0 spares. Use mdadm --detail for more detail.
    包括阵列名称、阵列大小、阵列级别、阵列的盘数和热备盘数。
     查询一个非md设备(设备是md阵列的active盘),输出信息如下:
    [root@localhost ~]# mdadm --query /dev/sdj
    /dev/sdj: is not an md array
    /dev/sdj: device 1 in 2 device active raid1 /dev/md3.  Use mdadm --examine for more detail.
     查询一个非md设备(设备是md阵列的faulty盘),输出信息如下:
    /dev/sdi: is not an md array
    /dev/sdi: device 0 in 2 device undetected raid1 /dev/md2.  Use mdadm --examine for more detail.
     查询一个非md设备(设备存在superblock信息,但已经从md阵列移除),输出信息:
    /dev/sdg: is not an md array
    /dev/sdg: device 2 in 3 device mismatch raid5 /dev/md0.  Use mdadm --examine for more detail.
     查询一个非md设备(设备不存在superblock信息),输出信息:
    [root@localhost ~]# mdadm --query /dev/sdk
    /dev/sdk: is not an md array

--detail(-D)

  • 功能:显示一个阵列的详细信息。
  • 举例:mdadm --detail /dev/md0
  • 备注:
     mdadm -D /dev/md0 显示信息如下:
    /dev/md0:
    Version : 00.90.03      //superblock版本
    Creation Time : Thu Jul 28 08:31:13 2011 //创建阵列时间
    Raid Level : raid5      //阵列级别
    Array Size : 16777088 (16.00 GiB 17.18 GB) //阵列大小
    Used Dev Size : 8388544 (8.00 GiB 8.59 GB) //每块成员盘使用在阵列中的大小
    Raid Devices : 3      //成员盘个数,正在重构中重构盘也计算在内
    Total Devices : 3      //磁盘总个数=active+failed+spare
    Preferred Minor : 0      //阵列次设备号
    Persistence : Superblock is persistent  //是否使用superblock
    Intent Bitmap : Internal     //bitmap类型
    Update Time : Sat Jul 30 08:45:47 2011  //更新时间
    State : active       //阵列状态
    Active Devices : 3      //活跃盘个数,正在重构中的重构盘不计算在内,而计算在Spare Device中,重构完成后,才从Spaer Devices中计算到此项中。
    Working Devices : 3      //同Raid Devices相同。
    Failed Devices : 0      //faulty盘个数。
    Spare Devices : 0      //热备盘个数,重构过程中顶入的重构盘仍计算在内。
    Layout : left-symmetric     //冗余分布算法
    Chunk Size : 64K      //条块大小
    UUID : f4eea5d5:1959d933:c4cd1425:c6c88f28 //RAID uuid
    Events : 0.66
    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
     mdadm -Ds显示/proc/mdstat中所有阵列的信息
    ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f4eea5d5:1959d933:c4cd1425:c6c88f28
    ARRAY /dev/md1 level=raid5 num-devices=3 UUID=cdaf2fef:dfe7b741:2fb91a6c:772f21a6
    ARRAY /dev/md3 level=raid1 num-devices=2 UUID=5c8695d2:e606d5ee:8fa15373:20bdb34a
     mdadm -D --brief /dev/md0将列出md阵列的简略信息。
    ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f4eea5d5:1959d933:c4cd1425:c6c88f28

--export(-Y)

  • 功能:与--detail一起使用,使阵列信息的输出格式变为key=value的格式。
  • 举例:mdadm --detail --export /dev/md0
  • 备注:输出的内容为:
    MD_LEVEL=raid0
    MD_DEVICES=4
    MD_METADATA=0.90
    MD_UUID=6905fc31:e0e4cdcc:0ae08b48:7f860f33

--examine(-E)

  • 功能:打印设备上面的superblock信息
  • 举例:mdadm --examine /dev/sdj
  • 备注:
     mdadm --examine /dev/sdb显示信息为:
    /dev/sdb:
    Magic : a92b4efc
    Version : 00.90.00
    UUID : f4eea5d5:1959d933:c4cd1425:c6c88f28
    Creation Time : Thu Jul 28 08:31:13 2011
    Raid Level : raid5
    Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
    Array Size : 16777088 (16.00 GiB 17.18 GB)
    Raid Devices : 3
    Total Devices : 3
    Preferred Minor : 0
    Update Time : Sat Jul 30 08:45:47 2011
    State : clean
    Internal Bitmap : present
    Active Devices : 3
    Working Devices : 3
    Failed Devices : 0
    Spare Devices : 0
    Checksum : dfee75c0 - correct
    Events : 0.66
    Layout : left-symmetric
    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
     mdadm --examine --scan。如果/etc/mdadm.conf文件声明了DEVICE字段,将扫描该字段列出的设备。如果没有声明,将扫描所有设备。
    ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f4eea5d5:1959d933:c4cd1425:c6c88f28
    ARRAY /dev/md1 level=raid5 num-devices=3 UUID=cdaf2fef:dfe7b741:2fb91a6c:772f21a6
    ARRAY /dev/md3 level=raid1 num-devices=2 UUID=5c8695d2:e606d5ee:8fa15373:20bdb34a
     mdadm --examine --brief /dev/sdj列出具体设备所属于阵列的信息。
    ARRAY /dev/md3 level=raid1 num-devices=2 UUID=5c8695d2:e606d5ee:8fa15373:20bdb34a

--sparc2.2

  • 功能:对于linux内核版本为2.2下创建的RAID,通过该参数修正阵列的superblock信息
  • 举例:mdadm -E --sparc2.2 /dev/md0
  • 备注:如果阵列是通过2.2内核加上RAID patch的形式建立的,那样superblock建立的不正确,至少与2.4及以后的内核不兼容。可以通过--examine --spare2.2,在显示信息之前修正它。也可以通过--assemble --update=sparc2.2,重装它。

--examine-bitmap(-X)

  • 功能:显示bitmap信息。
  • 举例:mdadm -X /dev/sdx or mdadm -X /root/bitmap.file
  • 备注:备注:mdadm -X /dev/sdh显示内容
    Filename : /dev/sdh
    Magic : 6d746962
    Version : 4
    UUID : 85086dde:4b2d35db:8e186060:0589add1
    Events : 0
    Events Cleared : 0
    State : OK
    Chunksize : 32 KB
    Daemon : 5s flush period
    Write Mode : Normal
    Sync Size : 8388544 (8.00 GiB 8.59 GB)
    Bitmap : 262142 bits (chunks), 262142 dirty (100.0%)

--run(-R)

  • 功能:阵列中某一部分设备包含其他阵列superblock信息时,该阵列可能是inactive状态,或需要用户确认后才能启动,使用该参数可以直接将阵列设为active状态。
  • 举例:
     mdadm --CR /dev/md0 -l5 -n3 /dev/[b-d] -x1 /dev/sde --bitmap=internal --force
     mdadm -R /dev/md0

--stop(-S)

  • 功能:停止阵列。被停止的阵列需要重新组装后才能使用。
  • 举例:mdadm --stop /dev/md0

--readonly(-o)

  • 功能:将active阵列变成只读。
  • 举例:mdadm --readonly /dev/md0
  • 备注:通过cat /proc/mdstate文件可以查看到阵列的这个变化。如果正在进行重构过程中,阵列变成了只读,那阵列将不能够继续进行重构。不可以重复的对同一设备进行只读设置。

--readwrite(-w)

  • 功能:将只读陈列变成可读写。
  • 举例:mdadm --readwrite /dev/md0
  • 备注:阵列默认是可读写。不可以重复的对同一设备进行可读写设置。

--zero-superblock

  • 功能:将包含合法md信息的superblock区域置为零。
  • 举例:mdadm --zero-superblock /dev/sdj
  • 备注:停止阵列后,若需要清理磁盘上的阵列信息,需要执行该操作。

--test(-t)

  • 功能:与--detail一起使用,获取阵列的状态。
  • 举例:mdadm --detail --test /dev/md0; echo $?
  • 备注:--detail参数单独使用时,只有在获取一些设备的有用信息失败情况时,才返回非0。而与--test一起使用,echo $?的结果如下:
     0:阵列处于active状态。
     1:阵列存于degrade和重构状态。
     2:阵列处于disabled状态。
     4:获取设备信息时,存在错误。

-W, --wait

  • 功能:它将等待resync, recovery, or reshape完成,然后返回。
  • 举例:mdadm -W /dev/md0
  • 备注:如果md设备没有进行resync, recovery, or reshape,该命令将直接返回。echo $?结果为1。如果mdadm等待md设备完成resync, recovery, or reshape后,命令执行结束,echo $?为0。

监控模式(--monitor)

指定监控对象:

对于命令mdadm --monitor options... devices...,如果给出了devices,则仅仅监控指定的devices。反之,监控所有配置文件(/etc/mdadm.conf)中的devices。如果指定了--scan,则/proc/mdstate里面列出的设备也被监控。

输出监控事件:

监控的结果就是产生事件。事件被传递给指定的程序或者发送给指定的E-mail,则事件报告给stdout。具体如何指定事件的输出见下节详述。当传递事件给程序时,程序立刻运行。传递给程序2-3个参数。第一个是事件的名称,第二个是产生事件的md设备名称,如果存在,第三个参数是关联设备的名称。

被监控事件类型:

DeviceDisappeared:对mdadm配置monitor错误时,会产生该事件。例如:对于一个已经配置了监控进程的md设备,再次给它配置监控进程,后配置的监控进程将产生该事件。对于--mail参数配置错误的参数,如配置两个以上邮箱,之间以空格隔开。可以配置成功,但会报该事件。

RebuildStarted:md设备开始重建。

RebuildNN:md设备的重建进度到达某些值时产生监控事件。如进度值为20、40、60和80时,产生相应监控事件。

RebuildFinished:md设备重建完成。

Fail:md设备上面一个磁盘状态为faulty。

FailSpare:热备盘代替faulty盘失败。

SpareActive:热备盘代替faulty盘成功,并且Spare盘状态最终变为active(非spare)状态时,产生监控事件。

NewArray:/etc/mdadm.conf也/proc/mdstat两个文件对比,mdadm.conf文件中不存在的md设备,即被报告该事件。

DegradedArray:检查到存在降级的md设备。

MoveSpare:在使用全局热备时,热备盘从一个md设备移动到另一个md设备。

SparesMissing:/etc/mdadm.conf文件,某个md设备指定了spares参数(热备盘个数),而monitor发现md设备的热备盘个数少于指定个数时,产生该事件。

TestMessage:与--test参数配合,当运行monitor命令时,相应的md设备产生该事件。

所有事件都可以触发程序运行,但仅有Fail、FailSpare、DegradedArray、SparesMissing 和TestMessage事件可以通过mail发送。

可监控级别:

监控md设备状态的变化。该参数对raid1、4、5、6、10和multipath盘阵有作用。对于raid0和linear,由于它们无相关监控事件不需要监控。

监控设置全局热备:

除了能够报告事件外,对于处于相同spare-group的阵列,如果其中一个阵列的某个磁盘损害且不存在热备盘,而另外阵列存在热备盘,monitor进程可以把热备盘移动到这个阵列上面来。及多个阵列可以共有一个热备盘。配置文件格式如下:
DEVICE /dev/sd*
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=a7e27ec9:3389e70a:2a2d9651:abbe4ad6 spare-group=group1
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8f427b1d:d86e2313:7f5d9f04:310f9e63 spare-group=group1
对于上面md0和md1,配置了spare-group都是group1,当监控开启后,md1若掉盘了,监控发现该事件后,会自动将md0中的热备顶到md1中,供其使用。

--mail(-m)

  • 功能:指定邮件地址
  • 举例:madam –monitor –mail=xxx@csdn.net /dev/md0
  • 备注:首先要保证sendmail服务启动,同时,通过mail命令可以发送邮件成功。可以配置多个邮箱,以逗号隔开。

-program(-p), --alert

  • 功能:当事件被发现时,触发指定的程序运行。
  • 举例:mdadm --monitor --program=/root/pc3x.sh /dev/md0 &
  • 备注:程序可以为shell脚本,通过$1,$2,$3来获取相应的参数。

-y, --syslog

  • 功能:事件通过syslog报告。
  • 举例:mdadm --monitor --syslog /dev/md0 &
  • 备注:message被打印到/var/log/message文件里面

--delay(-d)

  • 功能:查看设备的延迟时间。默认是60s
  • 举例:mdadm --monitor –mail=xxx@csdn.net --program=/root/pc3x.sh --delay=300 /dev/md0 &

--daemonise(-f)

  • 功能:mdadm将以后台demon形式来运行。
  • 举例:mdadm --monitor --syslog /dev/md0 -f
  • 备注:demon的ID号将被打印到屏幕上面。可以配合--pid-file参数使用,将ID号打印到--pid-file参数指定的文件中。

--pid-file(-i)

  • 功能:当mdadm以demon模式运行时,把进程ID写入到指定的文件中。
  • 举例:mdadm --monitor --syslog --pig-file=/root/pc3x.pid /dev/md0 -f
  • 备注:注意,该参数必须和-f参数一起使用。如果不使用—pid-file参数,进程号将被打印到屏幕上,指定该参数后,进程号被写入到指定的文件中。

--oneshot(-1)

  • 功能:立刻检查一次盘阵,会检查到NewArray、DegradedArray 、SparesMissing事件。
  • 举例:mdadm --monitor --oneshot --scan --program=/root/pc3x.sh
  • 备注:该参数不能与-f参数一起使用。虽然与-f参数一起使用不会报错,但是demon根本不会启动起来。与—scan参数配合使用,效果更加。在配置cron一起使用,效果更上一层。

--test(-t)

  • 功能:当启动mdadm的时候,给每个md设备发送一条TestMessage事件。
  • 举例:mdadm --monitor --test --syslog /dev/md0 -f
  • 备注:当--test配合--scan使用时,它会给/etc/mdadm.conf文件里面的每个md设备发送TestMessage事件。如果mdadm --monitor命令指定设备,它会给每个设备发送TestMessage事件。

--config(-c)

  • 功能:指定特定的配置文件,通过配置文件指定邮件地址和程序。不使用该参数,默认文件为/etc/mdadm.conf。
  • 举例:mdadm --monitor --scan --config=文件 --oneshot
  • 备注:如果指定其他配置文件,则/etc/mdadm.conf文件将失效。

--scan(-s)

  • 功能:监控/proc/mdsate文件中列出的所有设备。
  • 举例:mdadm --monitor --scan --program=/root/pc3x.sh -f
  • 备注:当使用--scan参数时,--program或者—mail,两个参数必须指定一个。同时,mdadm --monitor命令行不需要特别说明某个设备。

非特定模式参数

--help(-h)

  • 功能:显示帮助信息,后面跟上选项名称,将显示该选项方式下所有选项帮助信息。
  • 举例:mdadm --help; mdadm --help --add; mdadm --create --help

--help-options

  • 功能:显示一些帮助信息。跟--help大同小异。
  • 举例:mdadm --help-options

--version(-V)

  • 功能:打印mdadm版本
  • 举例:mdadm --version

--verbose(-v)

  • 功能:对于正在发生的,显示详细信息。
  • 举例:mdadm -D -v -s
  • 备注:该参数可以使用2遍,显示额外信息。目前可以应用在--detail --scan 和 --examine --scan。

--quiet(-q)

  • 功能:避免打印完全的信息。
  • 备注:这种模式下,mdadm除非是非常重要的信息,否则不会打印任何信息。

--brief(-b)

  • 功能:显示简短信息。比--verbose少。
  • 举例:mdadm -D /dev/md0 --brief
  • 备注:可以与--detail或--examine一起使用。当与--verbose一起使用时,打印--verbose与--brief中间状态信息。

--force(-f)

  • 功能:不同模式下面有不同意思,具体详见各个模式。仔细小心使用这个参数。

--config(-c)

  • 功能:指定配置文件。
  • 备注:默认配置文件为/etc/mdadm.conf,如果这个文件不存在,将是/etc/mdadm/mdadm.conf。如果值是none,mdadm会将配置文件看成空文件。如果值是partitions,mdadm将读取/proc/partitions以获取所有设备。
    mdadm --examine --brief --scan --config=partitions

--scan(-s)

  • 功能:扫描配置文件或者/proc/mdstate文件,去获取信息。
  • 备注:从/proc/mdstate文件中获取一些/etc/mdadm.conf文件中没有的信息。如:成员盘。唯一例外就是misc和monitor模式下,使用—detail或者—stop,mdadm将从/proc/mdstate文件中获取所有阵列。如mdadm --stop --scan将停止所有的md设备。

mdadm.conf

配置文件作用:

/etc/mdadm.conf作为默认的配置文件,主要作用是方便跟踪软RAID的配置,尤其是可以配置监视和事件上报选项。在这里我们主要说明配置文件在组装RAID时的作用。更多mdadm.conf使用可参见man mdadm.conf。

举例:

  • 配置磁盘设备文件名:echo DEVICE /dev/sd[b-i] > /etc/mdadm.conf
  • 配置软RAID信息:mdadm --detail --scan >> /etc/mdadm.conf
  • 利用配置文件组装软RAID:mdadm -A --scan
  • 当RAID无法组装时(如缺少成员盘,或读写造成superblock数据过期),强制组装软RAID:mdadm -A --scan --force

组装中的几点说明:

  • --scan参数只能根据扫描配置文件中配置的RAID,没有配置在配置文件中的RAID不能组装起来。
  • DEVICE中配置的是组装RAID时,所有要扫描的磁盘,如RAID中的成员盘没有配置到DEVICE项中,则该磁盘无法组装到RAID中。

需要加--force才能使RAID active的情况:

  • 对于有冗余且无热备的RAID,停止后,又掉了一块盘,组装时不加--force,RAID组装起来为inactive状态,mdadm -D 查不到RAID信息,仅/proc/mdstat中可看到简要信息。对于先掉盘,后停止的RAID,不需要--force也可以组装成功。
  • 对于有冗余且无热备,RAID中所有成员盘虽然在系统中,但配置文件的DEVICE的配置缺少一个成员盘,则组装时,可以理解为缺少一块成员盘。因此组装结果同1中相同。
  • 重构状态的RAID,重启后,不指定--force无法组装成功。

无法将RAID组装成active的情况:

对于上节说到的缺少一块成员盘时,可以通过--force参数将RAID组装起来,但对于掉了两块或两块以上的成员盘时,无法将RAID再组装成active状态,只能组装成一个inactive状态的RAID。

posted @ 2017-02-10 11:39  lpfuture  阅读(18380)  评论(0编辑  收藏  举报