简介:针对HP ProLiant DL388 Gen10服务器在安装系统时识别不到硬盘空间的问题,这份压缩包汇集了智能阵列卡(Smart Array)驱动及配套安装组件,适合负责服务器部署与运维的工程师和装机人员补齐驱动、恢复硬盘识别。包内共9个文件,约1.06MB,以2个exe安装程序以及inf、sys驱动主体文件为核心,另含cat数字签名、compsig组件签名、xml安装配置与dll通用组件,覆盖驱动安装、签名校验与参数配置各环节。该资源已有1728人学习下载。读者可借此完成阵列卡驱动的安装与验证,理清各驱动文件的分工与安装入口的选择,并排查因驱动缺失造成的装机中断,减少反复寻找驱动的时间。
1. 装系统时磁盘列表一片空白,多半卡在 DL388 Gen10 的阵列卡驱动上
HP ProLiant DL388 Gen10 装机最容易被误判成硬件故障的一幕是:引导进安装程序,走到选安装位置那一步,磁盘列表空空如也。硬盘托架灯是绿的,iLO 5 里物理盘也一块不少,可安装程序就是不认。多数时候不是盘坏,而是阵列卡驱动没随安装介质一起起来——这台机器上常见的 P408i-a、P816i-a 这类 Smart Array 卡,在偏老的 Windows Server 镜像和旧内核发行版里,原厂镜像压根不带对应驱动。
这批机器在企业机房、学校实验室、小型私有云里保有量很大,二手流通也多,所以「换台机器试试」通常不成立。下面这份记录写给手里正有一台 DL388 Gen10、卡在装系统或装完认不到盘的人:先把阵列卡型号和驱动清单对清楚,再按顺序配 RAID、装驱动,最后落到能验证跑通。装坏了怎么救,坑我都写在中间几章里。
2. 驱动清单与版本对齐:先认清卡,再谈装什么
2.1 三分钟确认阵列卡型号,别在 HBA 上找 RAID
同一台 DL388 Gen10 出厂配置差别很大,有人拿到的是 P408i-a SR Gen10,有人是 16 端口的 P816i-a,还有人干脆配的是 HBA 直通卡。这三种东西的驱动和配置路径完全不同,装之前必须先确认,否则后面所有步骤都是白费。
我一般按这个顺序确认,从快到慢:
- 开机自检时看屏幕,POST 阶段会打印控制器型号和固件版本;
- 进 iLO 5 网页,System Information → Storage 里能看到控制器与物理盘;
- 开机按 F9 进 UEFI System Utilities,System Configuration 下面列出的存储控制器就是它;
- 已经装好 Linux 的机器,
lspci直接看。
# 只看存储/RAID 类设备,-nn 显示厂商与设备 ID,方便对照驱动 lspci -nn | grep -i -E 'raid|storage|scsi'lspci的输出里,Smart Array 控制器一般会带 Microsemi / Adaptec 之类的厂商标识,设备 ID 能直接对上驱动模块。这条命令的价值在于:机器已经跑起来但你不确定该装哪个驱动时,它是唯一不依赖拆机箱的判断依据。参数上-nn一定要加,只写-i看到的是人读名称,排错时对不上号。
确认结果分三类。P408i-a SR Gen10 是 2GB 缓存的 12Gb SAS 阵列卡,支持 RAID 0/1/5/6/10/50/60,是 DL388 Gen10 上最常见的一块;P816i-a SR Gen10 缓存 4GB、端口更多,驱动与 P408i-a 同源;如果显示的是 HPE HBA 系列,那它是直通卡,不建逻辑盘,SSA 里根本看不到 RAID 配置项,别在那儿耗时间。
提示:Gen10 之后官方品牌标识统一成了 HPE,但早期驱动包文件名里
hp和hpe两种前缀都存在,搜索时两个都试一遍,别只认一个。
2.2 一份够用的驱动清单:阵列卡只是其中一项
很多人以为装完阵列卡驱动就完事,结果系统起来了发现网卡不认、iLO 高级功能用不了、电源管理行为怪异。DL388 Gen10 这套平台,我通常会按下面这张表把驱动过一遍,装机阶段只强制前两项,其余装完系统再补。
| 部件 | Windows 侧装什么 | Linux 侧对应 | 装机阶段是否必须 |
|---|---|---|---|
| Smart Array P408i-a / P816i-a | HPE Smart Array SR Gen10 控制器驱动(inf + sys + cat) | 内核模块smartpqi | 必须,缺了认不到逻辑盘 |
| 板载/PCIe 网卡 | HPE 以太网适配器驱动包 | tg3、bnxt_en、i40e等 | 网络安装时是必须,本地 ISO 安装可后补 |
| 芯片组 | HPE 芯片组驱动 | 内核自带 | 建议补,影响 PCIe 与电源策略 |
| iLO 5 | HPE iLO 通道接口驱动与管理组件 | hpilo模块 | 建议补,缺了部分带外功能不可用 |
| 硬盘与背板固件 | HPE 硬盘固件组件 | 同 | 建议随整包一起升,不要单独跳版本 |
阵列卡驱动是唯一一个「装机介质里没有就彻底走不下去」的项,其余都可以等系统起来再补。所以准备安装 U 盘的时候,阵列卡驱动单独放一个目录,网卡、芯片组、iLO 放另一个目录,别混在一起,安装程序扫目录时你才知道自己在选什么。
2.3 版本怎么选:跟 OS 版本对齐,别盲追最新
驱动版本选择上最常见的错误是「哪个最新下哪个」。阵列卡驱动跟内核版本、卡固件版本是三方绑定的,跳着上很容易出现性能异常或者偶发掉盘这种玄学问题。
Linux 侧的判断依据是内核,不是发行版名字。smartpqi大约从 4.8 版本进入主线,落到发行版上:RHEL / CentOS 7.4 及以后的内核自带,7.3 及更早必须用驱动盘补;RHEL 8、9 和 Ubuntu 18.04 以后基本不用担心;SLES 从 12 SP3 起内置。查当前机器支不支持,一条命令就够:
# 看当前内核有没有 smartpqi 模块,以及它的版本号 modinfo smartpqi | head -5有输出说明模块存在,输出的version:字段就是驱动版本;报「Module not found」说明这个内核里没有,装机阶段就得走驱动盘那条路。modinfo不需要 root,但没装内核开发包的精简系统可能没有这个命令,那就用ls /lib/modules/$(uname -r)/kernel/drivers/scsi/看有没有smartpqi.ko。
Windows 侧看的是 Server 版本:2016、2019、2022 各自对应不同的驱动包,混装轻则装不上,重则装完蓝屏。我的习惯是,如果机房有 SPP(Service Pack for ProLiant)整包,就用整包里的固件加驱动组合,官方已经把配套关系调好了;只有单机维护、没有整包时,才去按型号和系统版本单独下组件包,下完先看一眼发布日期和适用系统列表,两个都对得上再动手。
3. 阵列卡先配好:用 SSA 建逻辑盘,参数别乱选
3.1 F9 进 UEFI,先确认固件版本再动配置
驱动和系统都还没装的时候,唯一能干活的地方就是 UEFI 里的配置界面。开机看到厂商 Logo 后连续按 F9,进 System Utilities → System Configuration,找到那块 Smart Array 控制器点进去,第一眼先看 Firmware Version。
这一步不是走过场。固件太老会遇到两个实际问题:一是新驱动跟老固件配合时,某些 RAID 级别下性能掉得厉害;二是 4Kn 扇区这类新特性可能根本没开放。如果固件版本明显落后,且机器还没上生产,我一般会先在 iLO 里把固件刷上去再建盘——盘建好之后再刷固件,虽然大多数情况不会丢配置,但真丢了就得重建,数据全没。
刷固件用 iLO 5 的固件更新页面上传组件包,或者从 SPP 引导执行,两种都行。刷完断电重启一次,再回来建逻辑盘。
3.2 创建逻辑盘:RAID 级别与三个真正影响性能的参数
路径是 System Configuration → HPE Smart Array P408i-a SR Gen10 → Configure → Create Logical Drive。界面会先让你勾物理盘,再选 RAID 级别,然后是几个参数。物理盘和 RAID 级别的选择没什么好纠结的:系统盘两块盘做 RAID 1,数据盘按盘数选 RAID 5 或 RAID 10,盘多且 write penalty 敏感就 RAID 10,容量优先就 RAID 5,超过 8 块盘考虑 RAID 6。
真正需要想一下的是下面三个参数,它们决定了这块盘后面跑起来是什么手感。
Strip Size(条带大小):默认 256KB。这个值决定了单次 IO 落到几块盘上。跑数据库、小文件随机读写为主的,选 64KB 更合适;跑备份归档、大文件顺序读写为主的,256KB 甚至 512KB 更划算。选错了不会报错,只会在压测时表现为 IOPS 上不去,所以建盘时就要定。
Write Cache 与加速比:P408i-a 带掉电保护缓存,正常状态下写缓存应该开着,关了等于自废武功,随机写性能会掉一大截。加速比(Accelerator Ratio)默认是 25% 读 / 75% 写,读多写少的业务调到 50/50 或 75/25 更合适。判断缓存保护是否正常,看控制器状态里电池/电容那一项是不是 OK,不 OK 就别硬开写缓存。
扇区大小:512B 还是 4Kn。这是最容易埋雷的一项。4Kn 性能更好,但老系统、老克隆工具、部分备份软件都不认。除非你确定整条链路上的系统和工具都支持 4Kn,否则老老实实选 512B。
3.3 保存配置,确认逻辑盘对安装程序可见
建完逻辑盘保存时,界面会让你确认是否修改了启动配置。这里有个细节:逻辑盘建好不等于能引导,还得把它设成 bootable,或者在 Boot Configuration 里把它的优先级排上去。我见过不止一次「盘建好了、系统装完了、重启进不去」,最后发现是启动项顺序不对。
配置保存后退出,重启。重启过程中留意 POST 阶段的控制器自检信息,正常会打印逻辑盘的盘符、RAID 级别和状态(OK)。如果这里报 degraded 或者 failed,先别急着装系统,回 SSA 里看是哪块物理盘掉了或者没插紧。
一种更省事的做法是走 F10 进 Intelligent Provisioning,里面同样能调起 Smart Storage Administrator,界面比 UEFI 里的顺手一些,配完还能直接接着装系统。两种路径配出来的结果是一样的,选自己熟的就行。
4. 安装阶段加载驱动:Windows 与 Linux 两条路
4.1 Windows:把组件包解成 inf 目录,再让安装程序去认
HPE 放出来的 Windows 驱动组件包是个自解压 exe,双击能装,但装机阶段系统还没起来,双击没用。得先在别的机器上把它解开,取出里面的 inf、sys、cat 三件套。
:: 自解压包的标准解压参数,/e 解压、/f 指定输出目录 :: 目录名别带空格和中文,安装程序的浏览框对特殊字符处理很糙 cp0xxxxx.exe /e /f:C:\drv\p408i参数说明:/e是解压模式(不执行安装),/f:后面跟目标路径。解压完检查目录内容,必须能看到同名的一组.inf、.sys、.cat文件,.cat是签名文件,缺了它安装程序会拒绝加载。有些组件包解开后是多层子目录,把含 inf 的那一层整个拷到 U 盘根目录下一个英文名文件夹里,别嵌套太深。
然后就是用 Windows Server 安装介质引导,走到「你想将 Windows 安装在哪里」这一步,点左下角的「加载驱动程序」→ 浏览 → 指向 U 盘里那个目录 → 列表里出现 HPE Smart Array 控制器 → 选中 → 下一步。加载成功后返回磁盘列表,逻辑盘就出来了。
这一步翻车的概率不低,两个原因最常见:一是 U 盘插在 USB 3.0 口上,而安装镜像本身没带 USB 3.0 驱动,浏览框里连 U 盘都看不到;二是解压出来的目录层级太深,安装程序只扫当前层。前者换到机器后面的 USB 2.0 口就能解决,后者把 inf 挪到目录第一层。
如果机器在机房、人不在现场,走 iLO 5 的 Virtual Media 挂载 ISO 更稳,还能顺便把驱动目录做成一个小的虚拟软盘镜像挂上去,省得跑一趟。
4.2 系统装完之后补齐其余驱动
系统起来之后第一件事不是装软件,是把剩下的驱动补完。这时候可以用 pnputil 批量注入,比在设备管理器里一个个点快得多。
# 把解压目录下所有 inf 一次性加入驱动仓库并尝试安装 # /subdirs 会递归子目录,适合组件包多层结构的情况 pnputil /add-driver C:\drv\*\*.inf /install /subdirs # 装完确认存储控制器认的是 HPE 的驱动,而不是「标准 SATA AHCI 控制器」 Get-PnpDevice -Class SCSIAdapter | Format-Table FriendlyName,Status -AutoSize/install表示加入仓库后立即尝试匹配设备,/subdirs递归搜索。执行完看输出里的「已成功添加驱动程序包」条数,跟目录里的 inf 数量对得上就说明没漏。Get-PnpDevice那条是验证手段,正常应该看到 HPE Smart Array 字样,如果显示的是微软自带的通用控制器,说明驱动没匹配上,得回设备管理器手动指定。
网卡驱动同理,装机时如果是本地 ISO 安装,网卡驱动可以这时候补。补完再装 iLO 通道接口驱动和管理组件,装完 iLO 网页里的部分高级功能(比如带内代理、部分传感器读数)才会正常。
4.3 Linux:把 smartpqi 塞进 initramfs 的两条路
Linux 侧的问题本质是:安装程序引导时用的是安装介质里的内核和 initramfs,如果那个 initramfs 里没有smartpqi,它在扫描存储设备时就看不到阵列卡后面的盘。
先判断要不要动手。用安装介质引导到第一个界面,切到 shell(一般是 Ctrl+Alt+F2 或引导参数加rd.break),执行:
# 确认安装环境的内核版本和模块情况 uname -r modinfo smartpqi 2>&1 | head -3有输出说明自带,直接装就行,不用折腾驱动盘。报错就得往下走。
已经装好系统、但换了卡或者升了内核导致起不来的场景,处理方式是重打包 initramfs。这条路上我踩过的坑是直接dracut -f完没验证,重启还是进不去,所以下面这几步我每次都走全:
# 先备份原 initramfs,这是后悔药,丢了就只能救援模式重来 cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak # 写一条持久化配置,避免下次内核更新后驱动又丢了 echo 'add_drivers+=" smartpqi "' > /etc/dracut.conf.d/99-smartpqi.conf # 强制重建当前内核的 initramfs dracut -f --add-drivers "smartpqi" /boot/initramfs-$(uname -r).img $(uname -r) # 验证新镜像里确实带上了模块,不看这一步等于没做 lsinitrd /boot/initramfs-$(uname -r).img | grep -i smartpqi--add-drivers是本次重建临时加,/etc/dracut.conf.d/下那个 conf 是持久化,两者都要有:只加临时参数,下次内核升级生成的 initramfs 又会缺驱动,机器重启就进不去,这种「升级内核后起不来」的事故在机房里相当常见。lsinitrd那条验证不能省,输出为空就说明打包没生效,多半是模块文件本身不在/lib/modules/$(uname -r)/下。
4.4 安装介质阶段:driver disk 的用法
系统还没装、安装程序就认不到盘的情况,走 driver disk。思路是把驱动打成 rpm,放在 U 盘或者 HTTP 服务上,引导时通过内核参数告诉安装程序去哪拿。
RHEL 系的做法是在引导菜单按 Tab 编辑引导参数,追加:
# inst.dd 让安装程序进入驱动盘加载流程 # 后面跟设备路径,/dev/sdb1 是放驱动 rpm 的 U 盘分区,按实际改 inst.dd=hd:/dev/sdb1:/进安装界面后会多出一个「添加驱动」的步骤,选择对应设备即可。U 盘分区号不确定的话,在安装程序的 shell 里用lsblk -f看,认 FAT32 或 ext4 那个分区。驱动 rpm 不要解压,整包放进去。
SLES 的路径不太一样,是在引导参数里加dud=1,然后在安装界面配置网络源或者本地源。Ubuntu 的服务器版对 Gen10 的支持相对好,18.04 以后基本不用额外折腾。
5. 避坑与排查:五个我在 DL388 Gen10 上真踩过的坑
5.1 五条踩坑记录
坑一:安装界面点「加载驱动程序」,浏览框里连 U 盘都看不到。现象是浏览窗口列表为空,或者只显示一个 X: 盘。原因是安装镜像本身没带 USB 3.0 控制器驱动,而 DL388 Gen10 前面板只有 3.0 口。解决办法是把 U 盘换到机器后面板,部分批次的后面板带 2.0 口;或者干脆用 iLO 的 Virtual Media 挂载,绕开物理 USB。这是个跟阵列卡完全无关的坑,但现象一模一样,很容易误判成阵列卡驱动没解压对。
坑二:Linux 安装程序认不到盘,但切到 shell 里modinfo smartpqi有输出。现象很迷惑,模块明明在,就是扫不出盘。原因是安装环境的 initramfs 里缺模块,modinfo查的是完整模块树,不是 initramfs 里的内容。判断方法是在 shell 里lsinitrd /boot/initramfs-$(uname -r).img | grep smartpqi(安装环境下路径可能不同,看安装介质里的 initramfs)。解决就是走 driver disk,或者换一个内核版本更新的安装镜像。
坑三:逻辑盘在 SSA 里建好了,状态也是 OK,但系统里就是看不到。两种原因。一是逻辑盘没设为 bootable,或者启动顺序里它排在别的设备后面;二是建盘时选了 4Kn 扇区,而安装的系统版本不支持。前者回 UEFI 调启动顺序,后者只能删盘重建为 512B——这个操作会清掉盘上数据,建盘之前想清楚。我现在的习惯是建完盘立刻重启一次,在 POST 信息里确认逻辑盘状态和盘符,再往下装。
坑四:Windows 装完第一次重启,蓝屏 0x7B INACCESSIBLE_BOOT_DEVICE。这多半是安装过程中加载的驱动没有被正确落到系统里,或者中途改过控制器的模式(比如从 HBA 切到 RAID,或者反过来)。0x7B 的本质是引导阶段找不到系统盘。救的办法是用 WinPE 引导,用dism /image:C:\ /add-driver /driver:D:\drv\p408i\xxx.inf离线注入驱动;更稳的做法是装之前就别改模式,一次定死。
坑五:驱动装上、系统也跑起来了,但压测时性能比预期低一截。查下来常见原因是写缓存没开(电池/电容状态不 OK 时控制器会自动禁用写缓存),或者条带大小跟业务 IO 模型不匹配,还有就是驱动版本与固件版本差得太远。前两个回 SSA 看状态和参数,第三个查 HPE 的兼容性列表,把驱动和固件拉到同一套 SPP 版本上。这类问题不会报错,只会让你觉得「这机器怎么这么慢」,最费时间。
5.2 排查顺序:从底层往上,别一上来就重装
遇到认不到盘,我固定的排查顺序是:先看 POST 阶段控制器有没有报错,再看 SSA 里逻辑盘状态,再看安装介质里驱动在不在,最后才怀疑硬件。
# Linux 环境下确认驱动、控制器、磁盘三层是否都正常 dmesg | grep -i -E 'smartpqi|pqi' | tail -20 ssacli ctrl all show status ssacli ctrl slot=0 show config lsblk -o NAME,SIZE,TYPE,MODELdmesg那段看驱动加载有没有报错,比如固件版本不匹配、初始化超时;ssacli两条看控制器和逻辑盘状态,show config会列出逻辑盘、物理盘、缓存状态;lsblk确认块设备层是不是真的出现了。三层都过一遍,问题卡在哪一层一目了然,比反复重装系统高效得多。ssacli来自 SPP,没装的话可以先dmesg加lsblk顶着。
6. 装完怎么验证:三条命令加一次抽测,别只看「能进系统」
系统能起来只说明引导链通了,不代表存储这条链路是健康的。我的验证分三层:驱动层、设备层、性能层。
Linux 侧先看驱动有没有真正接管设备:
# 1. 驱动层:模块已加载且版本符合预期 cat /sys/module/smartpqi/version # 2. 设备层:控制器和逻辑盘都被内核识别 lsscsi -g # 3. 健康层:RAID 状态、缓存状态、物理盘在线情况 ssacli ctrl all show config detail | grep -E 'Status|Cache|Logical Drive'第一条看驱动版本,跟你预期的版本号对不上就说明装的是旧模块;lsscsi -g能列出逻辑盘对应的 SCSI 设备和 sg 节点,列不出来说明设备层没通;第三条里的Status应该是 OK,Cache Status应该是 Enabled,物理盘数量跟实际插的对得上。这三条都过,才算装完。
Windows 侧对应的是:
# 磁盘与物理盘两层都要看,别只看磁盘管理里的盘符 Get-Disk | Format-Table Number,FriendlyName,Size,PartitionStyle -AutoSize Get-PhysicalDisk | Format-Table FriendlyName,MediaType,Size,HealthStatus -AutoSizeGet-Disk看逻辑盘,Get-PhysicalDisk看物理盘的健康状态,HealthStatus是 Healthy 才算正常。如果物理盘数量少于实际插的,回 SSA 查是不是有盘掉线。
最后一层是性能抽测。不用跑长时间压测,顺序写和随机读各跑一小段就够判断有没有明显异常。顺序写能跑到接近链路带宽、随机读 IOPS 在合理区间,就说明缓存和条带参数没问题;如果顺序写只有几十 MB/s,八成是写缓存没开或者盘处于降级状态。抽测数据不用留档,但结果要跟建盘时选的参数对得上,对不上就回去查参数,别急着上业务。
三层验证走完,这台机器的存储链路才算真正装好了。从那以后我每次装 DL388 Gen10,不管多急,都会在装完系统后强制把这三层跑一遍——最早一次省了这一步,机器上线两周后才发现写缓存是关的,业务高峰期磁盘队列直接飙起来,排查了一整晚。希望这份记录能帮你少走一遍那条路。
本文还有配套的精品资源,点击获取