简介:面向服务器与存储运维人员、IT管理员及需要处理LSI 3008 RAID控制器的技术学习者,这份驱动包用于解决操作系统识别、配置与维护该系列阵列卡时的兼容性问题。内容围绕SAS接口RAID控制器的驱动安装与设备管理展开,适用于Windows等系统环境下的磁盘阵列部署、性能调优与故障恢复等场景。
资源包共97个文件,约21.1MB,以sys、inf、cat等驱动核心文件为主,辅以dll、xml、man、msu及exe等安装与说明组件,rar压缩后结构较完整,便于按系统版本和用途查找对应驱动。目前已有2176人浏览学习,说明其在同类阵列卡驱动资料中具有一定参考价值。
读者可从中获得与LSI 3008配套的驱动文件集合,用于系统识别RAID卡、完成阵列初始化和日常监控;包内说明性文档与配置辅助文件也有助于理解驱动与固件、管理工具之间的配合关系,为排查设备识别异常、更新驱动版本和维持存储系统稳定运行提供素材。
1. 一块 3008 卡插上不认盘,问题多半不在卡本身
老机器上拆下来的 LSI3008 插到新主板,BIOS 启动项里空空如也,进系统lspci明明能扫到设备,lsblk却一块盘都不给。这时候绝大多数人的第一反应是卡坏了、要退货。我见过太多类似的现场,最后查下来卡是好的,问题出在模式、固件、线材或者引导 OpROM 上。这份 RAID 阵列卡 驱动资源包要解决的正是这一段从「认不到」到「跑得稳」的路:它把 SAS3008 在 Linux、Windows、ESXi、FreeBSD 下的驱动文件、固件包、命令行管理工具(sas3flash、sas3ircu、storcli)以及刷写用的 UEFI Shell 环境打包在一起,省掉你在若干个互不相关的地方东拼西凑的功夫。适合三类人:手里有拆机 3008 想组软 RAID 或直通的;给一批机器做批量部署要统一固件和驱动的;以及已经装好但时不时掉盘、想弄清到底哪一层出问题的。
2. IR 还是 IT:SAS3008 的模式判定与四类系统的驱动选型
买卡、捡卡、拆机卡,最容易踩的第一个坑就是拿到手不知道它是 IR 还是 IT。这两种固件在硬件上完全一样,烧进去的固件不同,对外暴露设备的方式就不同,后面选驱动、组阵列、能不能直通虚拟机,全被这一个属性决定。资源包里两套固件都带着,但你得先搞清楚手上这块现在是什么状态。
2.1 IR 与 IT 在驱动层的真实差别
IT 模式(Initiator Target,也常被叫作 HBA 直通模式)下,卡的固件基本不插手,八条 PHY 上挂的每块盘原样透给操作系统,系统看到的是八个独立的 SCSI 块设备。软 RAID 由 mdadm、ZFS、Storage Spaces 这类软件层自己管,SMART 能透传,盘的序列号、温度、坏道计数都看得到,VMware 和 KVM 也能把整块卡直通给虚拟机。
IR 模式(Integrated RAID)下,卡上固件会做一层很薄的 RAID,只支持 0、1、1E、10 这四级,没有缓存颗粒也没有掉电保护电池。系统看到的是卷(Virtual Drive)加上少量未参与的物理盘,SMART 要带-d megaraid,N这类参数绕一层才能读。好处是不依赖操作系统就能从卷启动,做双盘镜像装系统很方便。
Linux 下两种模式其实共用同一个mpt3sas模块,这也是很多人误以为「模式跟驱动无关」的来源。但固件不同,暴露的 SCSI 设备数量不同,SMART 透传路径不同,热插拔行为也不同。Windows 侧虽然都走 StorPort,但安装包里 inf 绑定的设备 ID 是分开的,装错了直接蓝屏或者设备管理器里挂个黄叹号。所以判定模式不是可选项,是第一步。
2.2 三步判定手上这块卡跑在哪种模式
最硬的一条判据是 PCI class code。SAS3008 在 IR 固件下会把自己报成 RAID bus controller(class 0104),在 IT 固件下报成 Serial Attached SCSI controller(class 0107)。这个信息不用拆机箱、不用进 BIOS,系统跑着就能看。
# 1) 先定位设备,记下 BDF 地址(形如 0000:3b:00.0) lspci -nn | grep -i -E "sas|raid|scsi" # 2) 看 class code:0104 是 RAID 控制器,0107 是 SAS 控制器 # 再看 Kernel driver in use 一行确认有没有被 mpt3sas 接管 lspci -k -s 0000:3b:00.0 # 3) 从驱动日志里读出固件版本和模式线索 dmesg | grep -i mpt3sas | head -30lspci -nn输出里方括号中最后那对 ID 是 class code,前一对是厂商和设备 ID,具体数值以卡上标签和资源包 readme 为准,不同 OEM 版本会有差异。lspci -k的Kernel driver in use一行如果显示mpt3sas,说明驱动已经认领,剩下的就是设备没暴露出来。dmesg里会打印类似ioc0: SAS3008, FWVersion: xx.xx.xx.xx的行,这行固件版本号后面刷写时要用到,先记下来。
第二条路是开机自检时的 Option ROM 界面。看到 Ctrl-C 提示进入配置菜单,如果菜单里有 Virtual Drive 管理、能创建 RAID 卷,那是 IR;如果菜单里只有 Adapter Properties、Device Properties,看不到卷管理入口,那基本是 IT。第三条是资源包里的sas3ircu 0 display,输出会直接标注控制器型号和当前 IOC 固件类型,这个最省事,但前提是盘已经能进到系统里。
提示:class code 是经验判据不是绝对真理,个别 OEM 定制固件会改报。真拿不准就以
sas3ircu list的输出为准。
2.3 按系统选驱动:一张对照表
模式判完,驱动就好选了。资源包里的文件按系统分目录放,下面这张表是我实际用下来最省事的对应关系。
| 操作系统 | IT 模式 | IR 模式 | 获取方式 | 备注 |
|---|---|---|---|---|
| Linux(内核 3.10 以上) | mpt3sas | mpt3sas | 内核自带,无需编译 | 老内核需用包内 dkms 源码重编 |
| Linux(内核 2.6 老版本) | mpt3sas | mpt3sas | 包内源码 + dkms | 建议直接换系统,别硬撑 |
| Windows Server 2012R2 及以上 | StorPort 驱动 | StorPort 驱动 | 包内 inf,设备管理器手动指定 | 装系统时需 F6 加载 |
| ESXi 6.7 / 7.x | lsi_msgpt3 | lsi_msgpt3 | 系统自带或离线包补装 | 部分版本需额外组件 |
| FreeBSD 11 以上 | mpr | mpr | 内核自带 | 无需额外操作 |
| UEFI Shell | 不需要 | 不需要 | 包内 sas3flash.efi | 刷固件时用 |
Linux 这一行最容易被误解。很多人一看mpt3sas是内核自带的,就以为不用管驱动了,结果装完发现盘认不全。实际上内核自带的版本有新旧之分,新卡配老内核经常出现只认到第一个 PHY 的情况,dmesg里会有一串SAS: phy相关的告警。资源包里带源码的意义就在这里:不是让你非得编译,是给你一条退路。判断方法是modinfo mpt3sas | grep version,把版本号跟资源包 readme 里的适配表对一下,落在区间内就别折腾,落在区间外再考虑 dkms 编译,编译命令在包内文档里写得很直白。
Windows 那一行要提醒一句:装系统阶段如果没有软驱位,得把驱动塞进安装介质。资源包里的 inf 支持在安装界面用「加载驱动程序」直接指定目录,比早年用 F6 加软驱省事得多,但目录里要选对子文件夹,IT 和 IR 是分开的,选错了安装程序会提示「找不到兼容的驱动程序」,这个提示很多人误以为是介质坏了。
3. Linux 侧把盘认出来:mpt3sas 的加载、参数与 sas3ircu 验证
Linux 是这类卡跑得最多的环境,也是最容易「看着正常实际有病」的环境。盘认出来了不代表链路健康,链路健康了不代表参数合适。这一段按加载、参数、验证三步走,每步都有可以照着敲的东西。
3.1 先判断内核自带还是必须外部编译
别急着编译,先花三十秒确认现状。三条命令足够定位。
# 看模块是否存在、版本号、来源路径 modinfo mpt3sas | grep -E "^(filename|version|vermagic)" # 看卡有没有被认领,输出里应该有 Kernel driver in use: mpt3sas lspci -k | grep -A3 -i "serial attached scsi" # 看驱动初始化日志:IOC 数量、固件版本、PHY 数量、有没有报错 dmesg | grep -i -E "mpt3sas|sas:" | head -40modinfo的filename如果指向/lib/modules/$(uname -r)/kernel/drivers/scsi/mpt3sas/,说明是内核原生模块,先用着;如果modinfo直接报「Module not found」,才需要走编译。dmesg那段是重点,正常初始化会打印ioc0: SAS3008: Capabilities、mpt3sas0: 8 Phys之类的行,如果只打印了ioc0却看不到 PHY 数量,或者后面跟着mpt3sas0: doorbell handshake failed,那是固件层面的问题,编译驱动解决不了,得回去刷固件。
编译这一条我不太推荐新手走。资源包里的 dkms 源码适合老内核补新驱动,编译前确认kernel-devel、gcc、dkms三个包都在,然后dkms add加dkms install,两条命令。有个血泪经验:编译前把/lib/modules/$(uname -r)/kernel/drivers/scsi/mpt3sas/mpt3sas.ko备份一份,万一新模块加载失败进不了系统,还能用 Live 环境把老模块塞回去当后悔药。
3.2 写一份能长期生效的 modprobe 配置
mpt3sas有一批模块参数,默认值在大多数场景够用,但在老背板、扩展器串联、机械盘堆叠的场景下需要收敛一下。参数写在/etc/modprobe.d/下才会在每次开机生效,临时modprobe -r再加载只对当次有效。
# 写入持久化参数配置 sudo tee /etc/modprobe.d/mpt3sas.conf >/dev/null <<'EOF' # 单次 IO 上限,2048 扇区 = 1MB, # 老背板/扩展器链路误码率高时收敛到 1MB 可显著降低重传 options mpt3sas max_sectors=2048 # 队列深度,-1 表示按控制器能力自动协商, # 机械盘堆叠时手动设为 1024 更稳 options mpt3sas max_queue_depth=1024 # IO 超时(秒),默认 30 偏短,大容量慢盘建议放宽 options mpt3sas scsi_io_timeout=60 # 关掉冗余日志,避免 dmesg 被刷爆导致真正的问题被淹没 options mpt3sas logging_level=0 EOF # 重建 initramfs,否则下次开机新参数不生效 sudo dracut -f # Debian/Ubuntu 用 sudo update-initramfs -u -k allmax_sectors这个参数是调优里最容易调过头的。有人为了追顺序读带宽把它拉到 32767(16MB),结果机械盘阵列反而掉速,原因是大 IO 在扩展器上排队把小 IO 堵死了。2048 是个比较保守的起点,SSD 阵列可以往上试到 4096,机械盘阵列建议就停在 2048。max_queue_depth设成 1024 是我在八盘机械盘 + 单扩展器的组合上试出来的平衡点,纯 SSD 直连可以留 -1 让固件协商。scsi_io_timeout放宽到 60 秒是给慢盘留余量,尤其叠瓦盘写入放大严重的时候,30 秒超时会导致内核把盘踢下线再重扫,日志里表现为周期性reset,很容易被误判成卡的问题。
参数写完不用重启验证,cat /sys/module/mpt3sas/parameters/*能逐项看当前生效值,这个目录里的文件名就是参数名,改完重启后对着核一遍最放心。
3.3 用 sas3ircu 交叉验证:控制器、背板、单盘链路速率
lsblk只能告诉你「有盘」,sas3ircu能告诉你「盘挂在哪、链路多快、有没有降速」。这一步是我每次上架必做的,因为降速盘在系统层完全看不出来,只是性能莫名差一截。
# 赋予执行权限(包内是预编译二进制) chmod +x sas3ircu # 列出控制器,记下控制器编号,单卡一般是 0 sudo ./sas3ircu list # 核心命令:控制器、PHY、每块盘的链路速率和 SAS 地址 sudo ./sas3ircu 0 display # 只看盘的状态(Optimal / Failed / Missing) sudo ./sas3ircu 0 status # 看 IOC 自身健康状态和温度(部分固件版本支持) sudo ./sas3ircu 0 iocstatus # 看背板 / 扩展器信息,判断是直连还是过扩展器 sudo ./sas3ircu 0 enclosuredisplay的输出信息量最大。每块盘会有三行内容,第一行是 SAS 地址和盘型号,第二行是SAS或SATA标识、链路速率(12.0 Gbps、6.0 Gbps、3.0 Gbps)、设备状态。链路速率这一项是重点:SAS3008 是 12Gb/s 控制器,但盘、线材、背板三者取最低值,一块 12G 的盘协商到 6G,九成是线材或背板的问题,不是盘坏了。
enclosure那一条要单独说。直连背板和过扩展器的背板,enclosure输出完全不同。如果看到Enclosure#后面挂着SES设备,说明中间有扩展器,这种拓扑下max_sectors必须收敛,热插拔行为也更依赖扩展器固件版本。见过不少「盘能认但插拔后不刷新」的现场,最后都是扩展器固件太老,跟 3008 本身没关系。
验证完这三步,Linux 侧的「能用」就算达标了。剩下的「用得稳」在最后一章展开。
4. 固件、OpROM 与驱动三方对齐:sas3flash 刷写和刷挂后的救法
驱动装对了还是掉盘,多半是版本没对齐。SAS3008 上有三个独立的东西需要管:控制器固件(Firmware)、引导用的 OpROM(也叫 BIOS,UEFI 下是.rom文件)、以及操作系统侧的驱动。三个里有两个版本跨度太大,就会出现各种玄学症状。
4.1 三个版本号必须对齐
固件管的是卡自己的 PHY 训练、热插拔、错误恢复;OpROM 管的是开机阶段能不能从这个卡上的设备引导;驱动管的是操作系统怎么跟卡说话。三者的接口约定在不同版本间会变,最典型的两种翻车:
一是新固件配老驱动。刷了新版固件之后,dmesg里开始周期性出现mpt3sas: firmware fault或者sas: phy reset,盘时有时无。原因是新固件改了下发 SCSI 命令的时序,老内核的 mpt3sas 按旧时序应答,握手失败。
二是老固件配新驱动。现象更隐蔽:盘能认、能读写,但长时间跑顺序写会出现某一两块盘掉线,重扫又回来了。这种「玄学掉盘」查到最后基本都是固件太老。资源包里带的固件版本和驱动版本是配套测过的,别自己东拼西凑。
| 部件 | 版本获取方式 | 出现频率最高的坑 |
|---|---|---|
| 控制器固件 | sas3flash -c 0 -list查看 | 刷了 OEM 定制版,与通用驱动不兼容 |
| OpROM(BIOS) | 开机界面或sas3flash -c 0 -list | 刷 IT 固件时忘了同步刷对应 OpROM |
| 驱动模块 | modinfo mpt3sas | 内核自带版本过老,只认到部分 PHY |
| 管理工具 | sas3ircu/storcli自带版本号 | 老版本工具读不出新固件的字段 |
4.2 UEFI Shell 下的刷写流程
刷写必须在 UEFI Shell 里做,不要在操作系统里刷,更不要在虚拟机里刷。资源包里的sas3flash.efi是 UEFI 版本,配一个 FAT32 格式的 U 盘,把sas3flash.efi、固件 bin、OpROM 三个文件放根目录。
# 进入 UEFI Shell 后,先切到 U 盘所在文件系统 # 依次试 fs0: fs1: fs2:,用 ls 确认能看到 sas3flash.efi fs0: ls # 第一步永远是先看,确认卡被识别、当前版本号是多少 sas3flash.efi -list sas3flash.efi -c 0 -list # 第二步:备份当前固件(文件名自己定,存 U 盘根目录) # 具体子命令以 sas3flash.efi -h 的输出为准, # 不同版本语法略有差异,先看帮助再动手 sas3flash.efi -h # 第三步:正式刷写,-f 指定固件,-b 指定 OpROM,-bios 表示同时更新 sas3flash.efi -c 0 -f SAS3008_IT_FW.bin -b mptsas3.rom -bios # 第四步:冷启动(完全断电再上电),不要用 reboot 热重启-c 0里的 0 是控制器编号,多卡环境要先用-list确认编号,刷错卡是灾难。-f后面跟的是控制器固件,-b后面跟的是 OpROM,-bios这个开关的意思是「连 BIOS/OpROM 一起写」,少了它只更新固件不更新引导部分,IT 固件配旧 IR 的 OpROM,开机自检会卡在初始化阶段过不去。刷写过程大约一到两分钟,屏幕上会滚动百分比,这时候绝对不能断电。
刷完必须冷启动,也就是关机、拔电源线、等十秒、再上电。热重启时卡上的部分状态没有清空,会出现「刷了但版本号没变」的假象,我在这上面浪费过一个下午。
注意:从 IR 刷成 IT 会清掉卡上已有的 RAID 配置。刷之前用
sas3ircu 0 display把现有卷和盘的关系截图存下来,别指望刷完还能找回来。
4.3 刷挂了怎么救:回退与备份
刷写中途断电、或者刷了不匹配的 OEM 固件,卡可能直接不进自检。这时候别慌,SAS3008 的引导区相对独立,只要能进 UEFI Shell 并且sas3flash.efi -list还能列出控制器,就还有救。
第一种情况:能进 Shell、能列卡,但版本号显示乱码或者为空。重新执行一遍完整刷写,加上擦除步骤。擦除命令在sas3flash里是带-o -e的组合,具体参数以帮助输出为准,这一步会把整个 Flash 清空,之后必须立刻跟上完整刷写,中间不能停。
第二种情况:Shell 里-list完全看不到卡。先换 PCIe 插槽,再换机器试。有些主板的 UEFI 在检测到异常 OpROM 时会跳过该设备的初始化,换到没有「快速启动」的槽位有时能救回来。还不行就用另一块同型号卡做参照,把已知good的固件刷进去。
第三种情况:能列卡但刷写过程中报Flash region is write protected。这是卡的写保护跳线或者 OEM 锁定,资源包里有一份说明文档讲怎么处理,但说实话这种卡我一般直接放弃,折腾成本高于卡本身的残值。
备份这件事,正确的做法不是在卡上备份,是在刷之前把资源包里对应版本的固件包留一份在本地,出问题直接回刷。刷完确认能正常认盘、能引导,再考虑要不要清理旧文件。
5. 避坑与排查:五个真实翻车现场的现象、成因和解法
这一章按故障域分组,每组里的条目都按「现象 → 原因 → 解决」写,对号入座即可。
5.1 链路与背板类
现象一:系统能认卡,lsblk一块盘都没有,sas3ircu 0 display里 PHY 全是No Device。
原因通常有三个层次。最外层是盘没插到底或者背板供电没接,SAS 接口比 SATA 紧,插的时候要有「咔」一声。中间层是背板的 SATA/SAS 兼容跳线,很多背板对 SATA 盘需要单独配置,默认只走 SAS。最内层是扩展器没上电或者固件没起来,sas3ircu 0 enclosure会显示扩展器状态异常。
解决顺序是从外到内:先换一块已知good的盘插同一个槽位,排除盘的问题;再看背板跳线和供电;最后用sas3ircu 0 enclosure确认扩展器是否在线。三步走完还不行,把盘直接接到卡的 breakout 线上绕开背板,能认就说明是背板或扩展器的问题。
现象二:盘能认能读写,但dmesg里周期性出现I/O error, dev sdb, sector xxxxx,重试后恢复。
原因是链路误码。sas3ircu 0 display里那块盘的链路速率大概率显示6.0 Gbps而其他盘是12.0 Gbps,或者虽然都是 12G 但 CRC 错误计数在涨。线材是最常见的元凶,尤其是机箱内走线被压过、折过的地方;其次是背板连接器的氧化;再其次是盘本身的老化。
解决:先把这块盘换到另一个槽位,如果速率恢复正常,是背板接口问题;如果还是降速,换线;换线还不行,就是盘的问题。临时缓解可以在卡的配置里强制把该 PHY 速率降到 6G,虽然损失带宽但能换稳定,机械盘阵列基本感觉不出来。
5.2 固件与引导类
现象三:Windows 装完重启蓝屏,报INACCESSIBLE_BOOT_DEVICE或0x0000007B。
原因不是驱动装错了,是引导阶段的 OpROM 和运行阶段的驱动版本不匹配。安装程序用的是 inf 里的驱动,重启后系统走的是卡上 OpROM 提供的 INT13 接口去读引导扇区,两者对卷的寻址方式不一致就会蓝屏。
解决:进 UEFI 设置,把该 PCIe 槽位的 OpROM 加载策略改成 UEFI Only 或者 Legacy Only 二选一,别用 Auto。如果必须用 Legacy,确认 OpROM 版本和驱动包是配套的。另一个办法是干脆改成 UEFI 引导 + GPT 分区,绕开 INT13 这一层,这是我现在默认的做法。
现象四:刷完固件后卡烫得离谱,负载一上来就掉盘,重启能恢复。
原因是刷了不匹配的 OEM 变体固件。同一颗 SAS3008,不同 OEM 在板型、供电、散热设计上有差异,固件里的功耗管理和温度阈值参数是定制过的。通用固件刷到定制板上,温度阈值设错,芯片还没到安全温度就触发限速,表现出来就是「负载一高就掉盘」。
解决:从卡的标签上读出 OEM 型号,回资源包里找对应的定制固件重刷。找不到就退回刷之前的版本。判断是不是这个原因,看sas3ircu 0 iocstatus里的温度读数和dmesg里有没有温度相关的告警,两边对得上基本就坐实了。
5.3 系统与驱动类
现象五:ESXi 装完看不到任何盘,lspci里卡在,存储适配器列表里没有。
原因是 ESXi 的镜像里没有包含对应版本的驱动组件。ESXi 的驱动是打包在镜像里的,某些小版本更新会调整组件基线,卡太老或者太新都可能不在默认列表里。资源包里的驱动组件需要用离线包方式合进镜像,或者装完之后用命令行补装再重启。
解决:先用esxcli storage core adapter list确认适配器有没有被枚举,没有就说明驱动没加载。补装驱动后必须重启,ESXi 不支持热加载存储驱动。补装完还不行,检查卡的 OpROM 是不是处于 Legacy 模式,ESXi 的 UEFI 引导对 Legacy OpROM 支持有限,改成 UEFI 模式通常能解决。
这一章五条覆盖了八成现场。剩下两成属于硬件本身故障,不在驱动和配置能解决的范围内,该换卡就换卡,别在软件层反复试。
6. 上线前最后一公里:温度、队列深度与一台自检脚本
前面都在讲「能不能认」,这里讲「认了之后会不会半夜挂」。我吃过最贵的一次亏是一批机器跑了两周,其中一台在业务高峰掉了一块盘,查下来是卡的温度在密闭风道里长期贴着限速线,负载一上来就触发保护。从那以后我每次上架都要跑一遍下面这套自检流程,二十分钟,省掉后面一堆半夜电话。
温度是第一优先。SAS3008 满载十几瓦,芯片面积小,没有风道直吹的话散热片温度很容易上去。链路上限速的阈值各版本不一,但经验上芯片结温到 100℃ 上下就开始出问题。检查方式分两层:硬件层看机箱风道,卡所在的槽位有没有前进风、散热片是不是被线材挡住;软件层看 hwmon。
# 新内核会把卡的温度通过 hwmon 暴露出来,逐个看 name 找到 mpt3sas 对应的 for h in /sys/class/hwmon/hwmon*; do echo -n "$h: "; cat $h/name; done # 找到之后读温度(单位毫摄氏度) cat /sys/class/hwmon/hwmon3/temp1_input读不到也别强求,很多固件版本不上报温度。那就用土办法:满载跑十分钟,用手背靠近散热片(别碰),烫到不能停手就是有问题。加一个 4cm 风扇对着吹,成本几块钱,效果立竿见影,这是我见过性价比最高的改造。
第二是队列和调度参数。默认的cfq/mq-deadline对 SSD 阵列是负担,none更适合闪存。这些参数重启会重置,得写进 udev 规则或者开机脚本。
# 临时生效,用来验证效果 for d in /sys/block/sd*; do # 跳过非物理盘(比如 loop、dm 设备) [ -f "$d/queue/scheduler" ] || continue echo none > "$d/queue/scheduler" echo 1024 > "$d/queue/nr_requests" echo 4096 > "$d/queue/read_ahead_kb" donenr_requests调到 1024 是给高并发场景留余量,机械盘阵列反而建议降回 128,让 IO 调度器有更多合并机会。read_ahead_kb设 4096 对顺序读友好,随机读为主的场景设 512 更合适。这三个值没有万能解,取决于盘的类型,改完用fio跑一遍对比。
# 顺序读基线,验证链路带宽有没有跑满 fio --name=seqread --rw=read --bs=1M --numjobs=4 --iodepth=32 \ --size=4G --filename=/dev/sdb --direct=1 --runtime=60 --time_based # 4K 随机写,验证 IOPS 和有没有掉盘 fio --name=randwrite --rw=randwrite --bs=4k --numjobs=8 --iodepth=64 \ --size=2G --filename=/dev/sdb --direct=1 --runtime=60 --time_based跑的时候另开一个终端dmesg -w,任何reset、I/O error、firmware fault都会实时刷出来。跑完再看一遍sas3ircu 0 status,确认所有盘还是 Optimal。这一套下来能筛掉绝大部分「平时没事、压力一大就掉」的隐患。
SMART 透传也是必查项。IT 模式下直接smartctl -a -d sat /dev/sdb就能读,IR 模式下要加-d megaraid,N,N 是盘在卷里的位置。读不到 SMART 意味着这块盘的健康状态是黑匣子,坏道涨到多少你都不知道,批量部署的时候一定要把这一项作为准入条件。
批量环境再往前一步是把这套流程脚本化,接进 PXE 装机后的 post-install 环节:自动读卡型号、比对固件版本、跑三分钟 fio、把结果和 SMART 上报到自己的资产表。我现在的习惯是任何一块新卡、新盘进机房,先跑这套自检,通过了才允许上业务。看着慢,其实是把后面的故障排查成本提前付掉了。希望这套流程能帮到你,少走几次半夜爬起来看dmesg的弯路。
本文还有配套的精品资源,点击获取