← 返回首页
藏宝地 · 指南

CentOS7.5_SAS3908_RAID不识别_实战解决方法

实测解决 CentOS 7.5 安装阶段无法识别 Broadcom/LSI SAS3908 RAID 控制器的问题,包含双介质加载驱动和重制安装镜像两种方案

发布时间 更新时间

这篇记录的是一次真实的服务器安装排障。

本案例中的 RAID 已经正常创建逻辑盘,同一台机器安装较新的 CentOS 7.8 可以直接识别硬盘,但换成 CentOS 7.5 后,在 Installation Destination 中完全看不到本地磁盘。

最终确认不是 RAID 配置错误,而是 CentOS 7.5 安装环境自带的 megaraid_sas 驱动太老,无法识别这块 SAS3908 控制器。

本次环境的关键参数:

项目 实际值
安装环境 CentOS 7.5
安装内核 3.10.0-862.el7.x86_64
RAID 控制器 Broadcom / LSI SAS3908 系列
PCI ID 1000:10e2
CentOS 7.5 自带驱动 megaraid_sas 07.702.06.00-rh2
实测可用驱动 megaraid_sas 07.710.06.00

这篇文章里的驱动版本只对应本次环境。遇到其他 RAID 卡时,应重新核对 PCI ID、系统架构和安装内核,不要直接照搬驱动文件。

一、故障现象

RAID卡中已经创建RAID1,但进入 CentOS 7.5 安装界面后,Local Standard Disks 一栏为空。

CentOS 7.5 安装界面无法识别 RAID 磁盘

由于同一台服务器安装 CentOS 7.8 时可以正常看到磁盘,所以首先怀疑 CentOS 7.5 的安装内核和 RAID 驱动版本过旧。

二、排查步骤

2.1 确认 RAID 控制器和安装内核

在安装界面按 Ctrl + Alt + F2 进入终端,先确认安装环境内核:

uname -r

本次返回:

3.10.0-862.el7.x86_64

再确认 RAID 控制器:

lspci -nn -s 17:00.0

结果中可以看到:

LSI Logic / Symbios Logic Device [1000:10e2]

确认 CentOS 7.5 内核与 RAID PCI ID 1000:10e2

这里最重要的是 PCI ID 1000:10e2。以后寻找驱动时,不能只看“支持 MegaRAID”或“支持 RHEL 7.5”,还要确认驱动的 PCI alias 中包含这个设备 ID。

2.2 确认旧驱动无法识别该控制器

CentOS 7.5 安装环境自带 megaraid_sas,但版本较老。

可以查看当前模块:

lsmod | grep megaraid

以及:

modinfo megaraid_sas

本次安装环境中的旧版本为:

07.702.06.00-rh2

模块本身可以加载,但无法驱动 1000:10e2,因此不会生成对应的 RAID 逻辑磁盘设备。

2.3 找到匹配 CentOS 7.5 的新版驱动

本次最终使用的驱动为:

kmod-megaraid_sas-07.710.06.00_el7.5-1.x86_64.rpm

需要同时满足:

  • 架构为 x86_64
  • 对应 RHEL/CentOS 7.5
  • 与安装环境 3.10.0-862.el7.x86_64 兼容
  • 驱动 alias 包含 1000:10e2

验证驱动最直接的方法,不是看说明,而是先在安装环境中手工加载模块。

2.4 手工加载驱动验证

从 RPM 中提取出 megaraid_sas.ko 后,在安装环境中挂载驱动介质并执行:

insmod /mnt/driver/megaraid_sas.ko

然后检查:

lsmod | grep megaraid
lsblk

新版模块加载后,原来完全看不到的 RAID 逻辑磁盘立即出现。

手工加载新版 megaraid_sas 后 RAID 磁盘出现

到这里就可以确认:

RAID 本身正常,问题确实出在 CentOS 7.5 安装环境的驱动。


三、解决方案

方案一:安装镜像和驱动介质分开加载

这是现场条件允许时更推荐的方案。

核心原则是:

安装 ISO 始终保持挂载,驱动放在第二个独立介质中。

第二介质可以是:

  • BMC 第二虚拟光驱
  • BMC 虚拟 USB / Virtual Disk
  • 实体 U 盘
  • 厂商支持的 Driver Update Disk

这样可以避免安装过程中反复替换同一个虚拟光驱。

方法 A:有标准 Driver Update Disk 时

如果厂商提供标准 dd.iso / DUD,可以在启动参数中加入:

inst.dd

进入 Driver Disk 选择界面后加载驱动,再继续安装。

这是最标准的 Anaconda 驱动加载方式。

方法 B:只有 .ko 驱动时

如果手里只有已经验证可用的 megaraid_sas.ko,可以让安装 ISO 保持在一个虚拟光驱中,再从第二介质挂载 .ko。

示例:

mkdir -p /mnt/driver
mount /dev/sr1 /mnt/driver
insmod /mnt/driver/megaraid_sas.ko
lsblk

看到 RAID 逻辑盘后继续安装。

为什么不建议单光驱反复换 ISO

实际排障中发现,如果安装环境只有一个 BMC 虚拟 CD/DVD,在:

安装 ISO → 驱动 ISO → 安装 ISO

之间反复切换,部分 BMC 会重新枚举光驱设备,例如 sr0 变成 sr1。

更麻烦的是,一些定制安装环境仍然依赖原安装介质中的文件,中途拔掉 ISO 后可能出现:

/bin/ps: Input/output error
cpio: Input/output error
Anaconda 黑屏
安装源丢失
dracut switch_root 失败

因此,如果有两个独立介质,优先使用双介质方案。


方案二:把新版 RAID 驱动集成进安装镜像

如果 BMC 只有一个虚拟光驱,或者同类型服务器以后还要重复安装,直接重做安装镜像更省事。

本次最终使用的就是这种方案。

1. 取出安装镜像中的 initrd

需要修改的文件通常是:

/images/pxeboot/initrd.img

安装环境真正使用的是这个 initramfs。

2. 把新版 megaraid_sas 集成进去

将已经验证可用的:

megaraid_sas.ko

替换或加入 initrd.img,并同步模块索引,使安装环境启动阶段就能够识别 SAS3908。

本案例使用的新版模块:

megaraid_sas 07.710.06.00

3. 把修改后的 initrd 放回 ISO

如果有 xorriso、genisoimage、oscdimg 等工具,可以重新构建 ISO 并保留 BIOS / UEFI 启动信息。

另一种情况是:

  • 新 initrd.img 不大于原文件占用空间
  • 能准确定位 ISO9660 中原文件的 extent 和 size

则可以原位覆盖 ISO 中的 initrd.img,不重新生成整个启动结构。

4. 用修改后的 ISO 正常启动

完成后不再需要:

inst.dd
rd.break
rd.live.ram

也不需要中途换驱动镜像。

直接挂载修改后的安装 ISO,正常进入安装程序。

理想状态是进入 Installation Destination 时,RAID 逻辑盘已经直接显示。


四、重启注意

安装完成后不要急着继续替换驱动

这里还有一个很容易误判的地方:

安装环境使用的内核,不一定等于安装完成后的正式系统内核。

本案例安装环境是:

3.10.0-862.el7.x86_64

而安装后的正式系统实际运行的是较新的 5.4 系列内核。

进入正式系统后执行:

uname -r
lsmod | grep megaraid
modinfo megaraid_sas | grep -Ei '^filename|^version|10e2'
lsblk

结果确认正式系统自带的 megaraid_sas 已经包含:

pci:v00001000d000010E2...

正式系统自带的 megaraid_sas 已包含 PCI ID 1000:10e2

因此,本案例最终只需要解决:

安装阶段无法识别 SAS3908

正式系统本身已经支持该 RAID 控制器,不需要继续手工替换内核驱动。


五、总结

建议按这个顺序排查

  1. 先确认 RAID卡已经创建逻辑盘。
  2. 用 uname -r 确认安装环境内核版本。
  3. 用 lspci -nn 获取 RAID 的 Vendor ID 和 Device ID。
  4. 查看 megaraid_sas 当前版本和 alias。
  5. 找与架构、内核版本匹配的新驱动。
  6. 先手工 insmod 验证,不要一开始就重制 ISO。
  7. 加载后磁盘出现,说明驱动方向正确。
  8. 有第二介质就走双介质加载。
  9. 只有一个虚拟光驱或需要重复部署,就把驱动集成进 initrd.img。
  10. 安装完成后重新检查正式系统驱动,不要默认正式系统也需要替换。