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
lspci | grep SATA
1
2
3
4
5
6
lspci -nnk -d 1b21:1166 
04:00.0 SATA controller [0106]: ASMedia Technology Inc.
ASM1166 Serial ATA Controller [1b21:1166] (rev 02)
Subsystem: ZyDAS Technology Corp. Device [2116:2116]
Kernel driver in use: ahci
Kernel modules: ahci

发现控制器被 ahci 驱动占用

2. 查看 IOMMU 组

确保控制器在单独的 IOMMU 组中

1
find /sys/kernel/iommu_groups/ -type l

3. 把设备绑定到 vfio-pci 驱动

1
2
# /etc/modprobe.d/vfio.conf
options vfio-pci ids=1b21:1166

4. 更新 grub

在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加:

1
amd_iommu=on iommu=pt vfio-pci.ids=1b21:1166

5. 开机时加载 VFIO 所需的核心内核模块

1
2
3
4
5
# /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

6. 禁用 ahci 驱动

这一步会导致宿主机无法识别 SATA 硬盘,慎重操作

1
2
# /etc/modprobe.d/blacklist-ahci.conf
blacklist ahci

7. 重启

1
2
3
update-grub
update-initramfs -u
reboot

8. 验证

1
lsblk

确认硬盘无法被宿主机识别

方法二:直通硬盘

首先确保宿主机能识别硬盘,然后直接把硬盘直通给虚拟机。

1. 查看硬盘设备

1
ls -l /dev/disk/by-id/ | grep "ata"

2. 给虚拟机添加硬盘

ata-XXXXXXXXXX-XXXXXX_XXXXXXXX 是上一步拿到的 id

1
2
3
4
5
6
7
8
root@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


PVE ASM1166 直通
https://term-inator.github.io/2025/09/10/asm1166-passthrough/
作者
Sicong Chen
发布于
2025年9月10日
更新于
2025年9月21日
许可协议