这篇记录的是一次真实的服务器安装排障。
本案例中的 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.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]
这里最重要的是 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 逻辑磁盘立即出现。
到这里就可以确认:
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...
因此,本案例最终只需要解决:
安装阶段无法识别 SAS3908
正式系统本身已经支持该 RAID 控制器,不需要继续手工替换内核驱动。
五、总结
建议按这个顺序排查
- 先确认 RAID卡已经创建逻辑盘。
- 用
uname -r确认安装环境内核版本。 - 用
lspci -nn获取 RAID 的 Vendor ID 和 Device ID。 - 查看
megaraid_sas当前版本和 alias。 - 找与架构、内核版本匹配的新驱动。
- 先手工
insmod验证,不要一开始就重制 ISO。 - 加载后磁盘出现,说明驱动方向正确。
- 有第二介质就走双介质加载。
- 只有一个虚拟光驱或需要重复部署,就把驱动集成进
initrd.img。 - 安装完成后重新检查正式系统驱动,不要默认正式系统也需要替换。