简介针对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 UtilitiesSystem Configuration 下面列出的存储控制器就是它已经装好 Linux 的机器lspci直接看。# 只看存储/RAID 类设备-nn 显示厂商与设备 ID方便对照驱动 lspci -nn | grep -i -E raid|storage|scsilspci的输出里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-aHPE Smart Array SR Gen10 控制器驱动inf sys cat内核模块smartpqi必须缺了认不到逻辑盘板载/PCIe 网卡HPE 以太网适配器驱动包tg3、bnxt_en、i40e等网络安装时是必须本地 ISO 安装可后补芯片组HPE 芯片组驱动内核自带建议补影响 PCIe 与电源策略iLO 5HPE 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 各自对应不同的驱动包混装轻则装不上重则装完蓝屏。我的习惯是如果机房有 SPPService 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一般是 CtrlAltF2 或引导参数加rd.break执行# 确认安装环境的内核版本和模块情况 uname -r modinfo smartpqi 21 | 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.ddhd:/dev/sdb1:/进安装界面后会多出一个「添加驱动」的步骤选择对应设备即可。U 盘分区号不确定的话在安装程序的 shell 里用lsblk -f看认 FAT32 或 ext4 那个分区。驱动 rpm 不要解压整包放进去。SLES 的路径不太一样是在引导参数里加dud1然后在安装界面配置网络源或者本地源。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 slot0 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应该是 OKCache 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不管多急都会在装完系统后强制把这三层跑一遍——最早一次省了这一步机器上线两周后才发现写缓存是关的业务高峰期磁盘队列直接飙起来排查了一整晚。希望这份记录能帮你少走一遍那条路。本文还有配套的精品资源点击获取