服务器RAID卡和HBA卡有什么区别?存储控制器选购指南

给服务器配硬盘时,配置单上常出现两种卡:RAID 卡和 HBA 卡。它们外观都像一张插在 PCIe 槽上的扩展卡,都能接一堆硬盘,价格却可能差好几倍。很多人搞不清差别,也不知道自己的场景到底该配哪种,甚至有人以为"RAID 卡更高级,闭眼买 RAID 卡就行"。

这篇文章把两种卡的区别讲清楚:它们分别是什么、关键差异在哪里(是谁来做校验计算)、RAID 卡上的缓存和掉电保护有什么用、性能和成本怎么权衡、什么场景该选哪种,以及怎么在系统里确认机器装的是哪种卡。文章给的是判断框架和量级参考,具体型号与参数以厂商规格书为准。

两种卡分别是什么

RAID 卡是一种带独立处理器的存储控制器。它上面有一颗专门的 RAID 芯片(有时还有缓存和电池/超级电容),硬盘接到卡上后,由卡自己把多块盘组织成 RAID 阵列,对操作系统呈现为一个逻辑卷。写数据时,卡负责计算奇偶校验、决定数据落在哪些盘上,还负责在盘故障时重建数据。对操作系统来说,它只看到一个"大硬盘",底层的 RAID 逻辑完全透明。

HBA 卡(Host Bus Adapter)则是一个相对"透明"的通道卡。它的主要作用是扩展主机能连接的硬盘数量、提供 SAS/SATA 接口,把硬盘原样透传给操作系统。HBA 卡通常不做 RAID 运算(部分卡支持简单的 RAID 0/1,称作 RAID-on-Chip 但一般关闭使用),也不带大缓存。操作系统看到的是每一块独立的物理盘,怎么组织由上层软件决定,比如用 mdadm 做软 RAID,或者用 ZFS 做存储池。

一句话概括:RAID 卡是"自己做决定的智能卡",HBA 卡是"只负责搬运的透明通道"。

关键差异:谁来做校验计算

两种卡最本质的区别在于校验计算放在哪里。

RAID 卡把校验计算放在卡的硬件芯片里。读写 RAID 5/6 这类带校验的阵列时,奇偶校验的生成和校验由卡上的处理器完成,不占用主机 CPU。这对 CPU 是减负,也是硬件 RAID 性能稳定的原因。代价是卡本身比较贵,而且一旦卡坏了,通常需要同型号或兼容型号的卡才能读回数据,存在一定的厂商锁定。

HBA 卡把校验计算交给软件。用 mdadm 做软 RAID 时,奇偶校验由主机 CPU 计算;用 ZFS 时,校验也由 CPU 完成。这会占用一部分 CPU 资源,但有现代多核 CPU 的情况下,开销往往可以接受。好处是硬件成本低、没有厂商锁定、数据可移植性好,换任意支持同样文件系统的机器都能读。ZFS 还额外提供数据校验、快照、压缩等能力,这是纯 RAID 卡做不到的。

对比项 RAID 卡 HBA 卡
定位 独立 RAID 处理 透传/直通
校验计算 卡上硬件完成 交给主机 CPU 或软件
对系统呈现 一个逻辑卷 每块物理盘
板载缓存 常见,带掉电保护 一般没有
CPU 占用 低 略高(取决于软件方案)
硬件成本 高 低
数据可移植性 依赖同型号卡 好,不绑定卡
典型软件 卡的固件 mdadm、ZFS、Btrfs
厂商锁定风险 有 低

RAID 卡上的缓存与掉电保护

RAID 卡上最值钱也最容易被忽视的部件是板载缓存和它的掉电保护。

缓存的作用有两个。第一,加速写操作。操作系统把写请求交给卡后,卡先写入自己的高速缓存就返回"写完成",再由固件在后台刷到硬盘。这样应用的写延迟从毫秒级的机械盘寻道,降到微秒级的缓存写入,对随机写密集的数据库提升非常明显。第二,缓存还能做读预取和聚合并发写,把零散的小写合并成大块顺序写,提升吞吐。

但缓存带来一个严重问题:如果缓存里的数据还没刷到硬盘,机器突然断电,这些数据就丢了。对数据库来说,这可能是灾难。解决方案是给缓存加掉电保护,分两种:传统的是加一块电池(BBU,Battery Backup Unit),断电后由电池维持缓存供电若干小时(视电池状态,常见几小时量级);较新的是超级电容加闪存(CacheVault 之类),断电瞬间用超级电容把缓存内容写入卡上的闪存,永久保存,恢复供电后再刷回硬盘。

这里有一个重要的使用开关:写策略。开启回写(Write Back)时,写请求先到缓存就返回,性能好,但必须有掉电保护兜底;改成写透(Write Through)时,写请求必须落盘才返回,数据最安全,但性能差很多,尤其是机械盘阵列。所以一块 RAID 卡如果没有可用的电池或超级电容,很多固件会强制或建议退回写透模式,性能优势就没了。这就引出维护要点:电池/超级电容是需要关注的耗材,电池会老化,健康状态要定期看。

HBA 卡没有这个问题,因为它不缓存写请求,数据要么直接落盘,要么由文件系统(比如 ZFS 的 ZIL)自己负责一致性。ZFS 配合独立的 SLOG 设备(日志盘)也能在保证一致性的前提下提速,思路和 RAID 卡缓存类似,但实现层面在软件。

性能、成本与适用场景

性能上,硬件 RAID 卡处理 RAID 5/6 这类带校验的阵列时,因为校验由卡完成,主机 CPU 负担小,性能比较稳定,适合对 CPU 资源敏感的场景。软 RAID 和 ZFS 在高并发、小文件随机写时对 CPU 有一定要求,但现代服务器 CPU 通常能胜任。

成本上,一块带缓存和掉电保护的主流 RAID 卡往往比一块普通 HBA 卡贵不少,具体差价因型号和缓存大小而异,这是经验判断。再加上电池/超级电容是耗材,长期还有更换成本。HBA 卡便宜、简单,配合开源软件方案能省下可观硬件费用。

适用场景可以这样区分:

硬件 RAID 卡适合传统企业 IT 环境、Windows 和多数商业数据库的推荐方案、需要把 RAID 交给成熟生态和厂商支持的场景,以及运维团队更习惯图形化管理工具的情况。它的优势是开箱即用、性能有保障、售后有厂商兜底。

HBA 卡适合自建存储、NAS、虚拟化超融合、对数据可移植性和灵活性要求高的场景,以及愿意用 ZFS 这类先进文件系统获得快照、校验、压缩能力的团队。它的优势是灵活、省钱、不锁定,代价是需要一定的运维能力。

需要特别说明的是,有些场景会混用:比如用 RAID 卡做硬件 RAID 保护系统盘,同时用 HBA 卡接数据盘跑 ZFS;或者干脆一块卡既支持 RAID 模式也支持 HBA 模式,通过固件切换。具体能不能切、怎么切,要看卡的型号和支持情况。

如何确认和操作

先看看机器上装的是什么卡。

# 列出 PCIe 设备,识别 RAID/HBA 控制器(需安装 pciutils)
sudo dnf install -y pciutils   # RHEL/CentOS/Rocky
sudo apt install -y pciutils   # Debian/Ubuntu
lspci | grep -Ei 'raid|sas|scsi|megaraid|hba'

# 查看有哪些 SCSI 主机控制器及其驱动(mpt3sas/megaraid_sas 等可区分类型)
ls /sys/class/scsi_host/ 2>/dev/null
cat /sys/class/scsi_host/host0/proc_name 2>/dev/null

# 查看系统识别到的磁盘(HBA 直通模式下能看到每块物理盘)
sudo dnf install -y lsscsi
lsscsi -s

如果装的是主流厂商的 RAID 卡,通常有配套管理工具查看阵列状态。以 Broadcom/LSI 系列常见的 storcli 为例(工具名称与路径因厂商和版本而异,请下载对应版本):

# 查看控制器信息与所有虚拟盘/物理盘状态(路径以实际为准)
sudo ./storcli64 /c0 show
sudo ./storcli64 /c0 /vall show
sudo ./storcli64 /c0 /eall /sall show

# 若使用旧的 MegaCli
sudo ./MegaCli64 -LDInfo -Lall -aALL
sudo ./MegaCli64 -PDList -aALL | grep -Ei 'slot|firmware|state'

# 通过 smartmontools 读取 RAID 卡后面的盘(RAID 模式下需要指定 -d 参数)
sudo dnf install -y smartmontools
sudo smartctl -a -d megaraid,0 /dev/sda

在 HBA 直通模式下,用 mdadm 或 ZFS 管理存储:

# 软 RAID:查看阵列状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0

# ZFS:查看存储池状态
sudo zpool status
sudo zpool list

需要提醒的是,创建或销毁阵列、格式化磁盘都是破坏性操作。清空一块盘会永久丢失上面的数据,在不确定盘上有什么内容前,务必先确认清楚,并做好备份。RAID 不是备份,它只能应对磁盘故障,不能应对误删除和勒索软件。

常见问题

Q:HBA 卡能组 RAID 吗?
HBA 卡本身不做 RAID,但可以在操作系统层用 mdadm 组软 RAID,或用 ZFS 组存储池。效果类似,但计算由 CPU 承担,数据可移植性更好。

Q:RAID 卡的电池坏了会怎样?
很多固件会自动把写策略退回写透模式,写性能大幅下降,还会报错告警。发现电池或超级电容异常要尽快更换,别放着不管。

Q:软 RAID 性能一定不如硬件 RAID 吗?
不一定。顺序读写和大块写通常差距不大,随机小写场景硬件 RAID 的缓存优势更明显。现代多核 CPU 跑软 RAID 或 ZFS 完全够用,关键看负载特征。

Q:ZFS 和硬件 RAID 能不能叠加用?
技术上可做,但一般不推荐在硬件 RAID 之上再叠 ZFS,因为 ZFS 拿不到物理盘信息,校验和自动修复能力会打折扣。用 ZFS 时优先让 HBA 卡直通物理盘。

Q:换卡后阵列读不出来了怎么办?
硬件 RAID 通常依赖同型号或兼容型号的卡,元数据格式也因厂商而异。所以阵列配置信息、卡型号要记录下来,最好保留备件。这也是 HBA + 软件方案可移植性更好的原因。

总结

  • RAID 卡自带处理器和缓存,校验计算在卡上完成,对系统呈现为一个逻辑卷;HBA 卡透传物理盘,校验交给软件。
  • RAID 卡的价值很大程度在缓存和掉电保护上,写策略、电池/超级电容健康状态必须定期关注。
  • HBA 卡更便宜、更灵活、可移植性好,适合 ZFS、mdadm、自建存储和超融合场景。
  • 选型看业务:传统企业 IT 和商业数据库偏硬件 RAID,自建存储和追求灵活性偏 HBA + 软件方案。
  • RAID 不是备份,任何组阵列、重建、换卡操作前先备份,并记录好控制器型号和阵列配置,避免卡坏后数据无法恢复。