- 发布于
Proxmox VE 核显直通终极指南(以 Intel J4125 为例)
- 作者

- 姓名
- 全能波
- GitHub
- @weicracker
Proxmox VE (PVE) 核显直通终极指南(以 Intel J4125 为例)
本文档旨在提供一个完整、详尽的步骤,指导您如何在 Proxmox VE (PVE) 环境下,将 Intel J4125 (或类似的 Intel 低功耗平台) 的核芯显卡(iGPU)直通给虚拟机(VM)。此操作最主要的应用场景是为 Jellyfin, Plex, Emby 等媒体服务器提供强大的硬件转码能力,从而在不消耗大量 CPU 资源的情况下流畅播放高清视频。
🎯 目标
- 将 PVE 主机上的 Intel UHD 600 核显完整地、独占地分配给一个虚拟机。
- 在虚拟机内部成功驱动核显,并开启 VA-API 硬件加速功能。
⚠️ 重要前提
在开始之前,请务必要求您已经完成了以下准备工作:
- PVE 系统已安装:您已经拥有一个正常运行的 Proxmox VE 环境。
- IOMMU 已开启:您已在主板 BIOS/UEFI 和 PVE 的 GRUB 引导中正确开启了 IOMMU (Intel VT-d) 功能,并通过
dmesg | grep -e DMAR -e IOMMU命令确认开启成功。 - 准备一个目标虚拟机:建议创建一个全新的、使用 OVMF (UEFI) 模式的虚拟机,并安装好一个现代的 Linux 操作系统(如 Ubuntu Server 22.04 或 Debian 11/12)。
- 备份:任何对系统核心配置的修改都有风险。强烈建议您对重要数据和虚拟机进行备份。
步骤一:配置 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,然后按 Y 和 Enter 保存退出。接着,更新 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-initramfs 和 reboot。
步骤三:将核显分配给虚拟机
现在,我们可以将这个“自由”的核显添加到您的目标虚拟机了。
- 在 PVE 的 Web 管理界面,找到您准备好的虚拟机,确保它处于关机状态。
- 选择该虚拟机,进入 “硬件” 标签页。
- 点击 “添加” 按钮,在菜单中选择 “PCI 设备”。
- 在弹出的窗口中:
- 设备:从下拉菜单中选择
00:02.0(设备名称可能会很长,但00:02.0是关键标识)。 - 主 GPU:必须勾选此项。
- ROM-Bar:建议勾选此项,对核显直通兼容性有帮助。
- PCI-Express:如果您的虚拟机(高级选项里)开启了 PCIe,可以勾选此项,否则不勾选。通常不勾选也能工作。
- 设备:从下拉菜单中选择
- 点击 “添加”。
- (可选但强烈推荐)检查虚拟机的 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 组。
查看渲染设备的用户组:
ls -l /dev/dri您会看到类似
crw-rw---- 1 root render 226, 128 ... renderD128的输出,确认组是render。将用户添加到组(以
jellyfin为例):sudo usermod -aG render jellyfin重启您的媒体服务器服务以应用新的权限:
sudo systemctl restart jellyfin
现在,您可以登录 Jellyfin 的管理后台,在 “控制台” -> “播放” 中,将硬件加速选项设置为 VAAPI,设备选择 /dev/dri/renderD128 即可。
至此,您已经成功完成了 PVE 下 J4125 的核显直通所有配置。享受硬件转码带来的流畅体验吧!