Proxmox VE 直通 LSI SAS2308(9207-8i HBA)完整操作手册

Proxmox VE 直通 LSI SAS2308(9207-8i HBA)完整操作手册

文档适用场景

硬件:LSI SAS2308 / 9207-8i HBA卡,PCI地址 01:00.0,设备ID 1000:0087

宿主机:Proxmox VE 9.2.2

目标虚拟机:FNAS(虚拟机ID 155)

用途:硬件直通HBA,虚拟机直接接管硬盘,不经过宿主机虚拟磁盘层

一、前置BIOS设置(必须最先操作)

Intel CPU平台

  1. CPU虚拟化:Intel VT-x 开启
  2. IOMMU直通核心开关:Intel VT-d 开启
  3. PCIe相关:SR-IOV 可选开启;有 ACS 重定向选项则开启
  4. 关闭CSM兼容模式(CSM会破坏IOMMU分组,导致直通失败)
    保存BIOS并重启进入PVE系统。

二、宿主机内核开启IOMMU

1. 修改GRUB引导参数

bash 复制代码
nano /etc/default/grub

Intel CPU写入以下配置:

ini 复制代码
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"
GRUB_CMDLINE_LINUX="intel_iommu=on"
  • intel_iommu=on:开启Intel IOMMU硬件直通
  • iommu=pt:直通模式,宿主机不占用PCIe设备资源

2. 更新GRUB生效

bash 复制代码
update-grub

3. 加载VFIO直通内核模块

bash 复制代码
nano /etc/modules

追加4行VFIO依赖模块:

复制代码
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

4. 屏蔽宿主机LSI驱动,强制VFIO接管

创建黑名单配置文件

bash 复制代码
nano /etc/modprobe.d/blacklist-lsi.conf

完整内容复制:

conf 复制代码
# 屏蔽LSI原厂驱动mpt3sas,禁止宿主机占用HBA卡
blacklist mpt3sas
install mpt3sas /bin/false

# 绑定VFIO到当前HBA卡厂商设备ID 1000:0087
options vfio-pci ids=1000:0087

5. 重建内核启动镜像,使黑名单生效

bash 复制代码
update-initramfs -u

6. 重启宿主机加载全部配置

bash 复制代码
reboot

三、重启后直通环境校验(验收标准)

1. 校验IOMMU是否成功开启

bash 复制代码
dmesg | grep -i iommu

本机实际输出参考

复制代码
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-7.0.2-6-pve root=/dev/mapper/pve-root ro intel_iommu=on quiet splash intel_iommu=on iommu=pt
[    0.151082] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-7.0.2-6-pve root=/dev/mapper/pve-root ro intel_iommu=on quiet splash intel_iommu=on iommu=pt
[    0.151148] DMAR: IOMMU enabled
[    0.151224] DMAR: IOMMU enabled
[    0.437321] DMAR-IR: IOAPIC id 8 under DRHD base  0xfbffc000 IOMMU 0
[    0.437324] DMAR-IR: IOAPIC id 9 under DRHD base  0xfbffc000 IOMMU 0
[    0.725546] iommu: Default domain type: Passthrough (set via kernel command line)

正常输出关键标识:

复制代码
DMAR: IOMMU enabled
iommu: Default domain type: Passthrough (set via kernel command line)

2. 校验HBA卡已被VFIO接管(核心验收项)

bash 复制代码
lspci -k -s 01:00.0

本机实际输出参考

复制代码
01:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS2308 PCI-Express Fusion-MPT SAS-2 (rev 05)
        Subsystem: Broadcom / LSI 9207-8i SAS2.1 HBA
        Kernel driver in use: vfio-pci
        Kernel modules: mpt3sas

正确结果判定:

Kernel driver in use: vfio-pci

说明:mpt3sas仅为内核存在驱动文件,vfio-pci正在占用设备,宿主机不再接管HBA。

3. 校验VFIO模块完整加载

bash 复制代码
lsmod | grep vfio

本机实际输出参考

复制代码
vfio_pci        20480  0
vfio_pci_core   94208  1 vfio_pci
irqbypass       16384  2 vfio_pci_core,kvm
vfio_iommu_type1  53248  0
vfio            73728  4 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd        131072  1 vfio

必须包含模块:vfiovfio_iommu_type1vfio_pcivfio_virqfd

4. 校验IOMMU分组(无冲突)

bash 复制代码
shopt -s nullglob; for g in /sys/kernel/iommu_groups/*; do echo "=== IOMMU组 ${g##*/} ==="; for d in $g/devices/*; do lspci -nn -s ${d##*/}; done; done

本机实际分组输出参考

复制代码
=== IOMMU组 43 ===
01:00.0 Serial Attached SCSI controller [0107]: Broadcom / LSI SAS2308 PCI-Express Fusion-MPT SAS-2 [1000:0087] (rev 05)

本案例结果:01:00.0 独立IOMMU分组43,无其他设备共享,直通无硬件冲突。

四、两种方式给FNAS虚拟机添加PCI直通

前置状态说明

虚拟机155(fnas)状态为 stopped(完全关机),满足直通添加条件。

方式A:命令行添加(推荐,解决网页下拉空白问题)

虚拟机ID为155,执行一键添加命令:

bash 复制代码
qm set 155 --hostpci0 01:00.0,pcie=1,rombar=1,x-vga=0

参数说明

参数 作用
01:00.0 HBA卡PCI硬件地址
pcie=1 启用PCIe标准模式,HBA卡必备
rombar=1 开启设备ROM固件,虚拟机识别硬盘
x-vga=0 非显卡直通,关闭显卡直通标记

执行无报错即添加完成,刷新网页硬件页面可看到新增PCI设备条目。

方式B:网页前端添加(虚拟机必须完全stopped关机)

  1. 进入虚拟机155「硬件」页面,确认状态为已停止(stopped)
  2. 点击「新增」→「PCI设备」,弹出配置窗口
  3. 配置项设置:
    • 单选框:选择「映射的设备」
    • 设备下拉:选中 01:00.0 Broadcom / LSI SAS2308
    • 勾选:所有功能、ROM-Bar、PCI-Express
    • 取消勾选:主GPU
    • 供应商/设备ID全部保持「从设备」默认
  4. 勾选右下角「高级」,点击新增完成配置

网页下拉空白解决方案

  1. 使用浏览器无痕/隐私窗口登录PVE,清除页面缓存
  2. 确认虚拟机完全关机,暂停/运行状态下拉不会加载设备
  3. 原错误排查命令 qm device-list 无此指令,废弃;改用正确API命令查看节点可直通设备,确认内核识别:
bash 复制代码
pvesh get /nodes/homelab/hardware/pci

五、HBA卡前置关键设置(必须操作,否则虚拟机看不到硬盘)

服务器开机自检时,出现LSI提示快速按下 Ctrl+R 进入HBA卡固件:

  1. 删除所有已创建的硬件RAID阵列
  2. 将控制器模式从 IR(硬件RAID)切换为IT(JBOD直通模式)
  • IR模式:宿主机/虚拟机只能识别RAID盘,无法单独管理单块硬盘
  • IT模式:直通标准模式,虚拟机直接识别每一块物理硬盘

六、虚拟机内验证直通成功

Windows/FNAS系统

  1. 进入设备管理器 → 存储控制器
  2. 出现 LSI SAS2308 控制器,无黄色故障感叹号
  3. 磁盘管理中可识别所有HBA挂载的物理硬盘

Linux虚拟机

bash 复制代码
lspci | grep LSI

输出 01:00.0 Serial Attached SCSI controller 即直通正常。

七、常见故障排错清单

1. 网页PCI下拉框空白

  1. 虚拟机未完全关机,处于运行/暂停状态
  2. 浏览器前端缓存,切换无痕窗口重试
  3. VFIO模块缺失,核对 /etc/modules 文件并重启宿主机
  4. 内核未成功绑定VFIO,执行手动重绑定:
bash 复制代码
echo "0000:01:00.0" > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "1000 0087" > /sys/bus/pci/drivers/vfio-pci/new_id

2. 启动虚拟机报错「无法分配PCI设备」

  1. IOMMU分组存在共享设备(本案例无此问题)
  2. BIOS VT-d/IOMMU未开启,或GRUB参数未生效
  3. 宿主机仍占用HBA卡,重新校验 lspci -k 输出

3. 虚拟机识别HBA,但看不到硬盘

  1. 添加PCI设备时未勾选 ROM-Bar
  2. HBA卡在IR RAID模式,未切换IT直通模式
  3. FNAS系统未安装LSI SAS2308对应驱动

4. 重启后HBA又被mpt3sas驱动占用

  1. 黑名单文件 /etc/modprobe.d/blacklist-lsi.conf 内容错误
  2. 未执行 update-initramfs -u 更新启动镜像
  3. 内核参数写错,核对 /etc/default/grub 并重新 update-grub