type
status
date
slug
summary
tags
category
icon
password
本文记录了在 Proxmox VE (PVE) 环境下,对SAS3008 HBA卡进行PCI直通时,遇到启动错误
Firmware Fault Code: 2667h 的问题及其解决方法。问题描述
在尝试将一块LSI SAS3008 HBA卡直通给PVE虚拟机后,虚拟机在SeaBIOS自检阶段出现以下错误信息:
(错误截图如下所示)

错误信息分析:
SeaBIOS: 虚拟机所使用的BIOS类型。
Unable to load Avago Technologies MPT BIOS: 表明无法加载HBA卡的固件(MPT BIOS)。
MPT BIOS Fault 02h encountered at adapter PCI(00h,1Ch,00h): 指出在PCI地址00:1c.0的适配器上发生MPT BIOS故障。
Firmware Fault Code: 2667h: 一个具体的固件故障代码。
此错误意味着虚拟机的BIOS在初始化直通的HBA卡时,未能成功加载其Option ROM (MPT BIOS),可能导致HBA卡在虚拟机内无法正常工作。
问题排查与解决方案参考
通过查阅相关资料,在Proxmox官方论坛的一个帖子中找到了针对此问题的解决方案:
SAS3008 (e.g. LSI 9300-8i) incompatible with Proxmox?
该帖子中有用户反馈:
"I was able to successfully passthrough an LSI 9300-16i which is two SAS3008 controllers combined. Following the pci(e) passthrough guide and disabling rombar solved the issue causing the Firmware Fault Code: 2667h. All drives detect and are accessible and usable without issue."
"我成功地直通了 LSI 9300-16i,这是两个 SAS3008 控制器的组合。按照 pci(e) 直通指南并禁用 rombar,解决了导致固件故障代码的问题: 2667h. 所有硬盘都能检测、访问和使用,没有问题。"
核心解决方法是:在PCI直通配置中,为目标设备禁用Option ROM(通过设置
rombar=0)。原理说明
许多PCI(e)设备(如HBA卡、网卡)包含一个Option ROM,它是一段固件,在系统启动早期(BIOS/UEFI阶段)执行,用于硬件初始化或提供引导功能。
在PCI直通场景下,虚拟机的BIOS(如SeaBIOS)也会尝试加载并执行直通设备的Option ROM。这可能与PVE Hypervisor对硬件的虚拟化处理或虚拟机环境产生冲突,导致初始化失败。
通过在PVE的虚拟机配置文件中,为直通的PCI设备添加
rombar=0选项,可以指示PVE不要将该设备的Option ROM映射给虚拟机。这样,虚拟机的BIOS会跳过加载HBA卡的MPT BIOS,从而避免冲突。虚拟机操作系统启动后,其内核驱动(例如Linux的mpt3sas驱动)会直接与硬件通信,通常不再依赖Option ROM。解决步骤
- 确认HBA卡的PCI地址:
在PVE主机的Shell中,使用
lspci命令查找HBA卡的地址。
根据输出,LSI SAS3008控制器的地址为
01:00.0。
错误信息中提及的PCI(00h,1Ch,00h)(即00:1c.0)是一个PCI桥,HBA卡01:00.0连接在此桥之下。- 编辑虚拟机配置文件:
假设虚拟机ID为105,其配置文件位于
/etc/pve/qemu-server/105.conf。 找到配置文件中直通HBA卡的那一行(根据lspci结果,对应01:00.0的hostpci条目):
- 添加
rombar=0选项: 修改该行,在末尾添加,rombar=0:
若该行已有其他选项(如
pcie=1),则用逗号分隔添加,例如:hostpciX: XX:XX.X,pcie=1,rombar=0。- 保存并重启虚拟机: 保存配置文件,然后关闭并重启目标虚拟机。
完成上述修改后,虚拟机启动时不再出现
Firmware Fault Code: 2667h错误。进入操作系统后,HBA卡及其连接的硬盘可以被正常识别和使用。注意事项
- 前提配置: 确保已按照Proxmox官方PCI(e) Passthrough指南正确配置了IOMMU (VT-d/AMD-Vi)并加载了必要的内核模块。
- 引导限制: 禁用Option ROM后,将无法通过HBA卡的BIOS从连接到其上的硬盘来引导虚拟机内的操作系统。通常,系统盘会使用虚拟机的虚拟磁盘(如VirtIO Block设备),操作系统启动后再加载HBA驱动以访问物理硬盘。
总结
通过在Proxmox VE虚拟机配置文件的
hostpci行中为LSI SAS HBA卡添加rombar=0选项,可以有效解决因Option ROM加载冲突引起的Firmware Fault Code: 2667h启动错误。此方法为特定PCI直通问题提供了一种可行的解决方案。- 作者:shiluosl
- 链接:https://blog.shiluosl.top/article/2006c10c-bb2c-80d4-9168-fd1d10c5fc4a
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
