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平台
- CPU虚拟化:
Intel VT-x开启 - IOMMU直通核心开关:
Intel VT-d开启 - PCIe相关:
SR-IOV可选开启;有ACS重定向选项则开启 - 关闭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
必须包含模块:vfio、vfio_iommu_type1、vfio_pci、vfio_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关机)
- 进入虚拟机155「硬件」页面,确认状态为已停止(stopped)
- 点击「新增」→「PCI设备」,弹出配置窗口
- 配置项设置:
- 单选框:选择「映射的设备」
- 设备下拉:选中
01:00.0 Broadcom / LSI SAS2308 - 勾选:所有功能、ROM-Bar、PCI-Express
- 取消勾选:主GPU
- 供应商/设备ID全部保持「从设备」默认
- 勾选右下角「高级」,点击新增完成配置
网页下拉空白解决方案
- 使用浏览器无痕/隐私窗口登录PVE,清除页面缓存
- 确认虚拟机完全关机,暂停/运行状态下拉不会加载设备
- 原错误排查命令
qm device-list无此指令,废弃;改用正确API命令查看节点可直通设备,确认内核识别:
bash
pvesh get /nodes/homelab/hardware/pci
五、HBA卡前置关键设置(必须操作,否则虚拟机看不到硬盘)
服务器开机自检时,出现LSI提示快速按下 Ctrl+R 进入HBA卡固件:
- 删除所有已创建的硬件RAID阵列
- 将控制器模式从 IR(硬件RAID)切换为IT(JBOD直通模式)
- IR模式:宿主机/虚拟机只能识别RAID盘,无法单独管理单块硬盘
- IT模式:直通标准模式,虚拟机直接识别每一块物理硬盘
六、虚拟机内验证直通成功
Windows/FNAS系统
- 进入设备管理器 → 存储控制器
- 出现
LSI SAS2308控制器,无黄色故障感叹号 - 磁盘管理中可识别所有HBA挂载的物理硬盘
Linux虚拟机
bash
lspci | grep LSI
输出 01:00.0 Serial Attached SCSI controller 即直通正常。
七、常见故障排错清单
1. 网页PCI下拉框空白
- 虚拟机未完全关机,处于运行/暂停状态
- 浏览器前端缓存,切换无痕窗口重试
- VFIO模块缺失,核对
/etc/modules文件并重启宿主机 - 内核未成功绑定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设备」
- IOMMU分组存在共享设备(本案例无此问题)
- BIOS VT-d/IOMMU未开启,或GRUB参数未生效
- 宿主机仍占用HBA卡,重新校验
lspci -k输出
3. 虚拟机识别HBA,但看不到硬盘
- 添加PCI设备时未勾选
ROM-Bar - HBA卡在IR RAID模式,未切换IT直通模式
- FNAS系统未安装LSI SAS2308对应驱动
4. 重启后HBA又被mpt3sas驱动占用
- 黑名单文件
/etc/modprobe.d/blacklist-lsi.conf内容错误 - 未执行
update-initramfs -u更新启动镜像 - 内核参数写错,核对
/etc/default/grub并重新update-grub