PVE ASM1166 直通
本文最后更新于 2025年9月21日 下午
本文只是一个记录,所用的方法未必是最优的,即某些步骤可能没有实质作用
环境
PVE 9.0
内核版本 6.14.8-2-pve
CPU: AMD R9
背景
上周六买了点硬盘组阵列,由于主板没有足够的 SATA 接口,买了一个
ASM1166 的扩展卡,把 M.2 转成 SATA 接口。
谁料原本能直通的主板 SATA
控制器,在使用了这个扩展卡后,二者上的硬盘都无法直通了。
方法一:直通 SATA 控制器
此方法可能存在问题,比如 TrueNAS 连接控制器等问题。我用此方法直通后,每次启动 TrueNAS 时都会占满内存,大约半小时后才恢复正常。可能是反复连接控制器导致的,因为硬盘的 SMART 信息表明启动时间正常,但是命令执行时间很长。
1. 找到 SATA 控制器的 PCI 设备
1 | |
1 | |
发现控制器被 ahci 驱动占用
2. 查看 IOMMU 组
确保控制器在单独的 IOMMU 组中 1
find /sys/kernel/iommu_groups/ -type l
3. 把设备绑定到 vfio-pci 驱动
1 | |
4. 更新 grub
在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加:
1
amd_iommu=on iommu=pt vfio-pci.ids=1b21:1166
5. 开机时加载 VFIO 所需的核心内核模块
1 | |
6. 禁用 ahci 驱动
这一步会导致宿主机无法识别 SATA 硬盘,慎重操作
1 | |
7. 重启
1 | |
8. 验证
1 | |
确认硬盘无法被宿主机识别
方法二:直通硬盘
首先确保宿主机能识别硬盘,然后直接把硬盘直通给虚拟机。
1. 查看硬盘设备
1 | |
2. 给虚拟机添加硬盘
ata-XXXXXXXXXX-XXXXXX_XXXXXXXX 是上一步拿到的 id 1
2
3
4
5
6
7
8root@pve:~# qm set <vmid> -scsi1 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi2 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi3 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi4 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi5 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi6 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi7 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1
qm set <vmid> -scsi8 /dev/disk/by-id/ata-XXXXXXXXXX-XXXXXX_XXXXXXXX,cache=none,iothread=1