首页 / 资讯中心 / 文章详情

装系统找不到驱动器?RAID驱动加载与阵列卡排查全指南

装系统找不到驱动器?RAID驱动加载与阵列卡排查全指南 ★ FEATURED ARTICLE
装系统被RAID驱动卡住这种事干运维的多少都碰过几回。新到的服务器、换过阵列卡的机器、甚至一些老工作站装系统时直接给你弹个“找不到驱动器”界面就停在那里不动了。第一次遇到的人多半会怀疑是自己U盘没做好其实八成是RAID卡驱动没加载进去。这篇东西就是专门讲清楚这件事为什么装系统必须认RAID驱动、怎么把驱动弄进去、装完之后还要处理哪些细节。适合刚接触服务器运维的新人也适合那些被各种RAID折腾到麻木的老手翻翻看有没有漏掉的环节。1. 为什么装系统会被RAID驱动卡住——先把原理搞清楚1.1 装系统时“找不到硬盘”到底是谁的锅大多数人接触RAID的第一印象是速度和冗余但到了装机这一步RAID卡更像一道关卡。服务器上的硬盘通常不是直通给操作系统的而是由RAID卡统一接管把多块物理盘组合成逻辑盘之后再暴露给系统。系统安装程序没能力直接看懂这些逻辑盘它得靠对应的驱动去跟RAID卡通信。问题就出在系统安装程序自带的驱动库默认只包含通用存储控制器驱动。第三方RAID卡这类硬件如果没有额外加载驱动安装界面里那个磁盘列表就是空的。我拿一个常见场景解释下。某台服务器配了一块阵列卡盘位插了四块硬盘在RAID卡的配置界面里已经建好了一个逻辑盘容量看起来一切正常。但用系统镜像引导启动后到了选安装位置那一步列表里一片空白。点击“加载驱动程序”如果手头没准备好对应驱动这一步就是死局。很多人这时候会反复重做U盘、换镜像、换安装工具折腾一晚上最后才发现是驱动的事。这套机制其实也好理解。就好比你买了一个新款的读卡器插到电脑上电脑不装对应驱动就识别不到里面的存储卡。RAID卡在服务器里做的事比读卡器复杂得多但逻辑是一样的它是一个独立硬件控制器需要自己的驱动配合。1.2 驱动加载的三个阶段与常见场合RAID卡驱动的加载并不是只发生在系统安装那一刻。整个链条里其实有三个关键节点第一阶段是系统安装程序启动时。无论是Windows还是Linux的安装环境它的内核或PE环境都只有一套基础驱动装机会先去识别存储控制器这时候就需要让安装程序“看到”RAID卡并加载对应驱动否则后续步骤无从谈起。第二阶段是操作系统首次启动时。安装结束后系统重启内核加载真正的系统驱动。如果之前只是把驱动塞进了安装环境但没有正确写入系统重启之后照样会蓝屏或者卡死在启动画面。第三阶段是长期运行中。系统跑起来之后如果需要更新RAID卡固件、调整阵列模式、查看磁盘状态这些都依赖完整的驱动栈和管理工具。实际需要加载RAID驱动的场合也比想象中多。最典型的是服务器装系统不管是Windows Server还是主流Linux发行版服务器厂商预装的阵列卡驱动几乎都不在系统默认驱动库里。第二个常见场合是老工作站或二手服务器主板集成但驱动较老的RAID功能系统识别不到。第三个是换了阵列卡之后重装系统驱动对不上。搞清楚自己现在处于哪个环节排查起来能省很多时间。2. 动手之前看清楚RAID卡型号把驱动准备对2.1 三分钟确定RAID卡型号装系统最怕的就是驱动方向搞错。你要是拿了一个别的品牌阵列卡的驱动去装界面照样不认。所以在做任何操作之前先把RAID卡的准确型号搞清楚。最快的办法是看开机自检画面。服务器启动过程中RAID卡自检那几秒会显示卡的型号和固件版本比如常见的几款控制器型号屏幕上会直接打出控制器芯片和固件信息。有些服务器默认会跳过这个自检信息需要进BIOS或者管理口界面里把启动日志打开。进系统查也行前提是当前系统还能正常起来。Windows下打开设备管理器展开“存储控制器”节点就能看到RAID卡的型号名称。Linux下用lspci命令就能列出PCI设备信息通过grep过滤一下存储相关内容就能看到控制器型号。服务器如果已经没法正常开机的就用带外管理口去看。大多数服务器都支持通过管理口远程查看硬件信息和启动过程截图对比一下自检界面的数据也能确定型号。这里有个小经验很多服务器主板自带的是软RAID功能芯片其实是主板芯片组提供的这种“RAID卡”物理上不存在驱动加载方式和真正的独立阵列卡不完全一样去主板厂商下对应的RAID驱动就行别跑到阵列卡品牌页面乱找。2.2 下载驱动版本和内核对应关系别搞错确定型号之后就是去下载驱动。这里头有讲究RAID驱动不是一个随便抓来就能用的东西它跟操作系统的版本、架构、内核版本都有对应关系。Windows系统相对省心一点厂商提供的驱动下载页面上一般会按系统版本和位数分类选对下载即可。注意有些老阵列卡驱动只提供旧系统版本强行装到新系统会提示签名问题哪怕是系统安装阶段加载也可能装不进去。 Windows下还要注意区分驱动包里的内容是安装程序用的还是系统内用的有的厂商会把驱动跟管理工具打包在一起安装环境里只需要那个inf格式的驱动文件。Linux系统就麻烦一些。很多发行版的内核已经集成了常见RAID卡的开源驱动模块如果是比较新的发行版配老卡可能直接就能识别。但如果你是装比较老的内核版本或者那驱动模块压根没编进去就得手动下载厂商提供的驱动包。这类驱动包通常是一个rpm包或源码包安装时需要通过特殊方式加载。我一般下载驱动时会顺便把官方提供的README或驱动说明文档也下载下来里面通常会写清支持的内核版本范围和加载方式。别嫌麻烦多花五分钟看文档比你回头折腾两小时实在得多。2.3 驱动U盘制作的小讲究驱动有了接下来是怎么把它送到安装程序那里。很多人会随手找一个大容量U盘把驱动文件夹一拷就插上服务器结果发现安装程序识别不到。这背后有个常见的低级原因U盘格式问题。U盘尽量格式化成FAT32格式。虽然安装程序通常也能读取NTFS但碰到底层UEFI环境的时候FAT32的兼容性是最好的。另外如果你的服务器是UEFI引导模式有些情况下NTFS分区根本不会被识别。所以稳妥起见专门准备一个小容量U盘格式化FAT32把驱动文件放进去。文件放进去之前要注意目录结构。最好不要把驱动文件直接散放在U盘根目录建一个干净点的文件夹比如driver把解压出来的内容放进去。尤其注意某些驱动包下载下来是压缩包得先解压。我见过不少人在安装界面浏览驱动时找到一个压缩包文件以为直接能加载结果系统提示找不到驱动。装完系统之后这个驱动U盘可以先留着因为后面配置阵列管理工具时可能还会用到。但注意别把它当成普通U盘来用沾上别的文件没关系别把驱动目录删了就行。3. 实操三种环境下的驱动加载完整流程3.1 Windows Server安装U盘浏览加载最快上手Windows系统的驱动加载流程相对标准化操作界面也直观。我用一台模拟项目的服务器做例子配置了一块主流阵列卡准备安装Windows Server系统。整个流程走一遍之后你会发现最难的部分不是操作本身而是搞清楚该加载哪个文件。先用启动盘引导服务器进入Windows安装程序语言和键盘选项都选好之后来到安装类型选择界面。这一步先别急着点“现在安装”直接点击左下角的“加载驱动程序”按钮。系统会弹出一个文件浏览窗口这时候把准备好的驱动U盘插到服务器上。浏览到U盘如果你的驱动包解压后目录结构比较规范系统会自动扫描并列出可用的驱动。如果没自动识别到就手动定位到存放inf文件的目录。选中之后系统会提示找到匹配的驱动确认并加载然后就能看到磁盘列表了。整个流程不超过五分钟前提是驱动文件本身没有下载错。有个容易被忽视的点加载完驱动之后安装程序有时候还是显示不出磁盘。这种情况多半是RAID卡在安装环境里没有再扫描一次逻辑盘。可以把RAID卡配置界面打开确认逻辑盘状态正常有时候重启一下让RAID卡重新初始化就好了。Windows安装完成后进系统第一件事就是打开设备管理器确认存储控制器没有黄色感叹号。如果一切正常再装上对应的管理工具能查看整列状态、硬盘健康状况这些信息。提示如果安装程序自带的驱动路径确实找不到对应的控制器可以试着在加载界面点击“重新扫描”按钮。有些版本的安装程序在插入U盘后需要手动触发重新扫描才能识别到驱动盘。3.2 Linux安装启动参数手动指定驱动Linux系装机的驱动加载方式比Windows更灵活但也正因为灵活不同发行版之间的操作差异容易把人绕晕。我先说一个比较通用的场景用介质引导后通过编辑启动参数指定驱动盘。以典型的CentOS系列为例。从安装介质启动之后到了GRUB引导界面需要按e键进入编辑模式找到以linux开头的那一行启动参数在末尾追加dd参数。不同发行版的参数名可能略有不同比如有的是inst.dd有的是dd还有的直接用modprobe方式。具体用哪个建议先看一眼该发行版的安装文档。保存并启动之后安装程序会提示加载驱动程序。选择对应的设备也就是你的驱动U盘然后进入下一级选择界面选中上面列出的驱动包完成加载。之后磁盘就能正确识别了。如果是不带交互界面的最小化安装或PXE安装也可以通过kickstart或preseed配置里的仓库方式加载驱动这属于偏进阶的做法适合批量部署场景。还有一种特殊情况某些老RAID卡在新版本Linux内核里已经找不到对应驱动而厂商的驱动包又是源码形式需要编译内核模块。这种情况就得先装一个基础系统在基础系统里准备好编译工具链然后编译并安装模块再重新生成initramfs镜像。这整个过程看着没什么技术含量但恰恰是Linux装机翻车最多的地方。我建议任何不带桌面的服务器装Linux都把驱动U盘做成“可能用得到”的东西随身带着别以为自己的发行版足够新就能直接认。3.3 远程服务器虚拟介质挂载驱动ISO机房里的服务器不可能每次都用显示器键盘去操作大多数时候是通过带外管理口实现的这时候安装系统就有了一个更干净的方式虚拟介质。服务器自带的管理卡通常支持远程挂载镜像把系统安装ISO和驱动ISO都挂载到虚拟光驱里远程的KVM窗口里就能看到两个光驱设备。安装系统时需要加载驱动的步骤直接指向那个虚拟光驱里的驱动目录即可。这种方式最大的好处是省掉U盘这个物理中介。U盘在枪林弹雨的机房环境里太容易出问题接口接触不良、格式不对、U盘本身写坏了都会让一次本可以顺利的装机变得令人抓狂。虚拟介质不会出现这些幺蛾子。但虚拟介质有个细节要留意管理口的虚拟介质兼容性不是百分之百。有些老服务器的管理口对挂载ISO的大小、格式有限制。如果要挂载超过4GB的镜像建议确认管理卡固件已经更新到最新版本否则可能在挂载过程中直接断开。远程装系统时如果中途卡住别急着关掉KVM先看看管理口的事件日志很多时候能看出虚拟介质通道是否报错。我在某台老服务器上遇到了虚拟光驱断连当时的表现是安装程序进行到一半磁盘消失重启之后就恢复了。排查下来是管理口固件过旧升级后就稳定了。4. 装完不等于结束系统层面还要做哪些事4.1 进系统后先确认驱动状态与阵列状态系统装完能正常进桌面或者命令行这只是第一步。你要做的不是马上开始部署业务而是花几分钟确认RAID卡驱动真的工作正常。Windows下看设备管理器存储控制器节点下应该没有任何带感叹号的设备。如果看到了问号或感叹号说明驱动没有正确匹配需要手动更新驱动。之后打开管理工具连接阵列卡检查一下硬盘状态是否在线、逻辑盘状态是否正常、电池或电容模块健康状况等。Linux下主要通过dmesg查看内核日志里有没有关于RAID卡驱动加载的记录再用lspci确认设备状态。阵列管理工具在Linux下通常是命令行安装对应工具之后跑一下状态查询命令看看RAID级别和盘位状态是不是跟预期一致。有个情况要特别注意如果系统进得去但阵列管理工具检测不到RAID卡很可能是管理工具的版本和驱动不匹配或者管理服务没有启动。这时候去查一下服务状态和工具日志比反复卸载重装更高效。4.2 把驱动固化进系统避免重装再翻车装完系统之后还有一个很多人会忽略的步骤把RAID驱动固化到系统的初始化镜像或系统镜像里。这样做的好处是以后如果系统启动阶段需要调整内核参数或是做镜像恢复不至于驱动丢失导致无法启动。Linux下这个操作叫重新生成initramfs。在内核模块加载了RAID驱动之后执行dracut或mkinitrd相关命令把模块写进初始ramdisk这样系统在启动早期就能加载RAID驱动挂载根文件系统不会失败。Windows下可能更关心的是部署镜像的驱动注入。如果你用镜像方式批量部署服务器可以提前把RAID驱动注入到系统镜像里。离线方式可以用dism命令把驱动加进install.wim这样后续每台机器部署时就不用手动加驱动了。第一次做这些操作时建议先在测试环境验证一遍再应用到生产。别小看这一步批量部署几十台机器的时候缺一个驱动意味着每台机器都要手动修一遍这个工作量想想就头疼。4.3 几件装机时顺手做掉的小事装机过程中有些不起眼的小配置不做不会立刻出问题但后续使用中会逐渐让你觉得别扭。趁着系统刚装完环境还干净顺手把这几件事做了。BIOS里的引导模式要保持跟系统安装时一致。如果你用UEFI模式装的系统BIOS就别动不动切回Legacy模式切来切去会导致系统无法引导排查起来还特别隐蔽。RAID卡的缓存策略也值得花时间看一眼。有些阵列卡默认写策略是Write Back这需要电池或电容模组正常工作才能保证断电安全。如果阵列卡没有电池保护就直接用Write Back断电丢数据的风险很大。建议装机的时候顺手核实一下电池状态如果发现电池没接或者容量异常把策略改成Write Through或者修复电池再说。还有一个容易被忽略的是RAID卡上盘位的标记。物理盘位置和系统里的盘符不一定一一对应。装完系统后进到阵列管理工具里把物理盘位号记录下来贴个标签在服务器面板上。以后换盘或者做维护时不用再靠猜。5. 常见问题与排查实录5.1 驱动加载了还是看不到盘的5个原因驱动加载完成磁盘列表里还是空的这个现象在社区里被问得最多。我从实际排查过的案例里总结出五个常见原因按出现频率排个序。第一个是驱动版本或架构不匹配。32位安装程序加载了64位的驱动或者驱动包对应的是另一款控制器型号都可能导致加载后还是看不到盘。确认方式和系统位数别凭感觉。第二个是逻辑盘根本没建好或者阵列卡配置丢失。不少服务器主板上的电池耗尽后阵列配置会丢得干干净净磁盘变成未初始化状态。这时候驱动再对也没有逻辑盘能给系统看到先进阵列卡配置界面确认逻辑盘存在。第三个是控制器处于未初始化状态。新出厂的阵列卡或者换过卡的情况下控制器可能需要一次完整的初始化过程。有些服务器开机时会卡在控制器的自检阶段很久看起来像是死机了其实是在后台重建元数据。第四个是硬盘本身没就绪。尤其是用了新盘或者旧盘混插的时候硬盘可能需要更长的时间才能被阵列卡识别如果安装环境加载驱动后立即扫描磁盘可能会漏掉还在旋转加速阶段的硬盘。第五个是驱动虽然加载成功但对应的控制器固件太老。新驱动对老固件的兼容性通常没问题但某些特殊组合下会出现识别不到的情况。这种情况下优先升级RAID卡固件到官网最新版。5.2 装完系统重启找不到启动设备的处理系统装好了安装程序也提示完成了重启之后却直接提示找不到启动设备这种情况在带独立RAID卡的机器上很常见。排查顺序一般是这样的先进RAID卡配置界面确认逻辑盘还在不在并且状态是正常。如果逻辑盘丢了那就不是引导问题而是阵列故障得按数据恢复那边去处理。如果逻辑盘正常再看BIOS的启动顺序把包含引导记录的逻辑盘排到第一位。还有一个隐蔽的问题有些服务器BIOS里的启动设备列表不会自动刷新新安装的系统需要手动选择启动一次让它重新记录启动项。这在UEFI模式下尤其常见安装完系统后第一次重启时得手动进引导菜单选一次盘。如果在启动顺序里压根看不到逻辑盘可能是阵列卡Option ROM没有被正确初始化。检查BIOS里是否禁用了RAID卡的启动选项因为有些优化设置会把它关掉以加快启动速度。5.3 实战中容易踩的坑提前帮你避开做运维时间长了总有一些坑是拿时间换来的。这里挑几个我印象最深的写出来希望能给你的装机之路省点时间。U盘别插在USB3.0接口上。某些老服务器的安装环境对USB3.0控制器没有额外驱动插在3.0口上U盘完全不可见。装系统用的U盘就老老实实插黑色的USB2.0口蓝色3.0口留给系统装完再用。驱动U盘和系统安装U盘别放在同一个HUB上。如果服务器前置USB接口是通过内置HUB扩展的同时插两个U盘时可能出现其中一个识别不到的情况。条件允许的话一个插前面一个插后面互不干扰。Linux下加载驱动时有些驱动包里的模块是针对特定内核版本编译的直接复制到live环境里可能因为依赖问题加载失败。这类问题很难通过常规手段快速解决所以我在准备驱动U盘时会刻意多准备一个“备用发行版”的驱动包有时能救急。CentOS老版本装新阵列卡驱动时如果内核太老导致模块编译失败可以考虑先用一个较新的U盘系统把系统装上装完再升级内核。不过这属于“方案不太好看但有效”的偏方能用但别滥用。一点收尾的经验我自己在这条路上踩过的坑最后总结下来就一句话装系统之前先花五分钟确认RAID卡型号、驱动版本、系统位数三者对齐。每次觉得驱动折腾人回头看基本都是前期准备工作省了不该省的步骤。另外再说一个值得养成的习惯把已经验证可用的驱动包和对应系统版本记录下来不管是写进笔记还是贴标签在服务器上下次再遇到同样配置的机器直接照着上一次的配置来能省的时间绝对超出你的预期。
阅读完成 · 觉得有帮助?
咨询建站