发布于

Proxmox VE 核显直通终极指南(以 Intel J4125 为例)

作者

Proxmox VE (PVE) 核显直通终极指南(以 Intel J4125 为例)

本文档旨在提供一个完整、详尽的步骤,指导您如何在 Proxmox VE (PVE) 环境下,将 Intel J4125 (或类似的 Intel 低功耗平台) 的核芯显卡(iGPU)直通给虚拟机(VM)。此操作最主要的应用场景是为 Jellyfin, Plex, Emby 等媒体服务器提供强大的硬件转码能力,从而在不消耗大量 CPU 资源的情况下流畅播放高清视频。

🎯 目标

  • 将 PVE 主机上的 Intel UHD 600 核显完整地、独占地分配给一个虚拟机。
  • 在虚拟机内部成功驱动核显,并开启 VA-API 硬件加速功能。

⚠️ 重要前提

在开始之前,请务必要求您已经完成了以下准备工作:

  1. PVE 系统已安装:您已经拥有一个正常运行的 Proxmox VE 环境。
  2. IOMMU 已开启:您已在主板 BIOS/UEFI 和 PVE 的 GRUB 引导中正确开启了 IOMMU (Intel VT-d) 功能,并通过 dmesg | grep -e DMAR -e IOMMU 命令确认开启成功。
  3. 准备一个目标虚拟机:建议创建一个全新的、使用 OVMF (UEFI) 模式的虚拟机,并安装好一个现代的 Linux 操作系统(如 Ubuntu Server 22.04 或 Debian 11/12)。
  4. 备份:任何对系统核心配置的修改都有风险。强烈建议您对重要数据和虚拟机进行备份。

步骤一:配置 PVE 主机 (Host)

这一步的目的是阻止 PVE 主机本身使用核显,并让 VFIO 驱动程序接管它,为直通做准备。所有命令都在 PVE 的 Shell(通过网页端或 SSH 登录)中执行。

1.1 修改 GRUB 启动参数

编辑 GRUB 配置文件,告诉内核不要在启动时初始化 framebuffer,这可以避免一些冲突。

nano /etc/default/grub

找到以 GRUB_CMDLINE_LINUX_DEFAULT 开头的那一行,在引号内加入 initcall_blacklist=sysfb_init。修改后应如下所示(您原有的 intel_iommu=on 应该保留):

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on initcall_blacklist=sysfb_init"

修改完成后,按 Ctrl+X,然后按 YEnter 保存退出。接着,更新 GRUB 配置使其生效:

update-grub

1.2 屏蔽主机驱动模块

创建一个新的配置文件,将核显及其音频部分的相关驱动加入黑名单,防止 PVE 加载它们。

nano /etc/modprobe.d/pve-blacklist.conf

在打开的空文件中,粘贴以下内容:

# Blacklist drivers for GPU passthrough
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

1.3 配置 VFIO 模块接管核显

我们需要告诉 VFIO 模块,当系统启动时,请立即“认领”我们的核显设备。

首先,获取核显的 Vendor ID 和 Device ID:

lspci -n -s 00:02

您会看到类似 00:02.0 0300: 8086:3185 (rev 03) 的输出。这里的 8086:3185 就是我们需要的 ID。

然后,创建 VFIO 的配置文件:

nano /etc/modprobe.d/vfio.conf

将以下内容粘贴进去,请务必将 ids 的值替换为您自己查到的 ID

options vfio-pci ids=8086:3185 disable_vga=1

1.4 确保加载必要的内核模块

编辑 /etc/modules 文件,确保 VFIO 相关的模块会在系统启动时被加载。

nano /etc/modules

确保文件中包含以下几行,如果不存在,请手动添加:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

步骤二:应用配置并重启验证

现在,所有配置文件都已修改完毕,我们需要让它们在下次启动时生效。

2.1 更新内核启动镜像并重启

这个命令至关重要,它会将我们刚才的所有模块配置应用到内核中。

update-initramfs -u -k all

命令执行完毕后,重启您的 PVE 主机:

reboot

注意:重启后,连接在 PVE 主机上的显示器将很可能不再有任何视频输出,这是正常现象,因为我们已经禁用了主机的核显驱动。请通过 SSH 或其他电脑的浏览器访问 PVE 的 Web 管理界面。

2.2 验证驱动接管情况

PVE 重启并进入系统后,通过 SSH 或网页 Shell 登录,运行以下命令来验证核显是否已被 VFIO 正确接管:

lspci -v -s 00:02

在输出内容的末尾,您必须看到以下关键信息:

...
Kernel driver in use: vfio-pci
Kernel modules: i915

如果 Kernel driver in use 显示的是 vfio-pci,那么恭喜您,PVE 主机端的配置已经圆满成功!如果显示的仍然是 i915,请返回步骤一,仔细检查所有配置文件是否正确无误,以及是否执行了 update-initramfsreboot

步骤三:将核显分配给虚拟机

现在,我们可以将这个“自由”的核显添加到您的目标虚拟机了。

  1. 在 PVE 的 Web 管理界面,找到您准备好的虚拟机,确保它处于关机状态。
  2. 选择该虚拟机,进入 “硬件” 标签页。
  3. 点击 “添加” 按钮,在菜单中选择 “PCI 设备”。
  4. 在弹出的窗口中:
    • 设备:从下拉菜单中选择 00:02.0(设备名称可能会很长,但 00:02.0 是关键标识)。
    • 主 GPU必须勾选此项。
    • ROM-Bar建议勾选此项,对核显直通兼容性有帮助。
    • PCI-Express:如果您的虚拟机(高级选项里)开启了 PCIe,可以勾选此项,否则不勾选。通常不勾选也能工作。
  5. 点击 “添加”。
  6. (可选但强烈推荐)检查虚拟机的 BIOS 设置。在 “硬件” 中找到 BIOS,确保其设置为 OVMF (UEFI)。如果不是,请修改,并确保已为该虚拟机添加了 EFI 磁盘

步骤四:在虚拟机内部配置与验证

启动您的虚拟机,现在需要在虚拟机操作系统内部安装驱动并进行最终验证。以下以 Ubuntu Server 22.04 为例。

4.1 安装驱动和工具

通过 SSH 登录到您的虚拟机,更新软件源并安装 Intel VA-API 驱动和验证工具。

sudo apt update
sudo apt install -y intel-media-va-driver-non-free vainfo

4.2 最终验证

安装完成后,运行 vainfo 命令:

vainfo

如果您的直通完全成功,屏幕上会打印出一长串支持的编解码器列表,例如:

vainfo: VA-API version: 1.14
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1
...
VAProfileH264ConstrainedBaseline    :	VAEntrypointVLD
VAProfileH264Main                   :	VAEntrypointVLD
VAProfileH264High                   :	VAEntrypointVLD
...
VAProfileHEVCMain                   :	VAEntrypointVLD
VAProfileHEVCMain10                 :	VAEntrypointVLD
...

看到类似上面的输出,就意味着您的核显已经可以在虚拟机内正常工作,硬件转码已经准备就绪!

4.3 解决权限问题(Jellyfin/Plex 必做)

硬件转码需要访问 /dev/dri 下的渲染设备。默认情况下,只有 root 用户和 render 组有权限。您需要将运行媒体服务器的用户(如 jellyfin)添加到 render 组。

  1. 查看渲染设备的用户组:

    ls -l /dev/dri
    

    您会看到类似 crw-rw---- 1 root render 226, 128 ... renderD128 的输出,确认组是 render

  2. 将用户添加到组(以 jellyfin 为例):

    sudo usermod -aG render jellyfin
    
  3. 重启您的媒体服务器服务以应用新的权限:

    sudo systemctl restart jellyfin
    

现在,您可以登录 Jellyfin 的管理后台,在 “控制台” -> “播放” 中,将硬件加速选项设置为 VAAPI,设备选择 /dev/dri/renderD128 即可。


至此,您已经成功完成了 PVE 下 J4125 的核显直通所有配置。享受硬件转码带来的流畅体验吧!