PVE 直通特斯拉 P4 显卡至飞牛虚拟机(fnOS)完整教程

_

核心结论速览

  • 必须先在BIOS 开启 VT-d/AMD-Vi+VMX/SVM,关闭安全启动。

  • PVE 需启用IOMMU、加载VFIO模块、屏蔽Nouveau并绑定 P4 至 VFIO。

  • 飞牛虚拟机必须选q35 机型 + OVMF BIOS,添加 PCI 设备时设pcie=1

  • 验证分主机端(IOMMU / 绑定)、虚拟机端(驱动 / 识别)、功能端(硬解 / CUDA)三步。


一、前置条件与环境确认

表格

项目

要求

说明

PVE 版本

8.4+(推荐 8.4-9.1)

内核 6.1 + 兼容特斯拉 P4 驱动,低版本可能报错

CPU

Intel VT-d / AMD-Vi 支持

必须开启硬件虚拟化与 IOMMU,否则无法直通

显卡

特斯拉 P4

数据中心计算卡,无视频输出,直通后仅用于计算 / 硬解

飞牛 OS

fnOS V0.9.2+

支持 NVIDIA 显卡驱动安装与硬件加速

工具

SSH 客户端(Xshell/Putty)

远程操作 PVE,比网页终端更稳定


二、BIOS 关键设置(必做,否则直通失败)

重启主机,按Del/F2/F10进入 BIOS(不同主板快捷键不同),依次设置以下选项:

表格

选项类别

具体设置

位置参考

CPU 虚拟化

开启Intel VMX / AMD SVM

CPU 高级设置 → 虚拟化技术

IOMMU

开启Intel VT-d / AMD IOMMU

北桥设置 → IOMMU Mode / VT-d Support

安全启动

关闭 Secure Boot

安全启动 → 启用状态设为 Disabled

SR-IOV

开启(可选)

PCIe 设置 → SR-IOV Support(仅 vGPU 需用)

设置完成后保存并重启,进入 PVE 系统。


三、PVE 主机核心配置(开启 IOMMU 与 VFIO)

3.1 启用 IOMMU(区分 GRUB 与 systemd-boot)

情况 A:PVE 使用 GRUB 引导(主流)

  1. 编辑 GRUB 配置文件:

    bash

    运行

    nano /etc/default/grub
    
  2. 修改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"
      
  3. 保存退出(Ctrl+O → 回车 → Ctrl+X),更新 GRUB:

    bash

    运行

    update-grub
    

情况 B:PVE 使用 systemd-boot(UEFI 纯净安装)

  1. 编辑内核命令行文件:

    bash

    运行

    nano /etc/kernel/cmdline
    
  2. 写入以下内容(按 CPU 类型替换intel_iommu=on):

    ini

    quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream video=efifb:off
    
  3. 更新 systemd-boot:

    bash

    运行

    proxmox-boot-tool refresh
    

3.2 加载 VFIO 内核模块

  1. 编辑模块配置文件:

    bash

    运行

    nano /etc/modules
    
  2. 写入以下内容(固定,无需修改):

    ini

    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
    
  3. 保存退出,生成模块初始化文件:

    bash

    运行

    update-initramfs -u -k all
    

3.3 屏蔽 Nouveau 开源驱动(NVIDIA 显卡必做)

  1. 创建屏蔽配置:

    bash

    运行

    nano /etc/modprobe.d/pve-blacklist.conf
    
  2. 写入:

    ini

    blacklist nouveau
    options nouveau modeset=0
    
  3. 保存退出,再次更新初始化文件:

    bash

    运行

    update-initramfs -u -k all
    

3.4 重启 PVE 并验证 IOMMU

  1. 重启主机:

    bash

    运行

    reboot
    
  2. 重启后执行以下命令,验证 IOMMU 是否开启:

    bash

    运行

    dmesg | grep -E "IOMMU|DMAR"
    

    ✅ 成功标志:出现DMAR: IOMMU enabledAMD-Vi: IOMMU initialized


四、识别并绑定特斯拉 P4 至 VFIO 驱动

4.1 查找 P4 的 PCI 地址与设备 ID

  1. 列出所有 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(音频,可选直通)

    • 设备 ID10de:1cb3(核心)、10de:10f0(音频)

  2. 检查 IOMMU 分组(确保显卡单独在一个组,避免与其他设备共享):

    bash

    运行

    find /sys/kernel/iommu_groups/ -type l | grep 01:00
    

    ✅ 理想状态:01:00.001:00.1在同一组,且无其他设备。

4.2 绑定 P4 至 VFIO 驱动

  1. 编辑 VFIO 设备绑定配置:

    bash

    运行

    nano /etc/modprobe.d/vfio.conf
    
  2. 写入设备 ID(替换为你的实际 ID):

    ini

    options vfio-pci ids=10de:1cb3,10de:10f0
    
  3. 保存退出,更新初始化文件并重启:

    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 创建飞牛虚拟机(基础配置)

  1. 登录 PVE 网页端(https://PVE_IP:8006),点击创建虚拟机

  2. 按以下步骤配置(关键项标红):

    表格

    步骤

    配置项

    推荐值

    常规

    名称

    fnOS-P4(自定义)

    操作系统

    镜像

    挂载飞牛 OS ISO(上传至 PVE 本地存储)

    系统

    机型

    q35(必须,PCIe 直通必需)

    系统

    BIOS

    OVMF (UEFI)(必须,需创建 EFI 分区)

    系统

    EFI 存储

    选择本地存储(如 local-lvm)

    磁盘

    总线 / 设备

    SCSI(推荐 VirtIO SCSI)

    磁盘

    大小

    64G(系统盘,按需扩容)

    CPU

    类型

    host(直通 CPU 特性,性能最佳)

    CPU

    核心数

    4-8(按需,至少 4 核)

    内存

    大小

    8G-16G(按需,至少 4G)

    网络

    模型

    VirtIO(高性能网络)

  3. 点击完成,暂不启动虚拟机。

5.2 添加特斯拉 P4 直通(核心步骤)

  1. 选中刚创建的飞牛虚拟机,点击硬件添加PCI 设备

  2. 按以下配置:

    • 设备:选择01:00.0(Tesla P4 核心)

    • PCIe:勾选✅(必须,启用 PCIe 直通)

    • 所有功能:勾选✅(自动包含音频设备01:00.1,可选)

    • ROM-BAR:勾选✅(部分显卡需此选项)

    • 主 GPU取消勾选(P4 无视频输出,无需设为主 GPU)

  3. 点击添加,完成硬件配置。

5.3 优化虚拟机配置文件(可选,解决兼容性问题)

  1. 查看虚拟机 ID(如100),编辑配置文件:

    bash

    运行

    nano /etc/pve/qemu-server/100.conf
    
  2. 找到hostpci0行,确保参数如下(替换为你的 PCI 地址):

    ini

    hostpci0: 0000:01:00.0,pcie=1,rombar=1,multifunction=1
    hostpci1: 0000:01:00.1,pcie=1,rombar=1
    
  3. 保存退出,网页端刷新配置。


六、飞牛虚拟机内安装 NVIDIA 驱动

6.1 启动飞牛虚拟机并安装系统

  1. 启动虚拟机,按提示完成飞牛 OS 的常规安装(参考飞牛官方教程)。

  2. 安装完成后,确保虚拟机联网(ping baidu.com测试)。

6.2 安装特斯拉 P4 专用驱动(数据中心版)

特斯拉 P4 为数据中心显卡,需安装NVIDIA 数据中心驱动(而非桌面版),推荐版本:535.183.01(稳定兼容 fnOS)。

  1. 飞牛 OS 终端执行,安装依赖:

    bash

    运行

    apt update && apt install -y gcc make linux-headers-$(uname -r)
    
  2. 下载驱动(替换为最新数据中心版地址):

    bash

    运行

    wget https://us.download.nvidia.com/tesla/535.183.01/NVIDIA-Linux-x86_64-535.183.01.run
    
  3. 赋予执行权限并安装:

    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
    
  4. 安装过程中按提示确认,完成后重启虚拟机:

    bash

    运行

    reboot
    

七、全链路验证方法(确保直通成功)

7.1 主机端验证(PVE)

  1. 检查显卡仍绑定 VFIO:

    bash

    运行

    lspci -vnn -s 01:00.0 | grep "vfio-pci"
    
  2. 检查虚拟机进程是否占用显卡:

    bash

    运行

    ps -ef | grep qemu | grep hostpci
    

7.2 虚拟机端验证(飞牛 OS)

  1. 查看显卡识别情况:

    bash

    运行

    lspci | grep NVIDIA
    

    ✅ 输出应包含Tesla P4

  2. 验证驱动加载与 GPU 状态(核心命令):

    bash

    运行

    nvidia-smi
    

    ✅ 成功标志:显示特斯拉 P4 的型号、显存、温度、驱动版本,状态为Running

  3. 查看驱动版本与模块:

    bash

    运行

    modinfo nvidia | grep version
    lsmod | grep nvidia
    

7.3 功能验证(硬解 / CUDA,可选)

验证 1:视频硬解(飞牛 OS 常用场景)

  1. 安装 ffmpeg:

    bash

    运行

    apt install -y ffmpeg
    
  2. 测试硬解(需准备一个视频文件):

    bash

    运行

    ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output_hw.mp4
    

    ✅ 无报错且速度远快于软解,说明硬解正常。

验证 2:CUDA 计算(开发 / AI 场景)

  1. 安装 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
    
  2. 运行 CUDA 样例:

    bash

    运行

    nvcc --version
    /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery
    

    ✅ 输出Result = PASS,说明 CUDA 功能正常。


八、常见问题与排查方案

表格

问题

原因

解决方法

No IOMMU Detected

BIOS 未开启 VT-d/AMD-Vi,或 GRUB 参数错误

重新进入 BIOS 开启,核对 GRUB 参数并更新

显卡驱动仍为nvidia

未屏蔽 Nouveau 或 VFIO 绑定失败

重新执行屏蔽与绑定步骤,重启验证

飞牛 OS 内nvidia-smi报错

驱动版本不兼容,或未启用 PCIe 直通

安装数据中心版驱动,确保虚拟机勾选PCIe

虚拟机启动后无响应

机型未选 q35,或主 GPU 勾选错误

改为 q35 机型,取消主 GPU 勾选

硬解失败

驱动未安装 UVM,或 ffmpeg 未启用 cuda

安装驱动时勾选 UVM,用-hwaccel cuda参数


总结

本教程覆盖了从 BIOS 到虚拟机功能验证的全流程,核心是开启 IOMMU正确绑定 VFIO飞牛虚拟机选 q35+PCIe 直通。特斯拉 P4 直通后,可在飞牛 OS 中实现高性能视频硬解、AI 推理或 Java 程序的 CUDA 加速,完全满足开发与 NAS 的混合使用场景。

PVE 开机 WiFi 联网并共享给所有 Linux 虚拟机:完整指南 2026-03-24

评论区