initrd加载raid驱动的实战

系统环境:CentOS release 6.5 (Final)

内核版本:2.6.32-431.23.3.el6.x86_64

场景说明:服务器上的系统盘,通过raid卡,连接到主板上,现在需要将系统安装到系统盘上,所以必须要先加载raid驱动,然后才能够让系统识别系统盘上的文件系统,挂载真正的根文件系统。

以下是详细的过程分析:

方案1:将raid驱动编译进内核

方案2:将raid驱动添加进initrd.img

将通过方案2实现。

步骤一:正常情况下,启动异常提示:

WARNING:at arch/x86/kernel/smp.c 118 native_smp_send_reschedule +0x5c10x68c

dracut warning : No root device "Block:/dev/mapper/live -rw"

kernel panic

注明:可以通过在菜单中添加rdshell,获取控制台进行分析问题

步骤二:拷贝其他系统中的megaraid文件中的驱动,然后在init中,手动加载,并且拷贝insmod命令

1)解压initrd.img文件

2)拷贝megaraid文件夹

3)通过ldd insmod搜索需要的动态库

4)编辑init文件,加载驱动

5)重新打包initrd.

错误异常:

insmod: error inserting 'megaraid.ko': -1 Required key not available

排查:内核版本不一致:

2.6.32-431.el6.x86_64,导致加载驱动失败,必须匹配上编译内核的版本


步骤三:到相同版本的机器上拷贝/lib/module/'uname -r'/kernel/driver/scsi/megaraid/,重新执行步骤二

出现异常:

dracut warning : No root device "Block:/dev/mapper/live -rw"

kernel panic

总结:通过rdshell获取kernel panic之后的控制台,发现模块已经正确加载,但是无法发现系统盘设备,想起根文件系统需要加载fat驱动。

#cd /dev/disk

can not find /dev/disk directory #说明还是没有检测到磁盘设备

正常情况下会生成如下的目录:

/dev/disk:

by-label by-id by-uuid 对设备进行映射


步骤四:在其他已经安装系统的机器上,执行depmod -a, 建立驱动模块之间的依赖表,然后使用dracut指令重新生成一个initrd。替换到原来的initrd。启动成功

#depmod -a

说明:depmod 程序生成/lib/module/'uname -r'/modules.dep文件,记录下驱动模块之间的
依赖关系,同时也会针对当前的PCI等接口,生成map文件。这些文件为hotplug(热拔插)
设备检测程序提供了自动加载驱动的依据。

#dracut -v /initrd.img

你可能感兴趣的:(depmod,initrd,mkinitrd,dracut)