HOOOS

PVE 玩转 Intel 核显 GVT-g 虚拟化:保姆级配置步骤与那些折腾出的血泪坑

0 17 极客运维 Proxmox VEGVT-gIntel核显直通
Apple

在 Homelab 的世界里,如何榨干一台小主机的核显性能是一门必修课。

如果你的需求是:既要 Windows 虚拟机有图形加速(不卡顿、能跑轻量 3D),又要 Linux 虚拟机(如 Jellyfin/Plex)能同时进行硬件解码。那么,Intel 的 GVT-g(Graphics Virtualization Technology - g) 技术是 10 代及以前 Intel CPU 的最佳解法。它能将一个物理核显虚拟出多个虚拟 GPU(vGPU)分给不同的虚拟机,实现“一卡多用”。

然而,网上的教程大多语焉不详,甚至很多已经过时(特别是在 PVE 8.x 时代)。这篇指南将带你一步步走完配置流程,并把那些能让你排查到深夜的“深坑”一一刨开。


一、 核心前提:你的硬件和系统支持吗?

在动手前,请花一分钟核对以下硬性限制,否则后面全是无用功。

  1. CPU 代数限制:GVT-g 仅支持 Intel Broadwell (5代) 至 Comet Lake (10代) 的核心显卡。
    • 5代以前:不支持。
    • 11代及以后 (Rocket Lake, Alder Lake, Raptor Lake等):Intel 已经彻底废弃了 GVT-g,转而采用 SR-IOV 技术。如果你是 12 代、13 代 CPU,请直接出门右转找 i915-sriov-dkms 的教程,本文不适用。
  2. PVE 系统版本警告
    • PVE 7.x (Kernel 5.15 及以下):完美支持 GVT-g。
    • PVE 8.x (Kernel 6.2 及以上)极其不推荐在此版本强行折腾 GVT-g。因为 Linux 内核在 6.2 之后已经彻底移除了 GVT-g 的上游代码。如果你强行在 PVE 8 上降级内核或者找补丁,系统稳定性会大打折扣。建议 10 代及以下 CPU 的用户,为了稳定的 GVT-g,将 PVE 维持在 7.4 版本。

二、 详细配置步骤

以下步骤以 PVE 7.4 环境、Intel 10 代 CPU (UHD 630) 为主线进行演示。

第一步:开启主板 BIOS 设置

重启电脑进入 BIOS,找到以下选项并开启:

  • VT-d (Intel Virtualization Technology for Directed I/O): 必须设置为 Enabled
  • Internal Graphics (核显/集显): 强制设置为 Enabled(不要设为 Auto,防止插了独显后核显被禁用)。
  • DVMT Pre-Allocated: 建议设为 64M 或更高。

第二步:配置 PVE 宿主机内核参数

我们需要告诉内核,启动 IOMMU 并加载 Intel 核显的 GVT 驱动。

  1. 编辑 Grub 配置文件(如果你使用的是 systemd-boot,请直接修改 /etc/kernel/cmdline):

    nano /etc/default/grub
    
  2. 找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,修改为:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_gvt=1"
    

    注意:如果你的主板不需要显卡欺骗,不需要加 pcie_acs_override,保持精简最好。

  3. 保存并更新 Grub:

    update-grub
    

第三步:添加引导所需的内核模块

系统启动时需要加载一些虚拟化相关的模块。

  1. 编辑 modules 文件:
    nano /etc/modules
    
  2. 在文件末尾添加以下四行:
    kvmgt
    vfio
    vfio_iommu_type1
    vfio_mdev
    
  3. 保存退出,然后更新 initramfs:
    update-initramfs -u -k all
    
  4. 重启 PVE 宿主机

第四步:验证 GVT-g 是否成功启用

重启后,登录 PVE 的 SSH 后台,运行以下命令:

ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/

(注:0000:00:02.0 通常是 Intel 核显的 PCI 地址。如果你的地址不同,请先用 lspci | grep VGA 确认。)

如果命令返回了类似 i915-builtin-i915_bdf_xxx 的文件夹列表,说明 GVT-g 已经成功启用!

常见的虚拟类型有:

  • i915-gvt-g_V5_4:分辨率低一些,分配显存少,适合给轻量 Linux 虚拟机。
  • i915-gvt-g_V5_8:分辨率高(可达 1080P/2K),分配显存多,适合给 Windows 桌面虚拟机。

三、 在虚拟机(VM)中挂载 vGPU

这里以配置一个 Windows 10 虚拟机为例。

  1. 创建 VM:正常创建虚拟机,机型(Machine)建议选择 q35(兼容性更好,虽然 i440fx 也能用,但 q35 对 PCIe 设备更友好)。BIOS 推荐使用 OVMF (UEFI)
  2. 添加 PCI 设备
    • 进入虚拟机的 Hardware (硬件) 选项卡,点击 Add -> PCI Device
    • 选择 0000:00:02.0 (核显)。
    • 重点:在下方勾选 MDev Type,然后在下拉菜单中选择你需要的 vGPU 类型(例如 i915-gvt-g_V5_8)。
    • 不要 勾选 All FunctionsPrimary GPUROM-Bar(初次配置时,这些勾选极易导致启动黑屏)。
  3. 显示设置
    • 虚拟机的 Display (显示) 保持默认的 Standard VGAVirtIO-GPU
    • 注意:千万不要在第一步就直接把虚拟机显示改成 None。我们需要先通过标准控制台进系统装好显卡驱动,才能切换显示输出。

四、 避坑指南:折腾中的血泪教训

配置 GVT-g 看起来简单,但稍有不慎就会卡在某个玄学环节。以下是社区里被问过无数次的典型坑:

坑 1:误把核显拉入了黑名单 (Blacklist i915)

网上很多关于“独显直通”或“核显直通(GVT-d)”的教程,会让你去 /etc/modprobe.d/ 里建立 pve-blacklist.conf 并写入 blacklist i915

  • 后果:一旦你黑名单了 i915,PVE 宿主机就无法驱动核显,自然也就无法将其切割虚拟化。
  • 解决办法:检查 /etc/modprobe.d/ 下的所有 .conf 文件,确保没有任何禁用 i915intel 显卡驱动的条目。

坑 2:Windows 虚拟机装完驱动显示“设备错误(代码 43)”

这是最经典的恶梦。

  • 可能原因 A:你的虚拟机使用了 Seabios (Legacy) 引导,而驱动程序需要 UEFI 引导。
    • 解决:重建 VM,使用 OVMF (UEFI) 引导。
  • 可能原因 B:Windows 自动推来的显卡驱动版本不对。
    • 解决:不要让 Windows Update 自动装驱动。去 Intel 官网下载对应你 CPU 代数的旧版/稳定版 DCH 驱动程序,断网安装,并使用 DDU(Display Driver Uninstaller)清理残留。

坑 3:Jellyfin/Plex 容器无法硬解

如果你把 vGPU 分配给了一个 Linux 虚拟机(比如 Ubuntu),然后在里面跑 Docker 版的 Jellyfin,发现无法硬解。

  • 原因:宿主机的 /dev/dri 设备没有正确映射到 Docker 容器内,或者权限不足。
  • 解决
    1. 在 Linux 虚拟机内确保 ls /dev/dri 能看到 renderD128
    2. Docker-compose 文件中必须加入:
      devices:
        - /dev/dri:/dev/dri
      
    3. 确保容器运行用户(通常是 root 或具有 video/render 组权限的用户)对 /dev/dri 有读写权限:chmod 777 /dev/dri/renderD128

坑 4:物理输出接口(HDMI/DP)没有画面

“我配好了 GVT-g,为什么把显示器插到小主机的 HDMI 接口上,虚拟机里没有输出?”

  • 硬伤:GVT-g 虚拟出来的 GPU 是没有物理输出通路的。物理 HDMI/DP 接口依然归宿主机所有(或者处于无信号状态)。
  • 解决办法:虚拟机内请使用 RDP (远程桌面)NoMachineMoonlight/Sunshine 或者 Parsec 等远程推流软件来获取丝滑的图形加速画面。如果你必须让物理接口输出虚拟机的画面,请使用 GVT-d (独占直通)

总结

对于 5代到10代 Intel CPU 的用户,GVT-g 是兼顾多媒体转码和轻量虚拟机图形加速的“神器”。只要严格遵守 “不黑名单驱动 -> 正确配置内核参数 -> 选用合适的 mdev 类型 -> 虚拟机 UEFI 启动 -> 官网手动装驱动” 这一套链路,它的稳定性是非常可靠的。

至于 11 代及以上的主机,就让我们在 SR-IOV 的折腾路上再见吧!

点评评价

captcha
健康