pve能够显卡直通能直通两个显卡到两台不同的win10虚拟机吗?

引言

事情是这样的,最近买了一块15寸2K便携屏,想着给它找个归宿,突然想到了家里的NAS有核显,可以把HDMI输出接过来当个办公电脑,同时游戏需求也不能落下,加上tesla P4不久正好实现串流+本地游戏自由了!

网上能搜到的核显直通教程大多是“SeaBIOS + q35 + CSM”路线:开启主板CSM兼容模式,走legacy VGA ROM点亮画面,但tesla P4直通遇到问题,要么启动失败,要么黑屏。因为要直通独显的话需要走OVMF/UEFI 才能完美识别,同时直通核显在UEFI环境下需要搭配i440fx,不能用q35,同时需要开启legacy-igd(GVT-d)

环境如下:

  • 主板/CPU:华硕Z370 + e2286m(Coffee Lake九代志强)
  • 显卡:UHD P630 + Tesla P4
  • PVE版本:8.2
  • 虚拟机系统:Windows 10 LTSC 2021

PVE宿主机准备

  1. 开启IOMMU
nano /etc/default/grub

# 修改如下内容
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"

# 刷新grub
update-grub
proxmox-boot-tool refresh
  • intel_iommu:开启Intel的IOMMU(VT-d),PCI直通的前提,开启后vfio-pci驱动能对物理设备直接的内存访问
  • iommu=pt:开启passthrough模式
  • initcall_blacklist=sysfb_init:禁用内核驱动占用核显

2. 加载VFIO模块

nano /etc/modules
# 添加以下模块
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

3. 绑定目标设备到vfio-pci

# 查看VGA和tesla P4设备
lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630] [8086:3e9b] (rev 02)

lspci -nn | grep NVIDIA
01:00.0 3D controller [0302]: NVIDIA Corporation GP104GL [Tesla P4] [10de:1bb3] (rev a1)

# 修改vfio
nano /etc/modprobe.d/vfio.conf
# 添加以下参数
options vfio-pci ids=8086:3e9b,8086:a2f0,10de:1bb3

vfio-pci:虚拟机接管设备的驱动,接管物理设备之后,宿主机原生驱动(i915、nvidia)无法访问这个设备,同时将PCI配置空间和BAR空间直接映射到QEMU地址空间中,必须在原生驱动加载前绑定好

4. 屏蔽原生驱动

nano /etc/modprobe.d/pve-blacklist.conf
# 添加以下参数
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist radeon
blacklist amdgpu
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
options vfio_iommu_type1 allow_unsafe_interrupts=1

5. 刷新配置重启

update-initramfs -u -k all 
reboot

# 重启后查看Kernel driver是否被vfio接管
lscpi -nnk
00:02.0 VGA compatible controller [0300]: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630] [8086:3e9b] (rev 02)
        DeviceName:  Onboard IGD
        Subsystem: ASUSTeK Computer Inc. CoffeeLake-H GT2 [UHD Graphics 630] [1043:8694]
        Kernel driver in use: vfio-pci
        Kernel modules: i915
01:00.0 3D controller [0302]: NVIDIA Corporation GP104GL [Tesla P4] [10de:1bb3] (rev a1)
        Subsystem: NVIDIA Corporation GP104GL [Tesla P4] [10de:11d8]
        Kernel driver in use: vfio-pci
        Kernel modules: nvidiafb, nouveau, nvidia_vgpu_vfio, nvidia

虚拟机配置

注意:主板BIOS 设置 关闭 CSM,否则和虚拟机OVMF的UEFI启动流程冲突

  1. 下载/提取核显ROM

github.com/LongQT-sea/i

选择对应的ROM下载到PVE中,核显在虚拟机中显示需要读取vBIOS,启动时进行加载

# 下载拷贝到QEMU共享目录中,重命名为igd.rom
curl -L https://github.com/LongQT-sea/intel-igpu-passthru/releases/download/v0.1/CFL_CML_GOPv9.1_igd.rom -o /usr/share/kvm/igd.rom 

2. 设置平台和CPU类型

  • machine:i440fx,legacy-igd 的硬性要求
  • bios:OVMF,使用UEFI固件引导
  • processors:host,原生性能更好
  • Display:VGA,这里暂时先不直通核显和tesla P4,因为需要安装系统

3. 直通核显和tesla P4

注意:按步骤安装完虚拟机需要开启远程桌面,后续需要安装驱动

依次添加UHD630,声卡和tesla P4对应的PCI设备,不选择Primary GPU,这样会和legacy-igd启动冲突

nano /etc/pve/qemu-server/100.conf 

添加启动参数

args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on

修改PCI设备

hostpci0: 0000:00:02.0,legacy-igd=1,romfile=intel.rom
hostpci1: 0000:00:1f.3
hostpci2: 0000:01:00.0

最后修改显示为none,重新启动!

4. 安装驱动

连接远程桌面,分别安装 Intel 官方核显驱动和 NVIDIA Tesla 驱动。

现在可以在HDMI输出的显示器看到画面了,设备管理器应该能看到两块显示设备:Intel UHD Graphics 630(核显)和 Tesla P4。

GPUZ和任务管理器也能成功识别了

后续问题

  1. 安装tesla P4会自动添加一块VGX的虚拟显示屏,且默认设置为主显示器,导致物理屏幕无法操作,需要提前安装串流软件(uu远程等),串流中设置主显示器为物理设备。
  2. 声卡一开始使用是正常的,重启之后声卡就没声音了,后续跟踪中
编辑于 2026-07-19 · 著作权归作者所有