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

[复制链接]
4288|1
 楼主| billen 发表于 2009-6-4 17:05 | 显示全部楼层 |阅读模式
mdadm是multiple&nbsp;devices&nbsp;admin的简称,它是Linux下的一款标准的软件&nbsp;RAID&nbsp;管理工具,作者是Neil&nbsp;Brown。但是我在虚假机上测试的时候,创建的软阵列不会随系统自动启动起来:<br />首先创建新的阵列<br />mdadm使用--create(或其缩写-C)参数来创建新的阵列,并且将一些重要阵列的标识信息作为元数据可以写在每一个底层设备的指定区间。--level(或者其缩写-l)表示阵列的RAID级别,--chunk(或者其缩写-c)表示每个条带单元的大小,以KB为单位,默认为64KB,条带单元的大小配置对不同负载下的阵列读写性能有很大影响。--raid-devices(或者其缩写-n)表示阵列中活跃的设备个数,而--spare-devices(或者其缩写-x)表示阵列中热备盘的个数,一旦阵列中的某个磁盘失效,MD内核驱动程序自动用将热备磁盘加入到阵列,然后重构丢失磁盘上的数据到热备磁盘上。<br />简单解释一下配置文件:<br />/etc/mdadm.conf作为默认的配置文件,主要作用是方便跟踪软RAID的配置,尤其是可以配置监视和事件上报选项。Assemble命令也可以使用--config(或者其缩写-c)来指定配置文件。我们通常可以如下命令来建立配置文件。<br /><br />[root@fc5&nbsp;mdadm-2.6.3]#echo&nbsp;DEVICE&nbsp;/dev/sd[b-h]&nbsp;/dev/sd[i-k]1&nbsp;&gt&nbsp;/etc/mdadm.conf&nbsp;<br />[root@fc5&nbsp;mdadm-2.6.3]#&nbsp;./mdadm&nbsp;-Ds&nbsp;&gt&gt/etc/mdadm.conf&nbsp;<br />[root@fc5&nbsp;mdadm-2.6.3]#&nbsp;cat&nbsp;/etc/mdadm.conf<br />DEVICE&nbsp;/dev/sdb&nbsp;/dev/sdc&nbsp;/dev/sdd&nbsp;/dev/sde&nbsp;/dev/sdf&nbsp;/dev/sdg&nbsp;/dev/sdh&nbsp;/dev/sdi1&nbsp;/dev/sdj1&nbsp;/dev/sdk1&nbsp;<br />ARRAY&nbsp;/dev/md1&nbsp;level=raid0&nbsp;num-devices=3&nbsp;UUID=dcff6ec9:53c4c668:58b81af9:ef71989d&nbsp;<br />ARRAY&nbsp;/dev/md0&nbsp;level=raid10&nbsp;num-devices=6&nbsp;spares=1&nbsp;UUID=0cabc5e5:842d4baa:e3f6261b:a17a477a<br /><br /><br />使用配置文件启动阵列时,mdadm会查询配置文件中的设备和阵列内容,然后启动运行所有能运行RAID阵列。如果指定阵列的设备名字,则只启动对应的阵列。<br /><br />Linux&nbsp;默认会在系统启动时启动以前已经创建好的阵列。但是在我机器上启动失败。首先当然去系统的启动脚本里找相关的:<br />系统启动脚本:rc.sysinit中找到以下几行:<br />update_boot_stage&nbsp;RCraid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />if&nbsp;[&nbsp;-f&nbsp;/etc/mdadm.conf&nbsp;];&nbsp;then&nbsp;&nbsp;&nbsp;#&nbsp;如果存在&nbsp;/etc/mdadm.conf&nbsp;则<br />&nbsp;&nbsp;&nbsp;&nbsp;/sbin/mdadm&nbsp;-A&nbsp;-s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;mdadm&nbsp;-A&nbsp;表示&nbsp;Assemble&nbsp;模式,-s&nbsp;则表示搜索&nbsp;/etc/mdadm.conf<br />fi<br />在这里加上以下脚本:<br />#&nbsp;cp&nbsp;-a&nbsp;/dev/md1&nbsp;/etc/udev/devices/<br />这样就可以在机器重启后自动运行raid了;<br /><br />另外如果在创建时没有保存好/etc/mdadm.conf,在系统启动是不会启动你新建的那个阵列呢。那怎么办呢?我们可以用另外一种方法激活raid<br />组装曾创建过的阵列<br />模式--assemble或者其缩写(-A)主要是检查底层设备的元数据信息,然后再组装为活跃的阵列。如果我们已经知道阵列由那些设备组成,可以指定使用那些设备来启动阵列。<br /><br />[root@fc5&nbsp;mdadm-2.6.3]#&nbsp;./mdadm&nbsp;-A&nbsp;/dev/md0&nbsp;/dev/sd[b-h]&nbsp;<br />mdadm:&nbsp;/dev/md0&nbsp;has&nbsp;been&nbsp;started&nbsp;with&nbsp;6&nbsp;drives&nbsp;and&nbsp;1&nbsp;spare.<br /><br /><br />如果有配置文件(/etc/mdadm.conf)可使用命令mdadm&nbsp;-As&nbsp;/dev/md0。mdadm先检查mdadm.conf中的DEVICE信息,然后从每个设备上读取元数据信息,并检查是否和ARRAY信息一致,如果信息一致则启动阵列。如果没有配置/etc/mdadm.conf文件,而且又不知道阵列由那些磁盘组成,则可以使用命令--examine(或者其缩写-E)来检测当前的块设备上是否有阵列的元数据信息。<br /><br />[root@fc5&nbsp;mdadm-2.6.3]#&nbsp;./mdadm&nbsp;-E&nbsp;/dev/sdi&nbsp;mdadm:&nbsp;No&nbsp;md&nbsp;superblock&nbsp;detected&nbsp;on&nbsp;/dev/sdi.<br />[root@fc5&nbsp;mdadm-2.6.3]#&nbsp;./mdadm&nbsp;-E&nbsp;/dev/sdb&nbsp;/dev/sdb:&nbsp;Magic&nbsp;:&nbsp;a92b4efc&nbsp;Version&nbsp;:&nbsp;00.90.00&nbsp;UUID&nbsp;:&nbsp;0cabc5e5:842d4baa:e3f6261b:a17a477a<br />Creation&nbsp;Time&nbsp;:&nbsp;Sun&nbsp;Aug&nbsp;22&nbsp;17:49:53&nbsp;1999&nbsp;Raid&nbsp;Level&nbsp;:&nbsp;raid10&nbsp;Used&nbsp;Dev&nbsp;Size&nbsp;:&nbsp;1048512&nbsp;(1024.11&nbsp;MiB&nbsp;1073.68&nbsp;MB)&nbsp;<br />Array&nbsp;Size&nbsp;:&nbsp;3145536&nbsp;(3.00&nbsp;GiB&nbsp;3.22&nbsp;GB)&nbsp;Raid&nbsp;Devices&nbsp;:&nbsp;6&nbsp;Total&nbsp;Devices&nbsp;:<br />7&nbsp;Preferred&nbsp;Minor&nbsp;:&nbsp;0&nbsp;Update&nbsp;Time&nbsp;:&nbsp;Sun&nbsp;Aug&nbsp;22&nbsp;18:05:56&nbsp;1999&nbsp;State&nbsp;:&nbsp;clean&nbsp;Active&nbsp;Devices&nbsp;:&nbsp;6&nbsp;Working&nbsp;Devices&nbsp;:&nbsp;7&nbsp;Failed&nbsp;Devices&nbsp;:&nbsp;0&nbsp;Spare&nbsp;Devices&nbsp;:&nbsp;1&nbsp;Checksum&nbsp;:&nbsp;2f056516&nbsp;-&nbsp;correct&nbsp;Events&nbsp;:&nbsp;0.4&nbsp;Layout&nbsp;:&nbsp;near=2,&nbsp;far=1&nbsp;Chunk&nbsp;Size&nbsp;:&nbsp;64K&nbsp;Number&nbsp;Major&nbsp;Minor&nbsp;RaidDevice&nbsp;State&nbsp;this&nbsp;0&nbsp;8&nbsp;16&nbsp;0&nbsp;active&nbsp;sync&nbsp;/dev/sdb&nbsp;0&nbsp;0&nbsp;8&nbsp;16&nbsp;0&nbsp;active&nbsp;sync&nbsp;/dev/sdb&nbsp;1&nbsp;1&nbsp;8&nbsp;32&nbsp;1&nbsp;active&nbsp;sync&nbsp;/dev/sdc&nbsp;2&nbsp;2&nbsp;8&nbsp;48&nbsp;2&nbsp;active&nbsp;sync&nbsp;/dev/sdd&nbsp;3&nbsp;3&nbsp;8&nbsp;64&nbsp;3&nbsp;active&nbsp;sync&nbsp;/dev/sde&nbsp;4&nbsp;4&nbsp;8&nbsp;80&nbsp;4&nbsp;active&nbsp;sync&nbsp;/dev/sdf&nbsp;5&nbsp;5&nbsp;8&nbsp;96&nbsp;5&nbsp;active&nbsp;sync&nbsp;/dev/sdg&nbsp;6&nbsp;6&nbsp;8&nbsp;112&nbsp;6&nbsp;spare&nbsp;/dev/sdh<br /><br /><br />从上面命令结果可以找到阵列的唯一标识UUID和阵列包含的设备名字,然后再使用上面的命令来组装阵列,也可以使用UUID标识来组装阵列。没有一致的元数据的信息设备(例如/dev/sda和/dev/sda1等)mdadm程序会自动跳过。<br /><br />[root@fc5&nbsp;mdadm-2.6.3]#&nbsp;./mdadm&nbsp;-Av&nbsp;--uuid=0cabc5e5:842d4baa:e3f6261b:a17a477a&nbsp;/dev/md0&nbsp;/dev/sd*<br />mdadm:&nbsp;looking&nbsp;for&nbsp;devices&nbsp;for&nbsp;/dev/md0<br />mdadm&nbsp;&nbsp;no&nbsp;recogniseable&nbsp;superb&nbsp;ock&nbsp;o&nbsp;&nbsp;dev/sda<br />mdadm:&nbsp;/dev/sda&nbsp;has&nbsp;wrong&nbsp;uuid&nbsp;<br />mdadm&nbsp;&nbsp;no&nbsp;recogniseable&nbsp;superblock&nbsp;o&nbsp;&nbsp;dev/sda1<br />mdadm:&nbsp;/dev/sda1&nbsp;has&nbsp;wrong&nbsp;uui&nbsp;.<br />mdadm:&nbsp;no&nbsp;RAID&nbsp;superbloc&nbsp;&nbsp;on&nbsp;/&nbsp;ev/sdi<br />mdadm:&nbsp;/dev/sdi&nbsp;has&nbsp;wrong&nbsp;uuid&nbsp;<br />mdadm&nbsp;&nbsp;/dev/sdi1&nbsp;has&nbsp;wrong&nbsp;uuid.<br />mdadm:&nbsp;no&nbsp;RAID&nbsp;superbloc&nbsp;&nbsp;on&nbsp;/&nbsp;ev/sdj<br />mdadm:&nbsp;/dev/sdj&nbsp;has&nbsp;wrong&nbsp;uuid&nbsp;<br />mdadm&nbsp;&nbsp;/dev/sdj1&nbsp;has&nbsp;wrong&nbsp;uuid.<br />mdadm:&nbsp;no&nbsp;RAID&nbsp;superbloc&nbsp;&nbsp;on&nbsp;/&nbsp;ev/sdk<br />mdadm:&nbsp;/dev/sdk&nbsp;has&nbsp;wrong&nbsp;uuid&nbsp;<br />mdadm&nbsp;&nbsp;/dev/sdk1&nbsp;has&nbsp;wrong&nbsp;uuid.<br />mdadm:&nbsp;/dev/sd&nbsp;&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;0.<br />mdadm:&nbsp;/dev/sdc&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;1.<br />mdadm:&nbsp;/dev/sdd&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;2.<br />mdadm:&nbsp;/dev/sde&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;3.<br />mdadm:&nbsp;/dev/sdf&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;4.<br />mdadm:&nbsp;/dev/sdg&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;5.<br />mdadm:&nbsp;/dev/sdh&nbsp;is&nbsp;identified&nbsp;&nbsp;s&nbsp;a&nbsp;member&nbsp;of&nbsp;/dev/md0,&nbsp;slot&nbsp;6.<br />mdadm:&nbsp;added&nbsp;/dev/sdc&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;added&nbsp;/dev/sdd&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;added&nbsp;/dev/sde&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;added&nbsp;/dev/sdf&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;added&nbsp;/dev/sdg&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;added&nbsp;/dev/sdh&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;added&nbsp;/dev/sdb&nbsp;to&nbsp;/dev/&nbsp;d0&nbsp;as&nbsp;&nbsp;<br />mdadm:&nbsp;/dev/md0&nbsp;has&nbsp;been&nbsp;start&nbsp;d&nbsp;with&nbsp;6&nbsp;drives&nbsp;and&nbsp;1&nbsp;spare.<br /><br />另外如果发现缺失某个设备后&nbsp;RAID&nbsp;不能启动,可以使用剩余设备启动&nbsp;RAID<br />#&nbsp;mdadm&nbsp;-A&nbsp;--run&nbsp;/dev/md1&nbsp;/dev/sde&nbsp;/dev/sdf<br />&nbsp;<br /> &nbsp;&nbsp;<br />
armpc 发表于 2009-6-4 17:07 | 显示全部楼层

讲得好

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

53

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部