mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具,作者是Neil Brown。但是我在虚假机上测试的时候,创建的软阵列不会随系统自动启动起来: 首先创建新的阵列 mdadm使用--create(或其缩写-C)参数来创建新的阵列,并且将一些重要阵列的标识信息作为元数据可以写在每一个底层设备的指定区间。--level(或者其缩写-l)表示阵列的RAID级别,--chunk(或者其缩写-c)表示每个条带单元的大小,以KB为单位,默认为64KB,条带单元的大小配置对不同负载下的阵列读写性能有很大影响。--raid-devices(或者其缩写-n)表示阵列中活跃的设备个数,而--spare-devices(或者其缩写-x)表示阵列中热备盘的个数,一旦阵列中的某个磁盘失效,MD内核驱动程序自动用将热备磁盘加入到阵列,然后重构丢失磁盘上的数据到热备磁盘上。 简单解释一下配置文件: /etc/mdadm.conf作为默认的配置文件,主要作用是方便跟踪软RAID的配置,尤其是可以配置监视和事件上报选项。Assemble命令也可以使用--config(或者其缩写-c)来指定配置文件。我们通常可以如下命令来建立配置文件。
[root@fc5 mdadm-2.6.3]#echo DEVICE /dev/sd[b-h] /dev/sd[i-k]1 > /etc/mdadm.conf [root@fc5 mdadm-2.6.3]# ./mdadm -Ds >>/etc/mdadm.conf [root@fc5 mdadm-2.6.3]# cat /etc/mdadm.conf DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi1 /dev/sdj1 /dev/sdk1 ARRAY /dev/md1 level=raid0 num-devices=3 UUID=dcff6ec9:53c4c668:58b81af9:ef71989d ARRAY /dev/md0 level=raid10 num-devices=6 spares=1 UUID=0cabc5e5:842d4baa:e3f6261b:a17a477a
使用配置文件启动阵列时,mdadm会查询配置文件中的设备和阵列内容,然后启动运行所有能运行RAID阵列。如果指定阵列的设备名字,则只启动对应的阵列。
Linux 默认会在系统启动时启动以前已经创建好的阵列。但是在我机器上启动失败。首先当然去系统的启动脚本里找相关的: 系统启动脚本:rc.sysinit中找到以下几行: update_boot_stage RCraid if [ -f /etc/mdadm.conf ]; then # 如果存在 /etc/mdadm.conf 则 /sbin/mdadm -A -s # mdadm -A 表示 Assemble 模式,-s 则表示搜索 /etc/mdadm.conf fi 在这里加上以下脚本: # cp -a /dev/md1 /etc/udev/devices/ 这样就可以在机器重启后自动运行raid了;
另外如果在创建时没有保存好/etc/mdadm.conf,在系统启动是不会启动你新建的那个阵列呢。那怎么办呢?我们可以用另外一种方法激活raid 组装曾创建过的阵列 模式--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 superb ock o dev/sda mdadm: /dev/sda has wrong uuid mdadm no recogniseable superblock o dev/sda1 mdadm: /dev/sda1 has wrong uui . mdadm: no RAID superbloc on / ev/sdi mdadm: /dev/sdi has wrong uuid mdadm /dev/sdi1 has wrong uuid. mdadm: no RAID superbloc on / ev/sdj mdadm: /dev/sdj has wrong uuid mdadm /dev/sdj1 has wrong uuid. mdadm: no RAID superbloc on / ev/sdk mdadm: /dev/sdk has wrong uuid mdadm /dev/sdk1 has wrong uuid. mdadm: /dev/sd is identified s a member of /dev/md0, slot 0. mdadm: /dev/sdc is identified s a member of /dev/md0, slot 1. mdadm: /dev/sdd is identified s a member of /dev/md0, slot 2. mdadm: /dev/sde is identified s a member of /dev/md0, slot 3. mdadm: /dev/sdf is identified s a member of /dev/md0, slot 4. mdadm: /dev/sdg is identified s a member of /dev/md0, slot 5. mdadm: /dev/sdh is identified s a member of /dev/md0, slot 6. mdadm: added /dev/sdc to /dev/ d0 as mdadm: added /dev/sdd to /dev/ d0 as mdadm: added /dev/sde to /dev/ d0 as mdadm: added /dev/sdf to /dev/ d0 as mdadm: added /dev/sdg to /dev/ d0 as mdadm: added /dev/sdh to /dev/ d0 as mdadm: added /dev/sdb to /dev/ d0 as mdadm: /dev/md0 has been start d with 6 drives and 1 spare.
另外如果发现缺失某个设备后 RAID 不能启动,可以使用剩余设备启动 RAID # mdadm -A --run /dev/md1 /dev/sde /dev/sdf
|