在折腾 PVE(Proxmox VE)做 AIO(All-in-One)主机的过程中,很多玩家在尝试将 Intel CPU 的核显直通给 iKuai 或 OpenWrt 等虚拟机以实现所谓的“硬件加速”时,经常会遇到PVE 宿主机直接死机、断网、虚拟机黑屏甚至无限重启的玄学问题。
遇到这种情况不用慌,这通常是由于驱动冲突、直通参数配置错误或者对虚拟机系统的硬解码支持存在误区导致的。下面我们逐一拆解,彻底解决这个痛点。
💡 避坑前言:你真的需要给路由系统直通核显吗?
在动手修引导之前,首先要明确一个非常关键的认知误区:
- iKuai 直通核显属于“无效折腾”:iKuai 是一个纯粹的闭源路由系统,其内核和系统组件完全没有集成 Intel GPU 的驱动。你把核显直通给它,它不仅无法用于路由加速(路由转发靠的是 CPU 和网卡,与 GPU 毫无关系),反而会因为无法正常初始化设备而导致系统崩溃。强烈建议不要尝试给 iKuai 直通任何显卡。
- 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):
- 在 PVE 宿主机安装编译环境并克隆 intel-i915-sriov-dkms 驱动(GitHub 开源项目)。
- 在 grub 中配置开启 SR-IOV 参数,例如
i915.max_vfs=7。 - 重启后,你会在
lspci中看到00:02.1到00:02.7的虚拟核显。 - 在 OpenWrt 的硬件中,直通其中一个虚拟核显(VF) 即可。
这种方式完美避开了物理直通(Passthrough)中宿主机抢占和硬件锁死的难题,是目前 AIO 玩家最稳定的选择。
四、 总结:避坑检查清单
如果你现在正在经历死机,请按照以下顺序自查:
- 是否把核显给了 iKuai? 如果是,请立刻在
.conf配置文件中删掉这一行,放过它,也放过你自己。 - PVE 宿主机屏蔽 i915 了吗? 如果是物理直通,必须屏蔽。
- VM 配置文件中的 machine 类型是什么? 对于 OpenWrt,建议使用
q35,且 BIOS 建议使用OVMF (UEFI),以获取更好的硬件兼容性。 - Jellyfin 等容器无法读取 /dev/dri? 在 OpenWrt 内部,请确保安装了
kmod-intel-gtt和kmod-i915驱动包,否则系统空有硬件而无法调用。