打印
[ZLG-ARM]

关于软件raid(mdadm)在重启机器后不会自动运行的问题

[复制链接]
2956|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
billen|  楼主 | 2009-6-4 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
 
   

相关帖子

沙发
armpc| | 2009-6-4 17:07 | 只看该作者

讲得好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

53

帖子

0

粉丝