核心结论速览
必须先在BIOS 开启 VT-d/AMD-Vi+VMX/SVM,关闭安全启动。
PVE 需启用IOMMU、加载VFIO模块、屏蔽Nouveau并绑定 P4 至 VFIO。
飞牛虚拟机必须选q35 机型 + OVMF BIOS,添加 PCI 设备时设pcie=1。
验证分主机端(IOMMU / 绑定)、虚拟机端(驱动 / 识别)、功能端(硬解 / CUDA)三步。
一、前置条件与环境确认
表格
二、BIOS 关键设置(必做,否则直通失败)
重启主机,按Del/F2/F10进入 BIOS(不同主板快捷键不同),依次设置以下选项:
表格
设置完成后保存并重启,进入 PVE 系统。
三、PVE 主机核心配置(开启 IOMMU 与 VFIO)
3.1 启用 IOMMU(区分 GRUB 与 systemd-boot)
情况 A:PVE 使用 GRUB 引导(主流)
编辑 GRUB 配置文件:
bash
运行
nano /etc/default/grub修改
GRUB_CMDLINE_LINUX_DEFAULT,根据 CPU 类型添加参数:Intel CPU:
ini
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream video=efifb:off"AMD CPU:
ini
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream video=efifb:off"
保存退出(
Ctrl+O→ 回车 →Ctrl+X),更新 GRUB:bash
运行
update-grub
情况 B:PVE 使用 systemd-boot(UEFI 纯净安装)
编辑内核命令行文件:
bash
运行
nano /etc/kernel/cmdline写入以下内容(按 CPU 类型替换
intel_iommu=on):ini
quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream video=efifb:off更新 systemd-boot:
bash
运行
proxmox-boot-tool refresh
3.2 加载 VFIO 内核模块
编辑模块配置文件:
bash
运行
nano /etc/modules写入以下内容(固定,无需修改):
ini
vfio vfio_iommu_type1 vfio_pci vfio_virqfd保存退出,生成模块初始化文件:
bash
运行
update-initramfs -u -k all
3.3 屏蔽 Nouveau 开源驱动(NVIDIA 显卡必做)
创建屏蔽配置:
bash
运行
nano /etc/modprobe.d/pve-blacklist.conf写入:
ini
blacklist nouveau options nouveau modeset=0保存退出,再次更新初始化文件:
bash
运行
update-initramfs -u -k all
3.4 重启 PVE 并验证 IOMMU
重启主机:
bash
运行
reboot重启后执行以下命令,验证 IOMMU 是否开启:
bash
运行
dmesg | grep -E "IOMMU|DMAR"✅ 成功标志:出现
DMAR: IOMMU enabled或AMD-Vi: IOMMU initialized。
四、识别并绑定特斯拉 P4 至 VFIO 驱动
4.1 查找 P4 的 PCI 地址与设备 ID
列出所有 PCI 设备,筛选 NVIDIA 显卡:
bash
运行
lspci -nn | grep NVIDIA示例输出(关键信息):
plaintext
01:00.0 3D controller [0302]: NVIDIA Corporation GP104GL [Tesla P4] [10de:1cb3] (rev a1) 01:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)PCI 地址:
01:00.0(显卡核心)、01:00.1(音频,可选直通)设备 ID:
10de:1cb3(核心)、10de:10f0(音频)
检查 IOMMU 分组(确保显卡单独在一个组,避免与其他设备共享):
bash
运行
find /sys/kernel/iommu_groups/ -type l | grep 01:00✅ 理想状态:
01:00.0和01:00.1在同一组,且无其他设备。
4.2 绑定 P4 至 VFIO 驱动
编辑 VFIO 设备绑定配置:
bash
运行
nano /etc/modprobe.d/vfio.conf写入设备 ID(替换为你的实际 ID):
ini
options vfio-pci ids=10de:1cb3,10de:10f0保存退出,更新初始化文件并重启:
bash
运行
update-initramfs -u -k all && reboot
4.3 验证绑定结果
重启后执行:
bash
运行
lspci -vnn -s 01:00.0
✅ 成功标志:Kernel driver in use: vfio-pci(而非nvidia)。
五、飞牛虚拟机(fnOS)创建与直通配置
5.1 创建飞牛虚拟机(基础配置)
登录 PVE 网页端(
https://PVE_IP:8006),点击创建虚拟机。按以下步骤配置(关键项标红):
表格
点击完成,暂不启动虚拟机。
5.2 添加特斯拉 P4 直通(核心步骤)
选中刚创建的飞牛虚拟机,点击硬件 → 添加 → PCI 设备。
按以下配置:
设备:选择
01:00.0(Tesla P4 核心)PCIe:勾选✅(必须,启用 PCIe 直通)
所有功能:勾选✅(自动包含音频设备
01:00.1,可选)ROM-BAR:勾选✅(部分显卡需此选项)
主 GPU:取消勾选(P4 无视频输出,无需设为主 GPU)
点击添加,完成硬件配置。
5.3 优化虚拟机配置文件(可选,解决兼容性问题)
查看虚拟机 ID(如
100),编辑配置文件:bash
运行
nano /etc/pve/qemu-server/100.conf找到
hostpci0行,确保参数如下(替换为你的 PCI 地址):ini
hostpci0: 0000:01:00.0,pcie=1,rombar=1,multifunction=1 hostpci1: 0000:01:00.1,pcie=1,rombar=1保存退出,网页端刷新配置。
六、飞牛虚拟机内安装 NVIDIA 驱动
6.1 启动飞牛虚拟机并安装系统
启动虚拟机,按提示完成飞牛 OS 的常规安装(参考飞牛官方教程)。
安装完成后,确保虚拟机联网(ping
baidu.com测试)。
6.2 安装特斯拉 P4 专用驱动(数据中心版)
特斯拉 P4 为数据中心显卡,需安装NVIDIA 数据中心驱动(而非桌面版),推荐版本:535.183.01(稳定兼容 fnOS)。
飞牛 OS 终端执行,安装依赖:
bash
运行
apt update && apt install -y gcc make linux-headers-$(uname -r)下载驱动(替换为最新数据中心版地址):
bash
运行
wget https://us.download.nvidia.com/tesla/535.183.01/NVIDIA-Linux-x86_64-535.183.01.run赋予执行权限并安装:
bash
运行
chmod +x NVIDIA-Linux-x86_64-535.183.01.run ./NVIDIA-Linux-x86_64-535.183.01.run --ui=none --disable-nouveau --dkms --no-cc-version-check -s安装过程中按提示确认,完成后重启虚拟机:
bash
运行
reboot
七、全链路验证方法(确保直通成功)
7.1 主机端验证(PVE)
检查显卡仍绑定 VFIO:
bash
运行
lspci -vnn -s 01:00.0 | grep "vfio-pci"检查虚拟机进程是否占用显卡:
bash
运行
ps -ef | grep qemu | grep hostpci
7.2 虚拟机端验证(飞牛 OS)
查看显卡识别情况:
bash
运行
lspci | grep NVIDIA✅ 输出应包含
Tesla P4。验证驱动加载与 GPU 状态(核心命令):
bash
运行
nvidia-smi✅ 成功标志:显示特斯拉 P4 的型号、显存、温度、驱动版本,状态为
Running。查看驱动版本与模块:
bash
运行
modinfo nvidia | grep version lsmod | grep nvidia
7.3 功能验证(硬解 / CUDA,可选)
验证 1:视频硬解(飞牛 OS 常用场景)
安装 ffmpeg:
bash
运行
apt install -y ffmpeg测试硬解(需准备一个视频文件):
bash
运行
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output_hw.mp4✅ 无报错且速度远快于软解,说明硬解正常。
验证 2:CUDA 计算(开发 / AI 场景)
安装 CUDA 工具包(适配驱动版本):
bash
运行
wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sh cuda_12.2.2_535.104.05_linux.run --toolkit --silent运行 CUDA 样例:
bash
运行
nvcc --version /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery✅ 输出
Result = PASS,说明 CUDA 功能正常。
八、常见问题与排查方案
表格
总结
本教程覆盖了从 BIOS 到虚拟机功能验证的全流程,核心是开启 IOMMU、正确绑定 VFIO、飞牛虚拟机选 q35+PCIe 直通。特斯拉 P4 直通后,可在飞牛 OS 中实现高性能视频硬解、AI 推理或 Java 程序的 CUDA 加速,完全满足开发与 NAS 的混合使用场景。