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实现。

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

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驱动。

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

#depmod -a

#dracut -v /initrd.img

时间: 2024-10-11 16:04:28

initrd加载raid驱动的实战的相关文章

hibernate 加载 jdbc驱动出错Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

Exception in thread "main" org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set程序基本没动过,以前用的3.3.2的版本,今天换成4.3.4的版本后,改了一下sessionFactory的生成方法,其他的不变,开始还能运行,过了30min左右,就不能运行了! hibernate4 已经废弃

mkinitrd --preload预加载raid模块

mkinitrd可建立映像文件,以供Linux开机时载入ramdisk 如何应用 -f 若指定的映像问家名称与现有文件重复,则覆盖现有的文件. -v 执行时显示详细的信息. --omit-scsi-modules 不要载入SCSI模块. --preload=<模块名称> 指定要载入的模块. --with=<模块名称> 指定要载入的模块. --version 显示版本信息. 目前遇到的瓶颈是如何正确的将raid驱动模块加载到内存中,当linux开机的过程中识别到 硬盘正确的挂载. m

win10系统加载ahci驱动的操作方案(Win10之家)

win10系统使用的过程中很多用户会想要加载ahci驱动,但是大部分用户根本不知道怎么操作加载ahci驱动,这样的话很多用户会遇到一些问题,那如果使用的过程中想要加载ahci驱动的话我们应该怎么操作呢?在这一次的教程里小编会把加载ahci驱动的操作方法分享给大家,有需要在win10系统中加载ahci驱动的用户直接跟着下面的教程操作就能轻松掌握加载ahci驱动的操作方法,相信大家都能成功掌握加载ahci驱动的操作方法. 推荐: win10 32位纯净版下载 具体方法如下: 1.进入系统后,点击开始

为什么在加载数据库驱动包的时候有用的是Class.forName( ),却没有调用newInstance( )?

在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法. 通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类. 通常编码过程中,在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作.因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象. 有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调

java加载jdbc驱动三种方式的比较

平时连接数据库的时候首先要加载jdbc驱动,这一步骤其实有三种方式,他们的区别?优劣? 快速了解三种加载方式 Class.forName("com.mysql.jdbc.Driver"); DriverManager.registerDriver(new com.mysql.jdbc.Driver()) System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver"); 注释: 第二种与第三种注

简单的Linux驱动程序以及如何加载/卸载驱动

今天记录一下简单的Linux驱动程序怎么写以及如何加载/卸载驱动 以hello.c为例: hello.c #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE #endif #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("Dua

图解WildFly8.x模块化加载数据库驱动

在上一篇中<图解WildFly8.x配置JNDI数据源>没有说明数据库的驱动是如何设置的,本文以Mysql的驱动设置为例进行详细的补充,主要是利用JBoss的模块化设计思想,让系统启动更快,更充分地利用内存.首先到modules目录增加驱动的包. module.xml文件的配置如下: 接下来要手动修改standalone.xml配置文件,增加添加的驱动: 配置好后,在后台的图形界面下就可以看到添加的驱动了: 接下来就是使用这个驱动,手动使用的方式如下: 其中需要注意几个名称必须保证一致: 设置

JDBC加载数据库驱动的方式

JDBC作为数据库访问的规范接口,其中只是定义一些接口.具体的实现是由各个数据库厂商来完成. 一.重要的接口: 1.public interface Driver 每个驱动程序类必须实现的接口.Java SQL 框架允许多个数据库驱动程序.每个驱动程序都应该提供一个实现 Driver 接口的类.DriverManager 会试着加载尽可能多的它可以找到的驱动程序,然后,对于任何给定连接请求,它会让每个驱动程序依次试着连接到目标 URL.强烈建议每个 Driver 类应该是小型的并且是单独的,这样

ubuntu arm妙算加载cp210x驱动

在妙算TK1上安装ros后,插上usb串口竟然没有驱动 无奈装 从http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx#Linux下载 cp210x的驱动 编译生成cp210x.ko insmod cp210x.ko,就可以看到ttyUSB0了. 另外我们还需要ubuntu上电自动加载驱动模块 步骤如下 1. depmod -a 2. 在/etc/modules加入cp210x 3. 拷贝cp210x.ko