配置步骤
第一步:启用 BIOS/UEFI 中的虚拟化功能
- 进入 BIOS/UEFI 设置
- 启用以下选项:
- Intel:
Intel VT-x,Intel VT-d - AMD:
SVM Mode,IOMMU
- Intel:
- 保存并重启
第二步:修改 GRUB 启用 IOMMU
编辑 GRUB 配置文件:
nano /etc/default/grubIntel CPU修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction video=efifb:off"AMD CPU修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction video=efifb:off"参数说明:
intel_iommu=on/amd_iommu=on: 启用 IOMMUiommu=pt: 性能优化pcie_acs_override=downstream,multifunction: 绕过 ACS 限制video=efifb:off: 禁用 EFI framebuffer(可选)
更新 GRUB:
update-grub第三步:加载 VFIO 模块
编辑模块配置:
nano /etc/modules添加以下内容:
vfiovfio_iommu_type1vfio_pcivfio_virqfd第四步:查找显卡信息
查看所有 PCI 设备:
lspci -nn | grep -i vga或查看显卡和音频设备:
lspci -nn | grep -E "VGA|Audio"输出示例:
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.0和01:00.1 - 硬件 ID:
10de:2504和10de:228e
第五步:屏蔽显卡驱动
创建黑名单配置:
nano /etc/modprobe.d/blacklist.confNVIDIA 显卡添加:
blacklist nouveaublacklist nvidiablacklist nvidiafbblacklist nvidia_drmblacklist nvidia_modesetAMD 显卡添加:
blacklist radeonblacklist amdgpu第六步:配置 VFIO 绑定显卡
创建 VFIO 配置:
nano /etc/modprobe.d/vfio.conf添加显卡和音频设备的硬件 ID:
options vfio-pci ids=10de:2504,10de:228e disable_vga=1参数说明:
ids=: 显卡和音频设备的硬件 ID(用逗号分隔)disable_vga=1: 禁用 VGA 仲裁(可选)
第七步:更新 initramfs
update-initramfs -u -k all第八步:重启系统
reboot第九步:验证 IOMMU 和 VFIO
检查 IOMMU 是否启用:
dmesg | grep -e DMAR -e IOMMU应该看到类似输出:
DMAR: IOMMU enabled检查 VFIO 是否绑定显卡:
lspci -nnk -d 10de:2504应该看到:
Kernel driver in use: vfio-pci查看 IOMMU 分组:
find /sys/kernel/iommu_groups/ -type l或使用脚本查看:
#!/bin/bashshopt -s nullglobfor 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;第十步:创建虚拟机
- 在 PVE Web 界面创建虚拟机
- 重要配置:
- 系统:选择
OVMF (UEFI) - 机器:选择
q35 - BIOS:选择
OVMF (UEFI) - 添加 EFI 磁盘
- CPU 类型:选择
host
- 系统:选择
通过命令行创建示例:
qm create 100 --name "Gaming-VM" --memory 16384 --cores 8 --cpu host --machine q35 --bios ovmf第十一步:添加显卡到虚拟机
方法 1:通过 Web 界面
选择虚拟机
硬件 → 添加 → PCI 设备
选择显卡设备
01:00.0勾选:
- ✓ 所有功能(All Functions)
- ✓ 主 GPU(Primary GPU)
- ✓ PCIe
- ✓ ROM-Bar
重复添加音频设备
01:00.1(如果需要)
方法 2:通过命令行
qm set 100 -hostpci0 01:00,pcie=1,rombar=1,x-vga=1参数说明:
01:00: 显卡设备 ID(会自动包含所有功能)pcie=1: 作为 PCIe 设备rombar=1: 启用 ROM barx-vga=1: 设置为主显卡
第十二步:配置虚拟机其他设置
编辑虚拟机配置文件:
nano /etc/pve/qemu-server/100.conf添加或修改以下内容:
args: -cpu host,kvm=off,hv_vendor_id=proxmoxcpu: host,hidden=1,flags=+pcidmachine: q35bios: ovmf参数说明:
kvm=off: 隐藏 KVM 特征(防止 NVIDIA 驱动检测虚拟机)hv_vendor_id=proxmox: 设置 Hyper-V vendor IDhidden=1: 隐藏虚拟化特征+pcid: 启用 PCID 支持
第十三步:启动虚拟机并安装驱动
- 启动虚拟机
- 安装操作系统
- 安装显卡驱动
- NVIDIA: 从官网下载驱动
- AMD: 从官网下载驱动
第十四步:验证直通成功
Windows 虚拟机
- 打开设备管理器
- 查看显示适配器
- 确认显卡正常工作
运行 GPU-Z 或其他工具检查显卡信息。
Linux 虚拟机
lspci | grep -i vganvidia-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
创建关闭脚本:
```bashnano /usr/local/bin/vfio-teardown.sh#!/bin/bashmodprobe -r vfio-pcimodprobe nvidiamodprobe nvidia_modesetmodprobe nvidia_drmecho 1 > /sys/class/vtconsole/vtcon0/bindecho 1 > /sys/class/vtconsole/vtcon1/bindecho efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind设置权限:
chmod +x /usr/local/bin/vfio-startup.shchmod +x /usr/local/bin/vfio-teardown.sh配置虚拟机钩子:
nano /etc/pve/qemu-server/100.conf添加:
hookscript: local:snippets/vfio-hook.pl解决方案:
- 确保虚拟机使用 UEFI 启动
- 添加
x-vga=1参数 - 提取并使用显卡 VBIOS
提取 VBIOS:
cd /sys/bus/pci/devices/0000:01:00.0/echo 1 > romcat rom > /usr/share/kvm/vbios.binecho 0 > rom使用 VBIOS:
qm set 100 -hostpci0 01:00,pcie=1,rombar=1,romfile=vbios.binNVIDIA 驱动报错 Code 43
解决方案:
编辑虚拟机配置:
nano /etc/pve/qemu-server/100.conf添加:
args: -cpu host,kvm=off,hv_vendor_id=whatevercpu: host,hidden=1音频不工作
解决方案:
确保显卡的音频设备也已直通:
qm set 100 -hostpci1 01:00.1性能不佳
解决方案:
- 启用 CPU host 模式
- 启用大页内存(Hugepages)
nano /etc/sysctl.conf添加:
vm.nr_hugepages = 5120应用:
sysctl -p虚拟机配置添加:
hugepages: 1024- 绑定 CPU 核心
qm set 100 -vcpus 8 -affinity 0-7无法启动虚拟机
检查日志:
tail -f /var/log/pve/qemu-server/100.logapt install git dkms build-essential git clone https://github.com/gnif/vendor-reset.git cd vendor-reset dkms install . echo “vendor-reset” >> /etc/modules
Auth_Verified: 2026.04.08
