type
status
date
slug
summary
tags
category
icon
password
在虚拟化环境中,IOMMU(输入输出内存管理单元)是一项至关重要的技术。通过开启硬件直通(Passthrough),我们可以让虚拟机直接访问物理硬件(如显卡、网卡、NVMe 硬盘),从而获得接近原生的性能。
本文将手把手教你如何在 Proxmox VE 中配置完美的硬件直通环境。
1. BIOS 设置 (主板层级)
在进入系统之前,必须确保主板 BIOS 开启了虚拟化支持。不同的主板厂商命名可能不同,请参照以下关键项:
- VT-d / AMD-Vi: Enabled (这是 IOMMU 的核心开关)
- IOMMU: Enabled (如果显式存在此选项)
- CSM (Compatibility Support Module): Disabled (建议关闭,使用纯 UEFI 模式;如果必须开启,请确保其中的设备都被设为 UEFI 优先)
- Above 4G Decoding: Enabled (显卡直通必需)
- Resizable BAR / SAM: Disabled (注意:开启此项可能导致 AMD Vega 及更新的显卡报 Code 43 错误)
- Primary Display: CPU/iGPU (如果 CPU 有核显,建议设为核显,让独显空闲出来给虚拟机)
- iGPU Pre-Allocated Memory: 64M (推荐值)
- ACS Enable: Enabled (如果存在)
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)
这是将设备“隔离”出来的关键步骤。
- 查找设备 ID:
记下类似
[10de:1c03] 这样的代码。- 绑定设备:
编辑
/etc/modprobe.d/vfio-pci.conf:
添加(将 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,需要注意以下几点:
- AMD 显卡驱动参数: 在 OpenCore 的
config.plist->NVRAM->boot-args中添加: agdpmod=pikera(RX 5000/6000 系列必需)
- NVIDIA 显卡: macOS 仅支持 GTX 600/700 系列(开普勒架构)或更老的卡。其他 N 卡无法驱动。
- 修复 SIP/AMFI 问题: 如果使用 OpenCore Legacy Patcher (OCLP) 遇到错误,尝试在 boot-args 添加:
amfi_get_out_of_my_way=0x1ngfxcompat=1ngfxgl=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 输出终极指南
- 作者:Cheng
- 链接:https://tangly1024.com/technology/pve-hardware-passthrough-guide
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
