服务器安装CentOS时提示找不到硬盘,很大概率就是系统里没带你的阵列卡驱动,解决办法是先确认阵列卡型号,再从官方渠道下载对应驱动,通过制作驱动盘或编译进内核的方式加载。
centos安装找不到硬盘,先确认是不是阵列卡驱动问题
装CentOS卡在“No disks found”或者分区界面空白,第一反应别急着怪硬件,大多数服务器都会用阵列卡做RAID,CentOS默认内核不一定包含所有阵列卡的驱动模块,尤其是较新的HPE Smart Array、Dell PERC、LSI/Avago MegaRAID系列,或者LSI的HBA卡,经常需要手动加驱动。
先确认阵列卡型号,可以通过服务器启动时按Ctrl+R(HPE)、Ctrl+C(LSI)、Ctrl+V(Dell PERC)进入阵列卡配置界面,查看控制器型号,如果服务器已经跑着系统,也可以用lspci | grep -i raid查看,没有系统也无所谓,开机自检界面一般会显示控制器名称。
行业共识认为,90%以上的“CentOS装不上系统”问题都出在缺少存储驱动上,这不是系统本身有问题,而是内核驱动集没覆盖到你的硬件,这里提醒一句,CentOS 7和CentOS 8/Stream对驱动的支持差异很大,越新的内核自带驱动越全,但企业场景里CentOS 7存量依然巨大。
服务器安装系统加载阵列卡驱动前的三大准备工作
不要急着找驱动文件,先做三件事,否则后面全白费。
- 确认CentOS具体版本:比如CentOS 7.9的内核是3.10.x,CentOS 8+的内核是4.18或更高,不同内核编译的驱动不通用,必须匹配。
- 确认服务器架构:绝大多数服务器是x86_64,但也有部分ARM服务器,驱动文件架构不能搞混。
- 准备一台能上网的电脑和U盘:因为服务器本身没系统,下载驱动得靠别的机器,U盘格式建议FAT32,兼容性最好。
这三项确认完,再去对应厂商官网找驱动,HPE官网有“Software/Divers”专区,Dell有“Drivers & Downloads”,Lenovo有“ThinkSystem Server”驱动下载页,搜你的阵列卡型号,筛选操作系统为Red Hat Enterprise Linux 7或8(CentOS兼容版),下载驱动RPM包或ISO文件。
阵列卡驱动加载命令:实际操作步骤
拿到驱动文件后,最常见的加载方式有两种,一种是启动时用inst.dd指定驱动U盘,另一种是启动项里直接输入linux dd,下面拆开说。
使用U盘作为驱动盘,用inst.dd参数加载
- 将下载的驱动RPM包解压,把其中的
ko文件或dd目录放到U盘根目录,或者直接使用厂商提供的DD镜像(有些驱动下载包是镜像文件,需要dd写入U盘)。 - 插入U盘,放入CentOS安装光盘/U盘,开机启动到安装界面。
- 在启动菜单选择“Install CentOS 7”,按Tab或者E键编辑启动参数。
- 在参数末尾追加:
inst.dd,然后回车启动。 - 安装程序会在早期阶段扫描设备,询问是否加载驱动,选择“Yes”,然后选择你插入的U盘设备(通常是
/dev/sdb1或/dev/sdc1)。 - 选择驱动包路径,安装程序自动加载,加载成功后会显示“Driver loaded”,接着就能看到硬盘了。
使用linux dd命令手动扫描
- 同样在启动界面按Tab编辑参数,把
quiet替换成linux dd,或者直接追加dd。 - 回车后会出现一个交互界面,列出所有块设备,选择U盘,然后选择驱动文件。
- 加载完成后,命令行界面会显示驱动加载成功,然后继续正常安装流程。
这里有个容易翻车的细节:有些服务器UEFI启动方式和Legacy BIOS启动方式下,U盘的设备名可能不一样,而且如果U盘是GPT分区,可能找不到,建议做启动盘的时候用MBR格式,U盘容量不要太大,8-16G最稳。
把驱动直接编译进CentOS内核
如果服务器有网络,且你能拿到CentOS源码包,可以自己编一个包含阵列卡驱动的新内核,这个方式最彻底,也最麻烦,适合批量部署场景,不适合单台装机应急。
具体步骤是:从官网下载内核源码,配置config时开启对应驱动模块(比如MegaRAID的CONFIG_MEGARAID_SAS),用make oldconfig、make bzImage编译,生成新内核后替换ISO中的vmlinuz和initrd.img,这一步需要Linux基础,而且耗时较长,新手不建议尝试。
dell服务器centos安装驱动时最常见的坑
拿Dell服务器举例,很多型号的PERC H330/H730/H740/H840在CentOS 7安装时都会指向缺少megaraid_sas驱动,但奇怪的是,这个驱动其实在新版内核里是存在的,为什么还是加载不上?
原因是CentOS 7.0-7.5的内核里megaraid_sas版本太老,不支持新卡,你需要去Dell官网下载最新的megaraid_sas驱动包,装一个CentOS 7.6以上的版本,或者直接换成CentOS 7.9,自带驱动版本往往能覆盖,这也是为什么我建议你优先升级到小版本更新,而不是死磕老镜像。
另一个坑是HPE的Smart Array P408i-a等型号,需要hpsa或smartpqi驱动。hpsa在老内核里有,但是对新卡SAS3/SAS4控制器支持不全,smartpqi是较新的驱动,CentOS 7的默认内核里大概率没有,去HPE官网下载驱动包时,注意区分“Driver for RHEL 7”和“Driver for RHEL 8”,别下错。
离线环境装CentOS装到一半崩溃怎么办
很多机房服务器没法连外网,驱动包下载好了却拷不进服务器,这时候可以先把驱动包放进CentOS安装源里,做一个本地安装源。
- 把CentOS系统镜像解压到一个8G以上的U盘,或者挂载到本地HTTP/DVD源。
- 同时把阵列卡驱动RPM包放到同一个U盘的一个独立目录,或者放到另一个U盘。
- 启动安装时用
inst.repo=hd:/dev/sdb1加上inst.dd=hd:/dev/sdc1:/driver来指定系统源和驱动包位置。 - 这样即使离线,也能同时读取系统文件和驱动。
如果你是在安装过程中中途报错,不是一开始找不到硬盘,而是格式化分区或开始写盘时崩溃,那有可能是驱动加载了但和内核版本冲突,建议换个驱动版本试试,优先选“Latest”而不是“Recommended”。
驱动加载成功后,如何验证阵列卡真的被识别了
装完系统进了桌面或命令行,用以下命令确认驱动正常工作:
lsmod | grep megaraid dmesg | grep -i raid cat /proc/scsi/scsi
如果能看到类似megaraid_sas
的模块和对应的控制器信息,就说明驱动生效了,再用fdisk -l或lsblk查看RAID后的逻辑盘,如果能看到正常容量,那就彻底没问题了。
顺便说一句,装完系统后不要急着删U盘,等系统完全起来,确认驱动没问题再拔,万一系统起来后找不到驱动,你可以用dkms把驱动编码进内核模块目录,以后重启也不会丢。
服务器阵列卡驱动在百度搜索里最常见的几个问题
CentOS 8和CentOS 7阵列卡驱动通用吗?
不通用,CentOS 7基于RHEL 7,内核是3.10版本,CentOS 8基于RHEL 8,内核是4.18版本,厂商驱动包明确区分RHEL 7和RHEL 8,如果你下载了RHEL 8的驱动放到CentOS 7上,安装时会提示版本不兼容,即使强行加载也会crash,现在CentOS Stream虽然更活跃,但企业生产环境很多人还在用CentOS 7,建议确认好版本再动手。
阵列卡驱动加载成功后重启又失效怎么处理?
这种情况多发生在没有将驱动持久化的场景,如果你用的是inst.dd加载,驱动只在安装过程中有效,装进系统的内核里还是没有,解决办法是安装完成后,把驱动RPM包拷到系统里,用rpm -ivh安装一次,然后执行mkinitrd重新生成initramfs,具体命令是dracut -f,然后重启验证,如果还不行,查看/lib/modules/$(uname -r)/kernel/drivers/scsi下是否有对应驱动文件。
服务器没有光驱和U盘,怎么加载驱动?
如果服务器支持iLO(HPE)、iDRAC(Dell)远程管理口,可以通过虚拟介质功能,把驱动ISO镜像挂载为虚拟光驱,启动安装时指定inst.dd=/dev/sr0即可,如果服务器有网口且能连接PXE引导服务器,也可以把驱动放到共享目录里,用inst.dd=http://ip/driver.iso这种方式加载,到头来还是那句话,驱动本身不难搞,难的是搞清楚你的硬件需要哪个版本的驱动。
阵列卡驱动加载本质上就是让系统认识你的存储控制器,只要匹配上内核架构和硬件型号,步骤很简单,碰到问题别钻牛角尖,先去官网下载驱动,再用U盘或虚拟介质加载,绝大多数情况下都能顺利装上CentOS。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/654167.html




