PVE 9.2 安装飞牛 fnOS 及 Intel 核显 SR-IOV 虚拟化直通硬解指南(14900K 实战)
距离上一版已经过去一年多,PVE、内核和 i915 驱动都更新了不少。原文里固定内核 6.5、手动挑选驱动版本的做法已经过时:PVE 9.2 默认内核就是 7.0,最新的 i915-sriov-dkms 已经原生支持 6.17~7.1,基本不需要再降级内核。
这次按我现在的机器重写一遍:i9-14900K + 32G DDR5。核显 UHD 770 最多可以拆出 7 个 VF(虚拟功能),比上一版的 3 个宽裕不少。
本文环境:Proxmox VE 9.2(Debian 13 Trixie,内核 7.0)、i915-sriov-dkms 2026.08.12.1、fnOS 最新版。
一、PVE 安装 fnOS 稳定性如何?
我的方案是 PVE 作为 All-In-One 主机系统,fnOS 跑在虚拟机里当 NAS:
-
SATA 控制器整块直通给 fnOS,硬盘管理接近物理机体验;
-
核显通过 SR-IOV 拆成多个 VF,其中一个直通给 fnOS 负责硬解;
-
PVE 主系统仍保留核显输出,可以接显示器排障。
目前配置:
| 硬件 | 型号 |
|---|---|
| CPU | i9-14900K(UHD 770) |
| 内存 | 32G DDR5 |
| 系统盘 | NVMe SSD(PVE 系统 + 虚拟机系统盘) |
| 数据盘 | SATA 机械硬盘(整块控制器直通给 fnOS) |
稳定性方面,核显 SR-IOV 属于社区驱动,重启、内核升级后偶尔需要检查一下 VF 是否正常;日常使用没有明显问题。
二、PVE 开启 Intel 核显虚拟化
核显虚拟化的核心是「核显复用」:一个核显可以同时给多个虚拟机使用,主系统还能保留显示输出。AMD 核显只能直通、不能虚拟化,所以这里讨论的基本都是 Intel 核显。UHD 770(12 代以后)支持 SR-IOV,最多 7 个 VF。
1. 主板 BIOS 设置
-
开启 VT-d / Intel Virtualization Technology;
-
开启 Above 4G Decoding;
-
如果有 SR-IOV Support 选项,一并开启;
-
需要主系统核显输出时,保持 iGPU / 核显为启用状态(Multi-Monitor 开启),主显示设备按实际情况选择。
2. 确认 PVE 版本与内核
pveversion
uname -r
PVE 9.2 默认内核为 7.0,满足最新驱动 6.17~7.1 的要求,无需降级。
3. 安装编译环境与驱动
apt update
apt install -y build-essential dkms proxmox-default-kernel proxmox-default-headers
从 i915-sriov-dkms releases 下载最新 deb(本文写作时为 2026.08.12.1):
wget -O /tmp/i915-sriov-dkms_2026.08.12.1_amd64.deb \
"https://github.com/strongtz/i915-sriov-dkms/releases/download/2026.08.12.1/i915-sriov-dkms_2026.08.12.1_amd64.deb"
dpkg -i /tmp/i915-sriov-dkms_2026.08.12.1_amd64.deb
安装后可以用 dkms status 确认模块已经为当前内核编译成功。
4. 配置内核参数
编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中加入(已有其他参数就追加):
quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe
说明:
-
i915.max_vfs=7:14900K 的 UHD 770 最多拆 7 个 VF; -
module_blacklist=xe:PVE 9 内核自带新的 xe 驱动,UHD 770 走 i915 + SR-IOV,需要屏蔽 xe,避免抢占设备; -
intel_iommu=on在 PVE 8.2 之后默认开启,这里显式写上更稳妥。
更新引导并重建 initramfs:
update-grub
update-initramfs -u
5. 固定 VF 数量
安装 sysfsutils,把拆分数量写进配置,重启后自动生效:
apt install -y sysfsutils
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf
reboot
6. 验证是否生效
重启后检查:
lspci -nnk -s 00:02
ls /dev/dri
dmesg | grep -i i915
正常的话能看到 00:02.0(PF,主核显)以及 00:02.1 ~ 00:02.7(VF)。
注意:只能把 VF(00:02.1~00:02.7)直通给虚拟机,千万不要直通 PF(00:02.0),否则会导致所有 VF 一起崩溃。
7. 可选:屏蔽宿主机上的 VF(推荐)
VF 留在宿主机上没有实际用途,反而可能被监控工具或媒体程序误用,建议用 vfio-pci 屏蔽。先查核显设备 ID:
cat /sys/devices/pci0000:00/0000:00:02.0/device
14900K 通常是 a780,以实际输出为准。然后写入 udev 规则(把 0xa780 换成你的实际 ID):
echo "vfio-pci" > /etc/modules-load.d/vfio.conf
tee /etc/udev/rules.d/99-i915-vf-vfio.rules <<'EOF'
ACTION=="add", SUBSYSTEM=="pci", KERNEL=="0000:00:02.[1-7]", ATTR{vendor}=="0x8086", ATTR{device}=="0xa780", DRIVER!="vfio-pci", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/pci/devices/$kernel/driver/unbind; echo vfio-pci > /sys/bus/pci/devices/$kernel/driver_override; modprobe vfio-pci; echo $kernel > /sys/bus/pci/drivers/vfio-pci/bind'"
EOF
update-initramfs -u
reboot
再次用 lspci -nnk -s 00:02 确认 VF 的驱动是 vfio-pci,而 PF 仍是 i915。
三、PVE 安装 fnOS
1. 准备安装镜像
去 fnOS 官网 下载最新 ISO,上传到 PVE 的 ISO 存储。
2. 新建虚拟机
主要设置:
-
操作系统:Linux,6.x / 其他 Linux;
-
BIOS:OVMF (UEFI),不要勾选预注册密钥(Pre-Enrolled Keys),否则会启用 Secure Boot,fnOS 安装器会报错;
-
机器类型:q35;
-
vIOMMU:Intel(PVE 9.2 里就是
viommu: intel,q35 才支持); -
CPU:host,核心数按需,14900K 给 4~8 核即可;
-
内存:32G 总内存建议给 fnOS 8~16G,留足给其他虚拟机;
-
硬盘:系统盘 64G(fnOS 官方建议系统分区 64G,虚拟机里也可以适当减小),数据盘另加或走 SATA 直通。
3. 直通核显 VF
虚拟机 → 硬件 → 添加 → PCI 设备:
-
选择
0000:00:02.1(任一 VF,不要选00:02.0); -
不要勾选 All Functions、Primary GPU、PCI-Express。
如果需要把整块 SATA 控制器直通给 fnOS,同样在「添加 → PCI 设备」里选择对应控制器,并勾选 All Functions。注意直通后 PVE 主系统就不能再使用这些硬盘了。
4. 虚拟显示器
保持默认显示设备(std)即可。这样在 PVE 的 noVNC 控制台里就能看到 fnOS 的安装和登录界面,不需要额外配置。核显 VF 只负责硬解,不用于显示输出。
5. 安装 fnOS
启动虚拟机,选择 Graphical Install,按提示选择系统盘、设置系统分区与 Swap、配置网络,完成后重启即可。首次通过浏览器访问设置管理员账号,并创建存储空间。
四、验证核显硬解
1. 虚拟机内确认核显
SSH 登录 fnOS:
ls /dev/dri
正常应能看到类似:
-
card0/renderD128:PVE 虚拟显示器; -
card1/renderD129:直通的核显 VF。
2. 开启硬解
安装飞牛影视或 Jellyfin,在转码设置里选择 Intel 核显(QSV)开启硬件转码。播放高码率视频时 CPU 占用明显下降,说明硬解已经生效。
3. 查看核显占用
fnOS 自带的系统监控不显示核显占用,可以在 PVE 宿主机上查看:
apt install -y intel-gpu-tools
intel_gpu_top -d sriov
命令会列出各个 VF 的使用率,播放视频时能看到对应的引擎占用。
五、常见问题
1. 虚拟机里没有 card1 / 找不到核显
先确认宿主机 VF 状态(lspci -nnk -s 00:02),VF 的驱动应为 vfio-pci;如果 VF 没有绑定成功,检查 udev 规则里的设备 ID 是否填对。fnOS 内核较旧时也可能识别不了 VF,可以尝试在 fnOS 里安装同款 i915-sriov-dkms,或等待 fnOS 更新内核。
2. 内核升级后驱动失效
DKMS 会随内核更新自动重编译,前提是安装了对应内核的 headers(proxmox-default-headers)。如果新内核暂时没有对应驱动版本,可以用 proxmox-boot-tool kernel pin <版本> 临时固定内核,等驱动更新后再解除。
3. 开启 Secure Boot 后模块加载失败
自编译模块需要签名,简单做法是在 BIOS 里关闭 Secure Boot。
4. 虚拟机无法启动 / VF 被占用
确认没有直通 PF(00:02.0),且添加 PCI 设备时没有勾选 All Functions。宿主机上如果有程序占用了 VF,也会导致直通失败,按第 7 步屏蔽 VF 可以避免。
5. 主系统核显输出消失
BIOS 里保持 iGPU 启用,并确认主显示输出设置正确;直通的是 VF,不会影响主系统的核显输出。
小结
和上一版相比,这次最大的变化是:PVE 9.2 默认内核 7.0,最新 i915-sriov-dkms 直接支持,不用再折腾降级内核;VF 数量从 3 个提到 7 个,可以给更多虚拟机分配核显;同时补上了 xe 驱动屏蔽和 VF 屏蔽这两个容易踩坑的点。14900K 的 UHD 770 跑 SR-IOV 硬解完全够用,fnOS + Jellyfin 的组合也很稳。
如果后续 PVE 内核或驱动有大的变动,我会再回来更新这篇。