ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HBA卡是什么?原理、选型与故障排查全解析

HBA卡是什么?原理、选型与故障排查全解析 我做了将近十年的服务器存储运维被人问得最多的问题之一就是HBA卡到底是什么。说实话这词在存储圈里人人都挂在嘴边但你要让一个刚入行的同事讲清楚它和RAID卡、网卡的区别十有八九会含含糊糊。更麻烦的是很多人在选型、排查故障的时候因为没搞懂这张卡的本质走了不少弯路。这篇文章我打算把HBA卡从原理到实战一次性讲透包括它究竟解决了什么问题、光纤通道HBA和SAS HBA怎么选、为什么有人把阵列卡刷成HBA卡用、以及我在生产环境里遇到的那些故障到底是怎么排查的。我不打算写成说明书式的罗列而是尽量用一名运维老手带你看设备的口吻把那些文档里不会写、但实际干活特别有用的东西都带出来。1. 从服务器怎么连存储说起一张卡为什么这么重要1.1 服务器和存储之间其实隔着两种语言很多人第一次接触服务器会觉得硬盘接上就能用无非是SATA线还是NVMe盘的区别。但一旦进入数据中心场景事情就完全不一样了。服务器要连的存储设备可能是磁盘阵列、磁带库、全闪存阵列甚至是几百米外的另一个机房的存储节点。这些设备之间的连接方式跟你电脑里插一块硬盘完全是两码事。这里要引入一个底层概念HBAHost Bus Adapter主机总线适配器。它在服务器里承担的职责翻译成大白话就是——把CPU/内存所在的PCIe总线世界翻译成存储设备听得懂的SCSI/FC协议世界。你可以这么类比CPU和内存是公司老板只会说中文PCIe总线事务磁盘阵列是海外供应商只说英文SCSI命令集或者光纤通道协议。HBA卡就是那个随身翻译负责把老板的需求准确传达给供应商再把供应商的结果翻译回来。没有这张卡CPU发出的存储指令根本出不了服务器机箱。这个翻译过程在技术上的正式名称叫协议转换。HBA卡内部有专门的处理器和固件处理SCSI命令的封装、拆分、排序同时管理着数据从PCIe总线到存储网络之间的搬移。它的核心指标不是算力多强而是每秒能处理多少IO请求、能维持多少并发队列。1.2 为什么不能用普通网卡来连存储这是我在培训新人时必问的一个问题。很多人觉得现在不都讲IP网络嘛服务器有千兆万兆网卡存储设备也支持iSCSI那HBA卡还有什么存在意义关键在于协议栈的侧重点完全不同。普通网卡是为TCP/IP协议设计的强调数据包的路由、分段、重组CPU要参与大量的协议处理。而HBA卡走的是存储专用的SCSI/FC协议强调的是块级数据的可靠传输和低延迟——它不关心数据要经过多少个路由器它只关心这块数据能不能一字不差地写到目标盘的指定扇区。拿FCFibre Channel光纤通道来说这是一种专门为存储设计的串行传输协议支持端到端的流量控制、多路径冗余、FC交换网络的自动拓扑发现。这些能力是普通以太网TCP/IP很难平替的。而且FC HBA的硬件卸载能力极强能把SCSI命令处理、数据校验、队列管理都卸载到卡上CPU占用率极低。在数据库这种高IOPS场景下这种差异是肉眼可见的。简单总结就是网卡解决的是通不通HBA卡解决的是稳不稳、快不快、专不专。生产环境的核心业务存储链路绝大多数走的是FC SAN或SAS直连靠的就是HBA卡这张专用通道证。1.3 从物理拓扑看HBA卡的角色如果你进过数据中心会发现服务器的PCIe插槽里插着一张带两个小方口SFP或者一个Mini-SAS口的卡那基本就是HBA卡。从物理拓扑上看服务器和存储之间大概是这样的链路服务器PCIe总线 - HBA卡 - 线缆光纤或SAS线 - 交换机FC SAN场景 - 存储控制器 - 磁盘HBA卡在整个链条里是最靠近服务器的那一环。它一端插在服务器的PCIe插槽上另一端通过光模块/线缆连接外部存储网络。任何一环出问题最终的症状都会落到主机看不到盘或者存储链路丢失上而HBA卡往往是第一个要查的对象。明白了这个角色定位后面讲到的选型、配置、排查才有坐标系。2. 两种主流HBA光纤通道HBA与SAS HBA别买错了我在各种IT群里见过不少因为买错HBA卡而翻车的案例。有的人要连FC SAN却买了一张SAS HBA有的人只是想把服务器直连一台JBOD盘柜结果被销售忽悠买了一张昂贵的FC HBA。所以这一节必须把两类卡讲清楚。2.1 FC HBA存储区域网络的传统贵族FC HBA也就是光纤通道主机总线适配器是SANStorage Area Network环境里的主力设备。我的第一块FC HBA是QLogic的2Gb卡当时觉得32Gb的卡已经是不可想象的速度了现在主流环境早就跑到16Gb、32Gb甚至64Gb。FC HBA的典型特征接口形态SFP光口。一个端口对应一个SFP光模块插LC光纤跳线。常见的有单口卡、双口卡双口卡意味着可以做多路径MPIO或者连接两台交换机实现冗余。工作协议Fibre Channel ProtocolFCP也就是把SCSI命令封装在FC帧里传输。驱动和工具链Linux下通常是lpfcEmulex或qla2xxxQLogic/Marvell驱动。管理工具有systool -c fc_host、fcinfo等。典型厂商QLogic现在归Marvell、Emulex现在归Broadcom、Atto。识别特征看卡上有两个SFP笼子单口卡一个同时卡的挡板上通常印着FC的速率如8Gb、16Gb、32Gb。FC HBA适合什么场景需要接到FC交换机、连接中高端磁盘阵列的场景。比如一套集中存储像NetApp、Pure Storage、EMC的阵列如果存储端提供FC端口那你主机端就必须要FC HBA。FC SAN的好处是成熟稳定、延迟低、多路径机制完善企业核心数据库和虚拟化平台用了很多年至今仍有大量存量。2.2 SAS HBA机箱内部的勤恳搬运工SAS HBA是另一种形态。它解决的是服务器到内部磁盘或者外部直连盘柜的连接问题。常见的应用场景是服务器直连一台带12块盘的JBOD扩展柜或者服务器内部插了几块SAS接口的硬盘。典型特征接口形态Mini-SAS HDSFF-8643或者老的Mini-SASSFF-8087。内部口接背板/硬盘外部口SFF-8644接外部JBOD。工作协议Serial Attached SCSISAS兼容SATA设备。驱动和工具链Linux下通常是mpt3sas、mpt2sasLSI/Broadcom或aacraid等。管理工具有sas3ircu、sas2ircu、storcli如果刷成RAID模式。典型厂商Broadcom原LSI、Microchip原Adaptec。识别特征卡上的接口是Mini-SAS HD小方口或者SFF-8087的方块口明显和FC SFP笼子长得不一样。SAS HBA最经典的型号就是LSI的9211-8i、9300-8i、9341-8i这些。它们在二手市场流通量很大很多玩NAS、DIY存储的人都会买这些卡刷成IT模式直通给系统用。为什么下面专门讲。2.3 拿到手一张卡5分钟判断它是哪类实战中判断一张卡的类型我一般按顺序做四步看接口造型SFP笼子插入光模块的小方口是FC HBAMini-SAS HD小方口或者SFF-8087方块口是SAS HBARJ45网口是网卡虽然也有iSCSI HBA长得像网卡但很少见。看挡板印刷正规厂商的卡挡板上会印速率。印着8Gb/16Gb/32Gb FC的基本是FC卡印着12Gb/s的大概率是SAS卡。看芯片丝印FC HBA的芯片往往是QLogicQLE系列或EmulexLPe系列SAS HBA的芯片往往是LSI/Broadcom的SAS2008、SAS3008、SAS3108等。插上机器看信息Linux里执行lspci -v能看到Fibre Channel字样就是FC HBA看到Serial Attached SCSI controller就是SAS HBA。这套方法我用了很多年准确率接近100%。除非你遇到那些乱七八糟的软卡、去掉了标识的OEM卡那才需要更多信息来判断。3. HBA卡与RAID卡的边界为什么有人专门刷IT模式HBA卡和RAID卡是在存储运维里最容易混淆的两个概念。甚至同一个芯片既能做成HBA卡也能做成RAID卡。这个同一颗芯片、两种身份的现象是理解很多采购和刷固件问题的基础。3.1 硬件底子相似但分工完全不同很多LSI/Broadcom的SAS控制器芯片比如SAS2008、SAS3008、SAS3108本身具备一定的RAID计算能力。厂商做了两种固件IR模式Integrated RAID集成RAID模式支持RAID 0/1/10甚至某些还支持RAID 5带有基本的RAID功能。这是很多品牌服务器板载SAS控制器默认的模式。IT模式Initiator Target直通模式不做任何RAID计算只是把底层硬盘原原本本地透传给操作系统。这就是标准的HBA模式。为什么有人专门把一张RAID卡刷成IT模式我在ZFS和Ceph环境下踩过这个坑后彻底明白了软件定义存储希望看到的是裸盘而不是RAID逻辑卷。举个例子你在ZFS里创建存储池ZFS自己管理数据冗余和校验它需要直接访问每一块物理硬盘。如果底层RAID卡先做了一层RAID 5ZFS看到的只是一块虚拟盘它就无法感知底层真实硬盘的健康状态也无法利用自身的校验机制。更糟的是RAID卡写缓存如果在断电时没有BBU电池备份单元保护可能会丢数据。所以很多人在搭建NAS或者软件定义存储时会把LSI 9211-8i、9300-8i这类卡刷成IT模式固件刷完之后在系统里看到的就是一块块独立的物理硬盘。这也是为什么这些型号的HBA卡或者说刷成IT模式的卡在DIY存储圈里如此受欢迎。3.2 一张表看懂HBA、RAID卡、硬RAID卡的区别卡类型是否处理RAID计算是否透传物理盘CPU占用典型场景HBA卡IT模式否是极低软件定义存储、FC SAN连接、JBOD直连入门RAID卡IR模式支持RAID 0/1/10部分可透传较低服务器内置系统盘做RAID 1高级RAID卡如带缓存BBU支持RAID 0/1/5/6/10等否默认虚拟化低但依赖缓存传统数据库、通用业务虚拟机场景注意这里不是说HBA卡就一定比RAID卡好。在传统业务里RAID卡自带写缓存、掉电保护对数据库这类单个逻辑卷性能要求极高的场景依然有不可替代的价值。HBA卡的优势是透明、简单、让上层软件自己管理磁盘适合现代软件定义存储架构。3.3 你该用HBA卡还是RAID卡我的建议就三条如果你跑的是传统虚拟化平台VMware、Hyper-V、Oracle、SQL Server且存储用的是内部盘或者直连盘柜老老实实用正规RAID卡开写缓存配上BBU。如果你跑的是ZFS、Ceph、某分布式存储软件或者你希望把物理盘直通给虚拟机让虚拟机自己管理用HBA卡IT模式更合适。如果你只是用一台服务器开几个虚拟机跑跑测试RAID 1/10的IR模式就够用了没必要搞太复杂。一个容易踩的坑很多入门级阵列卡默认出厂是IR模式但人误以为它是纯HBA卡直连盘柜后给每块盘都做了RAID 0结果底层硬盘坏了一块整个逻辑卷挂掉数据全没了。这种事故我群里有真实案例而且不止一次。4. 选型、安装与识别一张HBA卡从拆箱到OS认盘的全过程前面讲了原理和类型这一节给你一套可落地的操作流程。我从选型开始一步步走到系统里能看到盘。4.1 选型之前先问自己四个问题我到底要连接什么存储是FC交换机背后的集中式阵列还是本机内的SAS盘还是外部JBOD盘柜这决定了买FC HBA还是SAS HBA。带宽需求多大FC有8Gb/16Gb/32GbSAS有6Gb/12Gb每端口速率。如果只跑数据库事务日志16Gb FC双口可能都嫌少如果是备份传输可能12Gb SAS就够。服务器PCIe插槽和散热够不够很多高端HBA卡是PCIe 3.0 x8甚至PCIe 4.0 x8接口需要服务器内部有足够风道。我的建议是没搞清楚插槽规格之前别急着下单不然卡插上去识别成x1链路性能直接腰斩。驱动兼容性如何尤其是ESXi和Windows环境一定要去厂商官网查兼容性列表否则买回来发现没有驱动心里会很憋屈。4.2 硬件安装和开机设置安装HBA卡本身不复杂跟插显卡一样但有几个细节值得注意优先插在靠近CPU的PCIe x8/x16插槽上减少PCIe链路延迟。注意服务器内的气压风道。HBA卡的散热片通常不高但FC HBA的光模块工作温度很高如果卡旁边被大块RAID卡或者GPU挡住容易间歇性掉卡。生产环境我见过因为卡紧挨着GPU导致FC HBA持续过热重启最后换个插槽解决的案例。开机进BIOS/UEFI查看Option ROM是否正确加载。有些HBA卡支持从SAN启动Boot from SAN需要开启UEFI Option ROM如果只是做数据盘可以关掉以减少开机时间。对于FC HBA在BIOS里记住WWPN和WWNN。这两个是光纤通道世界的身份证后续在存储阵列和FC交换机上配置Zoning、LUN映射都要用到。4.3 Linux下怎么确认卡已经被系统识别装完卡、进入系统后我通常按以下顺序确认状态# 1. 查看PCI设备列表确认卡的类型 lspci | grep -i -E fibre|serial attached scsi # 2. 查看内核日志确认驱动加载 dmesg | grep -i -E lpfc|qla2xxx|mpt3sas # 3. 查看SCSI设备映射 lsscsi # 4. FC HBA 查看光纤通道主机信息能看到WWPN、端口速率等 systool -c fc_host -v | grep -E port_name|speed|port_state # 5. SAS HBA 查看sas控制器和硬盘链路信息 sas3ircu 0 DISPLAY # 6. 查看队列深度 cat /sys/class/scsi_host/host0/queue_depthLinux内核日志是最直观的。比如QLogic的卡会看到类似qla2xxx [0000:03:00.0] 32 Gbps FC的初始化日志LSI的SAS卡会看到mpt3sas_cm0: 32 SAS ports。看到这些信息基本可以放心驱动和固件都在正常工作。一个小提醒很多新买的HBA卡出厂固件可能不是最新版尤其是二手卡。建议先到厂商网站或驱动包里的Release Note确认驱动和固件版本配套关系再刷固件。我踩过固件太新、驱动太旧导致IO错误的情况所以现在都会把固件、驱动和BIOS Option ROM的版本整体记录下来。4.4 Windows和ESXi环境下的驱动与工具Windows Server去Broadcom/Marvell官网下载对应型号的驱动装完后在设备管理器里能看到Fibre Channel Adapter或Storage Controller。用厂商的HBA管理工具比如OneCommand Manager for Emulex、QConvergeConsole for QLogic可以看链路速率、WWN、日志事件。VMware ESXi这个尤其要小心。ESXi对硬件兼容性要求极为严格安装前一定要在VMware Compatibility Guide里搜HBA卡型号看它是否有esxi对应的驱动。如果驱动没进官方VIB强行安装会出现存储链路不稳定。常见的是lpfc和qla2xxx驱动都是内置于ESXi的但版本较旧最好按官方指引升级驱动和固件。5. 故障排查我在存储链路里踩过的坑希望你别再踩刚才讲的都是正常安装但这块内容才是实战中最值钱的部分。HBA卡本身不容易坏但围绕它的故障可太多了。我从经验里挑了最有代表性的几类基本都是生产环境真实发生过的。5.1 链路Down或速率降级光模块和光纤跳线是重灾区有一次客户报存储IO很慢我登录服务器后看FC HBA状态发现端口速率从16Gb降到了4Gb而且链路反复Up/Down。查了半天最后发现是光纤跳线转弯半径过小线缆内部受损光衰增大协商速率自动降级。FC链路在光信号质量差时两端会重新协商成更低速率来保证稳定但代价是性能骤降。排查时重点看# 查看FC端口协商速率和链路状态 systool -c fc_host -v | grep -E speed|port_state|port_type先确认链路故障只发生在这一条链路还是所有链路都不稳定。如果只有一条链路出问题优先排查光模块和光纤跳线如果所有链路都出问题排查交换机端口、存储端口再考虑是不是HBA卡自身或服务器供电问题。我的经验是手头常备几根干净的光纤跳线和万兆SFP模块排查时直接替换测试比什么命令都来得快。5.2 Zone配置错误看到盘但IO失败FC SAN环境下如果存储端已经映射了LUN但主机这边能看到盘却无法正常读写很多时候问题出在交换机Zone配置。Zoning在FC交换机上的作用是划分哪些主机端口能访问哪些存储端口。配置错误的表现很典型主机能看到LUN但是执行fdisk -l卡死或者在读盘时报IO错误有的盘能看到有的盘看不到重启主机后盘符变化或丢失。排查思路记下主机的WWPN在FC交换机上通过命令行查看该WWPN所属的Zone。检查Zone里是否同时包含了主机端口和存储端口。检查是否启用了多个Zone且相互冲突。一个常见错误是Zone里加的是物理端口而不是WWPN。物理端口一旦换线就会失效而WWPN绑定的是HBA卡自身。所以我的建议一直都是生产环境务必用WWPN做Zone。5.3 驱动、固件和BIOS Option ROM版本不匹配HBA卡是软硬一体的设备固件版本、驱动版本、甚至服务器BIOS对PCIe设备的管理策略都会影响卡的稳定性。我遇到过一次某型号SAS HBA在服务器重启后偶尔无法识别最后查明是卡固件太旧和主板UEFI的PCIe初始化有兼容性问题刷了最新固件后问题消失。建议建立一张简单的版本记录表至少记录HBA卡型号和固件版本驱动版本及来源服务器BIOS/UEFI版本主机操作系统版本含补丁级别。当排查问题是先看版本再看日志。不会一上来就怀疑硬件坏了。5.4 散热导致的掉卡这个问题在2U服务器密集部署时特别明显。HBA卡尤其是FC HBA光模块温度高卡本身也有功耗。如果服务器内的风道不畅比如某块卡正好在CPU散热器后方长期高温运行会触发设备过热保护表现为卡在系统日志里反复掉线、重新初始化。排查方法# 查询HBA卡温度不同厂商工具不同 # Emulex: lputil # QLogic: qaucli # Broadcom SAS: sas3ircu 0 DISPLAY如果发现温度长时间超过70℃甚至80℃就要考虑调整插槽位置、加强服务器散热、或者加装导风罩。有一次客户机房的服务器风扇故障整个机箱温度偏高所有SAS HBA卡都跟着掉盘排查时第一眼还真没往散热上想。5.5 队列深度和IO延迟的隐形瓶颈有些系统在重负载下出现IO延迟抖动但链路本身又不报错这时候很可能是HBA卡的队列深度不够了。一张SAS HBA卡的队列深度通常由驱动和固件共同决定。比如mpt3sas驱动的默认队列深度可能只有数百。在SSD阵列或者高并发数据库场景下如果队列被打满IO请求就会排队延迟自然飙升。查看当前队列深度cat /sys/class/scsi_host/host0/queue_depth如果需要调大可以在modprobe配置里加驱动参数以mpt3sas为例具体参数要看厂商文档。但注意调大队列深度不等于无脑调高过大的队列可能增加卡上的内存压力反而影响稳定。要根据实际IO模型调整观察延迟和CPU占用找到平衡点。6. 运维中我建议你养成的几个习惯这部分算是我长期做存储运维的一点私货。HBA卡作为存储链路中相对底层的部件平时不太引人注意但一出问题就是大事。一些好的习惯能让故障时间大幅缩短。第一每张HBA卡都要做好标签和记录。尤其是FC HBA的WWPN和WWNN直接关系到存储阵列的LUN映射和FC交换机的Zone配置。我见过有人换了一张故障卡后忘了更新WWN映射导致整个存储链路起不来。别笑生产事故往往就是这么低级。第二线缆也要打标签。光纤跳线两端都要标注清楚连接的是哪个主机端口、哪个存储端口。别小看这一步在几十台服务器、几百根光缆的机房里没有标签排查链路问题简直是在海底捞针。第三每一次升级固件或者驱动都要先在测试环境做验证。HBA卡固件升级看着简单但一旦失败卡变砖的也不是没有。我一般会先备份旧固件确保有回退方案再动手。第四定期检查卡的温度和链路协商速率。温度可以通过厂商工具查看链路协商速率如果突然降级往往意味着光模块或光纤在劣化早点发现可以提前更换避免影响业务。我是每季度做一次巡检记录每张卡的温度、链路速率、队列深度和驱动版本。最后一点不要迷信卡贵就不会出问题。再贵的FC HBA如果光模块是杂牌、光纤跳线转弯半径太小、Zoning配置错误一样会掉链子。先把基础维护做到位再谈高端选型。HBA卡这张卡的存在感确实不如CPU和内存那么强但整条存储链路里它承担的是最关键的翻译和转运工作。希望这篇文章能帮你把它吃透下次在设备选型、故障排查或者跟同事争论为什么盘不见了的时候少走一些弯路。
返回列表