Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1768383
  • 博文数量: 184
  • 博客积分: 10122
  • 博客等级: 上将
  • 技术积分: 5566
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-08 12:32
文章存档

2011年(1)

2008年(183)

我的朋友

分类: LINUX

2008-03-04 00:14:10

一、        内核及引导相关

 

1、          内核和 Software-RAID

Software-RAID 的实现需要内核的支持,有两种方式 :一种是 built-in ,也就是把各个级别的 sofatware-RAID 的代码集成到内核文件中;一种就是 module 方式,类似驱动文件,放到 /lib/modules//kernel/drivers/md/ 目录下。具体使用那种方式而定应该根据实际情况而定

a)    如果 / 系统是 Software-RAID ,则必须用 built-in 方式。除非在创建 initrd 文件时指定 –-preload

b)    如果想让某个级别的 software-RAID 在系统启动时自动激活,就必须把该级别的 software-RAID support built-in 方式编译到内核中,否则用 modules

c)     默认是以 Modules 方式编译,除非你在安装 Linux 时把 / 做成 software-RAID 的方式。

2、          如何判断当前各个级别的 RAID support 的方式?

a)        如果是 Redhat 9 ,必须kernel-source RPM 包;如果是 RHEL ,必须安装 kernel-devel RPM 包。这个步骤一定要做,否则无法继续下面的操作

b)        如果是 Redhat 9 ,先进入 /usr/src/linux-2.4/ 目录下,执行make menuconfig

c)         如果是 Redhat AS ,先进入 /usr/src/kernels/ ,执行 make menuconfig

d)        如果是 Redhat 9 ,选择 Multi-device support RAID and LVM)” RAID support ,看下面各个级别的 RAID 前面的 <> 中是字母 M (表示module 方式)还是 * 号(built-in);如果为空,则默认为 module 方式

3、          利用脚本自动判断

上面的方法比较麻烦,需要先安装 RPM 包,有没有什么方法可以直接判断呢?其实我们也可以不用安装 RPM 包,而是通过查找一些文件就可以知道了。

总体思路是

       a)否存在 /proc/mdstat 文件,如果没有就彻底不支持 RAID

b)查看 /lib/modules//drivers/md 下是否有对应的模块,有则一定是模块

       c)如果没有,可能是 built-in 也可能根本不支持,分两步走

              1)如果是 built-in ,则 /proc/mdstat personalities 会列出该 RAID 级别。

              2)如果是不支持,则 /proc/mdstat personalities 不会有该 RAID 级别。

       d)还要注意一点,Redhat 9 Redhat AS 4 RAID 模块名不一样,前者是 *.o ,后者是 *.ko

       整个 shell 脚本如下 :(支持 Redhat 9 Redhat AS 4

       [root@mail ~]# cat ./check_md.sh   

#!/bin/bash

kernel_ver=$(uname -r)

echo

echo "Current Kernel :  $kernel_ver "

echo "================================="

# if /proc/mdstat file NOT exists, if must be the RAID-Support NOT enable"

[ ! -f /proc/mdstat ] && echo "RAID-Support NOT enable" && exit 1

list="linear raid0 raid1 raid5 raid6 raid10 multipath"

for i in $list; do

        # First.  search the /lib/modules//kernel/drivers/md/ directroy to see if the module file exists

        [ -f "/lib/modules/${kernel_ver}/kernel/drivers/md/${i}.o" ] && echo " $i  ...... [ Module ]" && continue

        [ -f "/lib/modules/${kernel_ver}/kernel/drivers/md/${i}.ko" ] && echo "$i  ...... [ Module ]" && continue

        # Second. check the /proc/mdstat file and grep the "Personalities ... " line to see if the specical was built-in supported

        if  grep Personalities /proc/mdstat |grep -i $i >/dev/null 2>&1 ;then

                echo " $i  ...... [ Built-in ]"

        else    # this LEVEL is supposed NOT to be supported

                echo " $i ...... [ NOT Support ]"

        fi

done

echo "================================="

[root@mail ~]#

下面是 Redhat AS 上的输出

 

[root@mail ~]# ./check_md.sh

 

Current Kernel :  2.6.9-5.EL

=================================

linear  ...... [ Module ]

raid0  ...... [ Module ]

raid1  ...... [ Module ]

raid5  ...... [ Module ]

raid6  ...... [ Module ]

raid10  ...... [ Module ]

multipath  ...... [ Module ]

=================================

[root@mail ~]#                                                  

 

下面是 Redhat 9 上的输出:



[root@monitor root]# ./check_md.sh

Current Kernel :  2.4.20-8smp

=================================

 linear  ...... [ Module ]

 raid0  ...... [ Module ]

 raid1  ...... [ Module ]

 raid5  ...... [ Module ]

 raid6 ...... [ NOT Support ]

 raid10 ...... [ NOT Support ]

 multipath  ...... [ Module ]

=================================

[root@monitor root]#

 

1、          如何让 Software-RAID 在系统引导时自动激活

a)              RAID-Support Built-in 方式

b)              建立分区时用 fdisk t 命令把分区的 partition ID 改为 0xFDLinux raid autodetect

c)               建立 Software-RAID 时必须设置 persistent-superblock 参数值为 1

d)              这三个方面缺一不可,条件1是最基本的,条件2是让系统在引导时能够自己搜索所有 software-RAID 设备,而 Persistent-superblock 则是用于组合各个 software-RAID,所以从依赖关系上讲,每个条件都是建立在前一个条件的基础上的。

2、          内核的相关参数

a)           raid=noautodetect

b)          raid=partitionable

c)           md_mod.start_ro=1

d)          md_mod.start_dirty_degraded=1

e)           /proc/sys/dev/raid/speed_limit_min

f)             /proc/sys/dev/raid/speed_limit_max

 


阅读(1460) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~