复制成功
请遵守本站许可
REPORT
Chapter_Post // Field_Report

Post_Ref: RL-PVE如何显卡直

2026.04.08

PVE如何显卡直通到虚拟机

Echo HaoRan
Echo HaoRan
ANALYSIS

配置步骤#

第一步:启用 BIOS/UEFI 中的虚拟化功能#

  1. 进入 BIOS/UEFI 设置
  2. 启用以下选项:
    • Intel: Intel VT-x, Intel VT-d
    • AMD: SVM Mode, IOMMU
  3. 保存并重启

第二步:修改 GRUB 启用 IOMMU#

编辑 GRUB 配置文件:

PRTCL // BASH
Terminal window
nano /etc/default/grub

Intel CPU修改为:

PRTCL // PLAINTEXT
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction video=efifb:off"

AMD CPU修改为:

PRTCL // PLAINTEXT
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction video=efifb:off"

参数说明:

  • intel_iommu=on / amd_iommu=on: 启用 IOMMU
  • iommu=pt: 性能优化
  • pcie_acs_override=downstream,multifunction: 绕过 ACS 限制
  • video=efifb:off: 禁用 EFI framebuffer(可选)

更新 GRUB:

PRTCL // BASH
Terminal window
update-grub

第三步:加载 VFIO 模块#

编辑模块配置:

PRTCL // BASH
Terminal window
nano /etc/modules

添加以下内容:

PRTCL // PLAINTEXT
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

第四步:查找显卡信息#

查看所有 PCI 设备:

PRTCL // BASH
Terminal window
lspci -nn | grep -i vga

或查看显卡和音频设备:

PRTCL // BASH
Terminal window
lspci -nn | grep -E "VGA|Audio"

输出示例:

PRTCL // PLAINTEXT
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106 [GeForce RTX 3060] [10de:2504] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GA106 High Definition Audio Controller [10de:228e] (rev a1)

记录:

  • 设备 ID: 01:00.001:00.1
  • 硬件 ID: 10de:250410de:228e

第五步:屏蔽显卡驱动#

创建黑名单配置:

PRTCL // BASH
Terminal window
nano /etc/modprobe.d/blacklist.conf

NVIDIA 显卡添加:

PRTCL // PLAINTEXT
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist nvidia_drm
blacklist nvidia_modeset

AMD 显卡添加:

PRTCL // PLAINTEXT
blacklist radeon
blacklist amdgpu

第六步:配置 VFIO 绑定显卡#

创建 VFIO 配置:

PRTCL // BASH
Terminal window
nano /etc/modprobe.d/vfio.conf

添加显卡和音频设备的硬件 ID:

PRTCL // PLAINTEXT
options vfio-pci ids=10de:2504,10de:228e disable_vga=1

参数说明:

  • ids=: 显卡和音频设备的硬件 ID(用逗号分隔)
  • disable_vga=1: 禁用 VGA 仲裁(可选)

第七步:更新 initramfs#

PRTCL // BASH
Terminal window
update-initramfs -u -k all

第八步:重启系统#

PRTCL // BASH
Terminal window
reboot

第九步:验证 IOMMU 和 VFIO#

检查 IOMMU 是否启用:

PRTCL // BASH
Terminal window
dmesg | grep -e DMAR -e IOMMU

应该看到类似输出:

PRTCL // PLAINTEXT
DMAR: IOMMU enabled

检查 VFIO 是否绑定显卡:

PRTCL // BASH
Terminal window
lspci -nnk -d 10de:2504

应该看到:

PRTCL // PLAINTEXT
Kernel driver in use: vfio-pci

查看 IOMMU 分组:

PRTCL // BASH
Terminal window
find /sys/kernel/iommu_groups/ -type l

或使用脚本查看:

PRTCL // BASH
#!/bin/bash
shopt -s nullglob
for g in /sys/kernel/iommu_groups/*; do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;

第十步:创建虚拟机#

  1. 在 PVE Web 界面创建虚拟机
  2. 重要配置
    • 系统:选择 OVMF (UEFI)
    • 机器:选择 q35
    • BIOS:选择 OVMF (UEFI)
    • 添加 EFI 磁盘
    • CPU 类型:选择 host

通过命令行创建示例:

PRTCL // BASH
Terminal window
qm create 100 --name "Gaming-VM" --memory 16384 --cores 8 --cpu host --machine q35 --bios ovmf

第十一步:添加显卡到虚拟机#

方法 1:通过 Web 界面#

  1. 选择虚拟机

  2. 硬件 → 添加 → PCI 设备

  3. 选择显卡设备 01:00.0

  4. 勾选:

    • ✓ 所有功能(All Functions)
    • ✓ 主 GPU(Primary GPU)
    • ✓ PCIe
    • ✓ ROM-Bar
  5. 重复添加音频设备 01:00.1(如果需要)

方法 2:通过命令行#

PRTCL // BASH
Terminal window
qm set 100 -hostpci0 01:00,pcie=1,rombar=1,x-vga=1

参数说明:

  • 01:00: 显卡设备 ID(会自动包含所有功能)
  • pcie=1: 作为 PCIe 设备
  • rombar=1: 启用 ROM bar
  • x-vga=1: 设置为主显卡

第十二步:配置虚拟机其他设置#

编辑虚拟机配置文件:

PRTCL // BASH
Terminal window
nano /etc/pve/qemu-server/100.conf

添加或修改以下内容:

PRTCL // PLAINTEXT
args: -cpu host,kvm=off,hv_vendor_id=proxmox
cpu: host,hidden=1,flags=+pcid
machine: q35
bios: ovmf

参数说明:

  • kvm=off: 隐藏 KVM 特征(防止 NVIDIA 驱动检测虚拟机)
  • hv_vendor_id=proxmox: 设置 Hyper-V vendor ID
  • hidden=1: 隐藏虚拟化特征
  • +pcid: 启用 PCID 支持

第十三步:启动虚拟机并安装驱动#

  1. 启动虚拟机
  2. 安装操作系统
  3. 安装显卡驱动
    • NVIDIA: 从官网下载驱动
    • AMD: 从官网下载驱动

第十四步:验证直通成功#

Windows 虚拟机#

  1. 打开设备管理器
  2. 查看显示适配器
  3. 确认显卡正常工作

运行 GPU-Z 或其他工具检查显卡信息。

Linux 虚拟机#

PRTCL // BASH
Terminal window
lspci | grep -i vga
nvidia-smi # NVIDIA 显卡

echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind modprobe -r nvidia_drm modprobe -r nvidia_modeset modprobe -r nvidia modprobe vfio-pci

PRTCL // PLAINTEXT
创建关闭脚本:
```bash
nano /usr/local/bin/vfio-teardown.sh
PRTCL // BASH
#!/bin/bash
modprobe -r vfio-pci
modprobe nvidia
modprobe nvidia_modeset
modprobe nvidia_drm
echo 1 > /sys/class/vtconsole/vtcon0/bind
echo 1 > /sys/class/vtconsole/vtcon1/bind
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind

设置权限:

PRTCL // BASH
Terminal window
chmod +x /usr/local/bin/vfio-startup.sh
chmod +x /usr/local/bin/vfio-teardown.sh

配置虚拟机钩子:

PRTCL // BASH
Terminal window
nano /etc/pve/qemu-server/100.conf

添加:

PRTCL // PLAINTEXT
hookscript: local:snippets/vfio-hook.pl

解决方案

  • 确保虚拟机使用 UEFI 启动
  • 添加 x-vga=1 参数
  • 提取并使用显卡 VBIOS

提取 VBIOS:

PRTCL // BASH
Terminal window
cd /sys/bus/pci/devices/0000:01:00.0/
echo 1 > rom
cat rom > /usr/share/kvm/vbios.bin
echo 0 > rom

使用 VBIOS:

PRTCL // BASH
Terminal window
qm set 100 -hostpci0 01:00,pcie=1,rombar=1,romfile=vbios.bin

NVIDIA 驱动报错 Code 43#

解决方案

编辑虚拟机配置:

PRTCL // BASH
Terminal window
nano /etc/pve/qemu-server/100.conf

添加:

PRTCL // PLAINTEXT
args: -cpu host,kvm=off,hv_vendor_id=whatever
cpu: host,hidden=1

音频不工作#

解决方案

确保显卡的音频设备也已直通:

PRTCL // BASH
Terminal window
qm set 100 -hostpci1 01:00.1

性能不佳#

解决方案

  1. 启用 CPU host 模式
  2. 启用大页内存(Hugepages)
PRTCL // BASH
Terminal window
nano /etc/sysctl.conf

添加:

PRTCL // PLAINTEXT
vm.nr_hugepages = 5120

应用:

PRTCL // BASH
Terminal window
sysctl -p

虚拟机配置添加:

PRTCL // PLAINTEXT
hugepages: 1024
  1. 绑定 CPU 核心
PRTCL // BASH
Terminal window
qm set 100 -vcpus 8 -affinity 0-7

无法启动虚拟机#

检查日志

PRTCL // BASH
Terminal window
tail -f /var/log/pve/qemu-server/100.log

apt install git dkms build-essential git clone https://github.com/gnif/vendor-reset.git cd vendor-reset dkms install . echo “vendor-reset” >> /etc/modules

PRTCL // PLAINTEXT
R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.08
// END OF POST

订阅

通过 RSS 订阅本站,新文章发布时第一时间收到通知。

Follow
Classified
Chapter_06
Protocol_Ref: CC-BY-NC-SA-4.0

PVE如何显卡直通到虚拟机

Author: CHONGXIReleased: 2026.04.08

Licensed under CC BY-NC-SA 4.0

评论

© 2025-2026 EchoSpace
Powered by Astro & echohaoran Non-Collaborative_Entity // Protocol_V.4.21