HOOOS

PVE直通核显给OpenWrt或iKuai导致黑屏死机?一文教你彻底排查与避坑

0 15 NAS运维笔记 Proxmox VE核显直通软路由
Apple

在折腾 PVE(Proxmox VE)做 AIO(All-in-One)主机的过程中,很多玩家在尝试将 Intel CPU 的核显直通给 iKuai 或 OpenWrt 等虚拟机以实现所谓的“硬件加速”时,经常会遇到PVE 宿主机直接死机、断网、虚拟机黑屏甚至无限重启的玄学问题。

遇到这种情况不用慌,这通常是由于驱动冲突、直通参数配置错误或者对虚拟机系统的硬解码支持存在误区导致的。下面我们逐一拆解,彻底解决这个痛点。


💡 避坑前言:你真的需要给路由系统直通核显吗?

在动手修引导之前,首先要明确一个非常关键的认知误区:

  1. iKuai 直通核显属于“无效折腾”:iKuai 是一个纯粹的闭源路由系统,其内核和系统组件完全没有集成 Intel GPU 的驱动。你把核显直通给它,它不仅无法用于路由加速(路由转发靠的是 CPU 和网卡,与 GPU 毫无关系),反而会因为无法正常初始化设备而导致系统崩溃。强烈建议不要尝试给 iKuai 直通任何显卡。
  2. OpenWrt 直通核显的唯一场景是 Docker:如果你在 OpenWrt 容器里部署了 Jellyfin、Plex、PCDN 或 115 网盘等需要硬件解码(转码)的服务,那么直通是有意义的。如果 OpenWrt 只做纯路由,直通核显同样没有任何收益,只会增加不稳定因素。

一、 PVE 宿主机死机/断网的根本原因

当你在 PVE 启动直通了核显的虚拟机时,宿主机瞬间死机,通常是因为宿主机和虚拟机在同时争抢同一个核显的控制权

1. 宿主机未屏蔽核显驱动

PVE 默认会加载 i915(Intel 核显驱动)来输出控制台画面。如果虚拟机启动时强行抢占该 PCI 设备,会导致内核挂起(Kernel Panic),表现为整机瞬间失联、死机。

解决方案:在 PVE 宿主机中禁用核显驱动(仅限独占直通)

注意:如果你计划使用 SR-IOV(核显虚拟化多开),请不要执行此屏蔽步骤。

通过 SSH 连接 PVE 宿主机,编辑配置文件:

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

在文件末尾添加以下内容,阻止 PVE 加载核显驱动:

blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi

保存退出后,更新内核 initramfs 并重启 PVE:

update-initramfs -u -k all
reboot

2. 缺少 IOMMU 分组支持

如果你的主板没有开启 ACS Override,核显可能与网卡或主板的其他关键 PCI 设备在同一个 IOMMU 分组里。直通核显时,PVE 会连同该分组下的网卡一起强行剥离,导致网络中断。

解决方案:开启 PCIe 拆分
编辑 /etc/default/grub(如果是 systemd-boot 引导,则编辑 /etc/kernel/cmdline):

# 找到 GRUB_CMDLINE_LINUX_DEFAULT 行,修改或添加:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"

更新 grub:

update-grub

二、 虚拟机黑屏与无法启动的排查步骤

如果宿主机没死机,但 OpenWrt 虚拟机无法启动,或者在 VNC 窗口看到“黑屏”,需要针对虚拟机配置进行优化。

1. 检查显卡(VGA)配置

在 PVE 网页端,点击你的 OpenWrt 虚拟机 -> 硬件 -> 显示

  • 错误操作:直接改为“无”(none)或直接勾选“主 GPU”。
  • 正确做法:在初期调试阶段,将显示保留为 默认(Default)标准 VGA,这样你可以通过 VNC 看到控制台输出。等 OpenWrt 内部驱动和核显直通彻底搞定后,再考虑修改显示输出。

2. PCI 设备直通参数的微调

添加 PCI 设备(核显 0000:00:02.0)时,不要盲目勾选所有选项:

  • ROM 栏(rombar)
    若核显作为非主显卡直通给 OpenWrt 用作 Docker 解码,务必取消勾选 ROM-Bar。不加载显卡 BIOS 能够极大提高非显示输出虚拟机的启动成功率。
  • 主 GPU(Primary GPU)
    不要勾选。OpenWrt 只是用它来进行后台计算,不需要它输出画面。勾选后系统会尝试通过核显输出引导画面,容易导致黑屏死机。
  • PCI-Express
    建议勾选,这能让核显工作在 PCIe 模式下,比传统的 PCI 模式兼容性更好。

三、 现代处理器的最优解:Intel GVT-g 或 SR-IOV(推荐)

如果你使用的是第 10 代及以前的 Intel 处理器,可以使用 GVT-g 将核显虚拟化出多个分身,分别给不同的虚拟机使用;如果是 11 代及以后的 CPU(如 N100、12400 等 Alder Lake 架构),则推荐使用 SR-IOV

这两种方法最大的好处是:PVE 宿主机依然可以使用核显,且虚拟机启动时绝不会导致宿主机死机。

以 12 代/N100 等 SR-IOV 部署为例:

通过在 PVE 安装 dkms 版本的 i915 驱动,可以将核显拆分为多个虚拟的 VF(Virtual Function):

  1. 在 PVE 宿主机安装编译环境并克隆 intel-i915-sriov-dkms 驱动(GitHub 开源项目)。
  2. 在 grub 中配置开启 SR-IOV 参数,例如 i915.max_vfs=7
  3. 重启后,你会在 lspci 中看到 00:02.100:02.7 的虚拟核显。
  4. 在 OpenWrt 的硬件中,直通其中一个虚拟核显(VF) 即可。

这种方式完美避开了物理直通(Passthrough)中宿主机抢占和硬件锁死的难题,是目前 AIO 玩家最稳定的选择。


四、 总结:避坑检查清单

如果你现在正在经历死机,请按照以下顺序自查:

  1. 是否把核显给了 iKuai? 如果是,请立刻在 .conf 配置文件中删掉这一行,放过它,也放过你自己。
  2. PVE 宿主机屏蔽 i915 了吗? 如果是物理直通,必须屏蔽。
  3. VM 配置文件中的 machine 类型是什么? 对于 OpenWrt,建议使用 q35,且 BIOS 建议使用 OVMF (UEFI),以获取更好的硬件兼容性。
  4. Jellyfin 等容器无法读取 /dev/dri? 在 OpenWrt 内部,请确保安装了 kmod-intel-gttkmod-i915 驱动包,否则系统空有硬件而无法调用。

点评评价

captcha
健康