Lazy loaded image
技术分享
PVE直通SAS3008报错解决办法
字数 1248阅读时长 4 分钟
2025-5-27
2025-5-27
type
status
date
slug
summary
tags
category
icon
password
本文记录了在 Proxmox VE (PVE) 环境下,对SAS3008 HBA卡进行PCI直通时,遇到启动错误 Firmware Fault Code: 2667h 的问题及其解决方法。

问题描述

在尝试将一块LSI SAS3008 HBA卡直通给PVE虚拟机后,虚拟机在SeaBIOS自检阶段出现以下错误信息:
(错误截图如下所示)
notion image
错误信息分析:
  • 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。

解决步骤

  1. 确认HBA卡的PCI地址: 在PVE主机的Shell中,使用lspci命令查找HBA卡的地址。
    1. 根据输出,LSI SAS3008控制器的地址为 01:00.0。 错误信息中提及的PCI(00h,1Ch,00h)(即00:1c.0)是一个PCI桥,HBA卡01:00.0连接在此桥之下。
  1. 编辑虚拟机配置文件: 假设虚拟机ID为105,其配置文件位于 /etc/pve/qemu-server/105.conf。 找到配置文件中直通HBA卡的那一行(根据lspci结果,对应01:00.0hostpci条目):
    1. 添加rombar=0选项: 修改该行,在末尾添加 ,rombar=0
      1. 若该行已有其他选项(如pcie=1),则用逗号分隔添加,例如:hostpciX: XX:XX.X,pcie=1,rombar=0
    1. 保存并重启虚拟机: 保存配置文件,然后关闭并重启目标虚拟机。
    完成上述修改后,虚拟机启动时不再出现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直通问题提供了一种可行的解决方案。

    上一篇
    EMPTY-ARTICLE
    下一篇
    加锁文章 - 密码123456