Lazy loaded image
Proxmox VE 硬件直通 (PCIe Pass-through) 终极配置指南
字数 1742阅读时长 5 分钟
2026-1-18
2026-1-18
type
status
date
slug
summary
tags
category
icon
password
在虚拟化环境中,IOMMU(输入输出内存管理单元)是一项至关重要的技术。通过开启硬件直通(Passthrough),我们可以让虚拟机直接访问物理硬件(如显卡、网卡、NVMe 硬盘),从而获得接近原生的性能。
本文将手把手教你如何在 Proxmox VE 中配置完美的硬件直通环境。

1. BIOS 设置 (主板层级)

在进入系统之前,必须确保主板 BIOS 开启了虚拟化支持。不同的主板厂商命名可能不同,请参照以下关键项:
  • VT-d / AMD-ViEnabled (这是 IOMMU 的核心开关)
  • IOMMUEnabled (如果显式存在此选项)
  • CSM (Compatibility Support Module)Disabled (建议关闭,使用纯 UEFI 模式;如果必须开启,请确保其中的设备都被设为 UEFI 优先)
  • Above 4G DecodingEnabled (显卡直通必需)
  • Resizable BAR / SAMDisabled (注意:开启此项可能导致 AMD Vega 及更新的显卡报 Code 43 错误)
  • Primary DisplayCPU/iGPU (如果 CPU 有核显,建议设为核显,让独显空闲出来给虚拟机)
  • iGPU Pre-Allocated Memory64M (推荐值)
  • ACS EnableEnabled (如果存在)

2. 优化 PVE 环境配置

登录 PVE 的 SSH 或控制台。

2.1 消除 dmesg 报错 (可选)

为了保持日志干净,忽略一些无关紧要的 MSR 错误:
添加以下内容:

3. 启用 IOMMU 内核支持 (核心步骤)

我们需要修改 GRUB 引导参数来开启内核级的 IOMMU 支持。
找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,根据你的 CPU 平台选择合适的配置:

Intel CPU 推荐配置

AMD CPU 推荐配置

GVT-g 核显共享模式 (仅限部分 Intel 旧 CPU)

参数详解词典

参数
作用说明
quiet
默认参数,表示在启动过程中只显示重要信息
intel_iommu=on
用 intel_iommu 驱动来驱动 IOMMU 硬件单元
amd_iommu=on
用 amd_iommu 驱动来驱动 IOMMU 硬件单元
iommu=pt
只为使用透传功能的设备启用 IOMMU,并可以提供更好的功能和性能
pci=assign-busses
部分网卡开启 SR-IOV 需要这个参数,否则可能报错
PCIe_acs_override=downstream
用于将 iommu groups 拆分,方便灵活按需直通一些板载的设备
PCIe_acs_override=multifunction
PCIe 直通多功能支持,提高直通完美度(可选)
nofb
该选项允许你不用一个frame缓冲来使用图形安装程序
textonly
仅在文本模式下支持 GRUB 串行控制台
nomodeset
系统启动过程中,暂时不运行图像驱动程序
video=vesafb:off
禁用 vesa 启动显示设备
video=efifb:off
禁用 efi 启动显示设备
video=simplefb:off
5.15 内核开始直通可能需要这个参数
initcall_blacklist=sysfb_init
部分 A 卡如 RX580 直通异常可能需要这个参数
pcie_aspm=off
关闭 PCIe 设备的 ASPM 节能模式,解决部分 PCIe 设备 AER 报错
pcie_aspm=force
强制 PCIe 设备及爱情 ASPM 节能模式,解决部分 PCIe 设备 AER 报错
pci=noaer
不输出 AER 报错日志,华南主板经常会 AER 报错,建议配合使用,眼不见心不烦
pci=nomsi
在系统范围内禁用 MSI 中断,主要还是解决 PCIe 相关的报错
修改完成后,必须更新 GRUB 并重启

4. 验证 IOMMU 是否开启

重启后,检查 IOMMU 是否生效:
若看到 DMAR: IOMMU enabled 字样即为成功。
检查 IOMMU 分组情况(确认设备是否被分开):
如果能列出大量不同的 group 编号,说明分组成功。

5. 加载内核模块与驱动黑名单

为了让虚拟机完全控制设备,PVE 本身不能加载这些设备的驱动。

5.1 加载 VFIO 模块

编辑 /etc/modules
添加以下内容:

5.2 允许不安全中断 (可选)

如果后续直通报错,可以尝试开启此项(可能影响稳定性):

5.3屏蔽显卡驱动 (Blacklist)

防止 PVE 加载显卡驱动。编辑 /etc/modprobe.d/pve-blacklist.conf
添加(根据你的显卡类型选择,建议全部添加以绝后患):

5.4 刷新 Initramfs

修改模块配置后必须执行:

6. 绑定设备 ID (VFIO-PCI)

这是将设备“隔离”出来的关键步骤。
  1. 查找设备 ID
    1. 记下类似 [10de:1c03] 这样的代码。
  1. 绑定设备: 编辑 /etc/modprobe.d/vfio-pci.conf
    1. 添加(将 ID 替换为你自己的,如果有多个 ID 用逗号隔开):
再次重启 PVE:reboot

7. 虚拟机配置技巧

7.1 配置文件修改

除了在 Web 界面添加 PCI 设备,有时需要手动修改配置文件 /etc/pve/qemu-server/<VMID>.conf
  • x-vga=1: 如果你想把这台虚拟机当主力机接显示器用,加上这个。
  • pcie=1: 强制设备以 PCIe 模式运行。

7.2 屏蔽显示

如果直通了显卡并接了显示器,建议将虚拟机的虚拟显卡设为无:
(注意:这会导致 PVE 网页端的 Console/noVNC 无法使用)

8. macOS (Hackintosh) 特殊说明

如果你在 PVE 上运行 macOS,需要注意以下几点:
  1. AMD 显卡驱动参数: 在 OpenCore 的 config.plist -> NVRAM -> boot-args 中添加:
      • agdpmod=pikera (RX 5000/6000 系列必需)
  1. NVIDIA 显卡: macOS 仅支持 GTX 600/700 系列(开普勒架构)或更老的卡。其他 N 卡无法驱动。
  1. 修复 SIP/AMFI 问题: 如果使用 OpenCore Legacy Patcher (OCLP) 遇到错误,尝试在 boot-args 添加:
      • amfi_get_out_of_my_way=0x1
      • ngfxcompat=1
      • ngfxgl=1

9. 常见问题与提示

  • ROM 文件:部分显卡(尤其是 N 卡)可能需要手动提取并指定 ROM 文件才能正常直通。你可以去 TechPowerUp 下载对应的 BIOS,并在虚拟机配置中指定 romfile=xxx.bin
  • HDMI 音频:如果在直通设置中勾选了 PCIe,但 HDMI 音频不工作,尝试取消勾选 PCIe 选项,或者手动直通 Audio 设备。
  • Code 43:NVIDIA 显卡常见错误。确保隐藏了 KVM 签名(在 PVE 界面勾选“Hidden”),并尝试提取加载 ROM 文件。

警告:修改 BIOS 和 GRUB 有风险,请确保在操作前备份重要数据。
上一篇
OpenWrt 下 OpenClash 完美配合 Cloudflare Tunnel 直连配置指南
下一篇
PVE 9.x + N100/N150:Windows 11 核显直通与 HDMI 输出终极指南