在 Proxmox 中设置 PCI 直通以实现硬件直连
2026-07-24
Proxmox 中的 PCI 直通是什么?
PCI 直通是一项功能,允许虚拟机直接控制一块物理 PCIe 设备,就像该设备已安装在其自身的主板上一样。当您在 Proxmox 中通过 PCI 直通方式分配设备时,该设备将对宿主机系统不可见,直至虚拟机将其释放——这实现了真正的硬件隔离。
这是 Proxmox VE 中最强大的功能之一。借助 PCI 直通技术,您可以提升性能、降低延迟,并支持需要直接访问硬件的高级工作负载。
为什么PCI直通很重要?
这为何重要?某些工作负载因速度或兼容性需求,必须直接访问专用硬件:
为机器学习或视频编码分配一个 GPU。
通过高速网络接口卡(NIC)用于网络设备。
将存储控制器分配给虚拟机内的 ZFS 或其他文件系统。
许多用户可能想知道如何进行设置?请继续阅读,我们将从基本概念到高级故障排除逐一讲解,帮助您在自己的环境中掌握 PCI 直通 Proxmox 技术。
第一步:检查硬件要求和兼容性
该功能的核心是IOMMU(输入输出内存管理单元)。IOMMU安全地在虚拟机与物理内存之间映射设备的内存访问。在Intel平台上,该技术称为VT-d;在AMD平台上则称为AMD-Vi或SVM模式。若CPU和主板层面均不支持IOMMU,则PCI直通Proxmox将无法稳定运行——甚至完全无法工作。
大多数现代服务器级CPU原生支持这些功能。在配置PCI直通Proxmox之前,请确保您的硬件完全支持该功能——否则您之后可能会遇到令人沮丧的障碍。
第一:CPU 支持
英特尔 CPU 必须支持 VT-d。
AMD CPU 需要启用 AMD-Vi/SVM 模式。
如果不确定,请在线查看您的处理器规格;查找“VT-d”(Intel)或“AMD-Vi”/“SVM”(AMD)。
第二:主板支持
并非所有芯片组都实现了完整的IOMMU功能——即使您的CPU支持也不例外!服务器主板通常表现最佳;而部分消费级主板在此处有所简化。
在主板制造商的官网上查找您的主板型号,或在社区论坛中搜索有关 PCI 直通 Proxmox 的成功案例。
第三:设备兼容性
大多数 PCIe 设备均可直通使用——包括 GPU(NVIDIA/AMD/Intel)、网卡、USB 控制器、RAID 卡——但部分设备存在特殊限制:
多功能设备可能需要同时启用所有功能。
支持 SR-IOV 的网卡可提供多个“虚拟”功能,供虚拟机共享使用。
如有可能,请先使用备用硬件进行测试,再部署关键工作负载!
第四:固件设置
启动前请更新 BIOS/UEFI 固件——旧版本可能缺少 Proxmox VE 7.x 及更高版本所需的关键虚拟化选项。
步骤2:安装前验证硬件支持
在进行更改之前检查兼容性非常值得:
1. 启动进入 Proxmox 命令行界面。
2. 运行 lscpu 命令——确认虚拟化标志存在(Intel 处理器为 vmx;AMD 处理器为 svm)。
3. 检查可用的PCI设备:
lspci -nnk
识别稍后要直通的设备。
4. 搜索 dmesg 日志:
dmesg | grep -i iommu
如果启动后未显示任何关于 IOMMU 已启用的信息——即使已启用 BIOS 设置——您可能需要更换硬件或更新固件。
现在确认这些要点,可避免日后因配置不受支持而浪费时间排查问题!
步骤3:在BIOS中启用IOMMU
在固件级别启用IOMMU至关重要——Proxmox中其余的PCI直通功能均依赖其自开机起即正常运行:
1. 重启服务器并进入 BIOS/UEFI 设置界面(启动过程中按 删除 键、F2 键或类似按键)。
2. 在“高级”>“CPU 配置”或“芯片组”菜单下找到虚拟化设置。
对于英特尔处理器:启用VT-d/英特尔定向I/O虚拟化技术。
对于AMD处理器:根据菜单文字,启用SVM模式、AMD-Vi,或直接启用IOMMU。
3. 将任何与“IOMMU”、“VT-d”或“SVM 模式”相关的选项设置为“启用”。
4. 如可用,请启用ACS(访问控制服务)——这有助于将多功能设备隔离为独立组,避免在分配过程中相互干扰。
5. 保存更改(F10)并退出 BIOS/UEFI 设置。
如果不确定重启进入 Proxmox 后设置是否已生效:
dmesg | grep -e DMAR -e IOMMU
您应看到类似 DMAR: IOMMU 已启用(Intel)或 AMD-Vi: IOMMU 已启用(AMD)的行。
此处若未正确配置固件,无论进行多少软件调整,都无法使 PCI 直通在 Proxmox 上正常工作!
步骤 4:为 PCI 直通配置 Proxmox VE
固件准备就绪后,我们来逐步配置 Proxmox 本身:
确定您的引导加载程序类型
Proxmox 根据安装方式使用 GRUB(最常见)或 systemd-boot:
运行:
efibootmgr -v
如果输出中提到了 systemd-boot,则表示您正在使用它;否则,除非另行自定义安装,否则默认使用 GRUB。
这为什么重要?我们设置内核参数的方式在这两者之间有所不同——而这些参数对于在启动时启用 PCI 直通 Proxmox 功能至关重要!
编辑内核启动参数
内核参数用于告知 Linux 在系统早期启动阶段如何处理虚拟化扩展:
对于使用 GRUB 的用户:
1. 在编辑器中打开 /etc/default/grub:
nano /etc/default/grub
2. 找到以 GRUB_CMDLINE_LINUX_DEFAULT 开头的行。
3a. 在英特尔 CPU 上添加:
quiet intel_iommu=on iommu=pt
3b. 在 AMD CPU 上添加:
quiet amd_iommu=on iommu=pt
注意:现代内核通常会在 BIOS 中启用了 SVM/IOMMU 时自动启用 AMD-Vi,但同时添加这两个参数可确保在系统更新后仍保持稳定可靠!
4. 保存文件(按 Ctrl+X,然后按 Y,再按回车键)。
5. 更新 GRUB 配置,使更改在下次重启时生效:
update-grub
使用 systemd-boot 的用户:
1. 打开 /etc/kernel/cmdline:
nano /etc/kernel/cmdline
2. 在现有条目(例如 root/zfs 信息)末尾添加适当的参数,如上所示(intel_iommu=on iommu=pt 或 amd_iommu=on iommu=pt)。
3. 保存文件,然后刷新引导加载程序配置:
proxmox-boot-tool refresh
这些标志的含义是什么?
intel_iommu=on:在支持的英特尔芯片组上启用 VT-d 引擎;amd_iommu=on:在受支持的AMD芯片组上启用等效功能;iommu=pt:设置直通模式,使未使用的设备不会被阻止分配;quiet:在启动过程中减少控制台输出信息——虽非必需,但可使日志更整洁!
加载 VFIO 内核模块
VFIO(“虚拟功能输入/输出”)模块允许通过 QEMU/KVM 栈,将 PCIe 设备安全地从宿主机操作系统内核空间直接移交至客户虚拟机中:
编辑 /etc/modules 文件,使这些模块在每次启动时自动加载:
nano /etc/modules
如果尚未存在,请在文件末尾添加以下行:
vfio vfio_iommu_type1 vfio_pci vfio_virqfd # 可选,但可提升中断处理稳定性!
完成编辑后保存文件(按 Ctrl+X,然后按 Y)。
更新 initramfs 并重启服务器
更新 initramfs 可确保新驱动程序/配置在 Linux 启动过程的最早阶段即被纳入:
以 root 或 sudo 用户身份运行以下两个命令:
update-initramfs -u -k allreboot
重启成功完成后,请立即执行下方的验证步骤——切勿跳过!
验证截至目前一切是否正常运行
重新上线后,请执行以下检查:
检查 IOMMU 是否已正确启用—
dmesg | grep -e DMAR -e IOMMU
查找类似“DMAR: IOMMU 已启用”(Intel)或“AMD-Vi: 已找到”/“IOMMU 已启用”(AMD)的确认信息。
检查中断重映射状态—
dmesg | grep 'remapping'
预期输出类似“DMAR-IR:已启用 IRQ 重映射……”的行,表明功能正常运行——尤其是在虚拟机内直通 GPU 或网卡(NIC)且这些设备依赖 MSI/MSI-X 中断时,此功能必不可少!
如果任一命令未返回任何相关内容,请在继续进行 PCI 直通 Proxmox 配置之前,仔细复查前面的步骤!
步骤5:为直通分配准备设备
现在进入实际的设备准备工作——这是任何成功的PCI直通Proxmox部署的核心!以下是如何确保设备从宿主机内核安全移交至客户机虚拟机环境……
使用IOMMU组检查设备隔离
每个PCIe设备都位于一个“IOMMU组”中。属于同一组的设备无法被独立分配——由于芯片组设计本身施加的共享总线资源/硬件限制,它们必须一起迁移!
要清晰列出群组,请运行——
find /sys/kernel/iommu_groups/ -type l | sort | while read link; do \group=$(echo $link | cut -d'/' -f5); \device=$(basename $link); \echo "Group $group : $(lspci -nns $device)"; done;
识别目标设备——若该设备独占一个 IOMMU 组,则非常理想!否则,可尝试将显卡等设备物理更换插槽,或在 BIOS 中启用 ACS(“访问控制服务”)覆盖功能(如支持此选项)……
仅作为最后手段,才考虑添加内核参数—
pcie_acs_override=downstream,multifunction
用于拆分顽固的设备组——但需注意安全影响,因为使用覆盖技巧会失去严格的隔离保障!
将主机驱动程序加入黑名单,防止其抢先接管设备
对于许多GPU/网卡/存储控制器,Linux默认驱动程序过早抢占控制权,导致VFIO无法干净地接管设备……解决方法?显式地将这些驱动程序加入黑名单——
编辑 /etc/modprobe.d/blacklist.conf:
对于 NVIDIA GPU,请添加以下行—
黑名单 nouveau 黑名单 nvidia 黑名单 nvidiafb 黑名单 nvidia_drm
对于 AMD 显卡,请添加—
黑名单禁用 amdgpu 黑名单禁用 radeon 对于 Intel 集成显卡,请添加—黑名单 i915 完成时请保存文件!注意:仅适用于无头服务器;除非存在替代的远程管理路径,否则请勿将主机控制台所用的主显示适配器加入黑名单……
在启动时将设备 ID 绑定到 VFIO 驱动程序
使用以下方法查找厂商/设备 ID —
lspci -nnk # 查看格式 [厂商ID]:[设备ID] # 示例输出片段...# 01:00.0 VGA 兼容控制器 [0300]:NVIDIA 公司 GP107GL [Quadro P400] [10de:1cb3] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^ # 设备描述 厂商 ID 与设备 ID! # # 如果该显卡还具备音频功能,则您将看到类似如下内容……# 01:00.1 音频设备 [0403]: NVIDIA 公司 GP107GL 高清音频控制器 [10de:0fb9] # # 两个ID必须同时绑定! # nano /etc/modprobe.d/vfiod/vfio.conf # 在下方添加行,并相应替换ID。选项 vfio-pci ids=10de:1cb3,10de:0fb9 # update-initramfs -u -k all # 再次重建 initramfs! reboot # 还需一次重启…现在,VFIO 驱动程序每次系统启动时都会自动声明这些确切的 ID——后续无需手动干预。请把以下内容翻译成中文:.# 01:00请把以下内容翻译成中文:.# 01:00请把以下内容翻译成中文:请把以下内容翻译成中文:请把以下内容翻译成中文:
步骤6:通过Web界面为虚拟机分配设备
前期准备工作完成后,通过Web界面为虚拟机分配实际硬件操作简单却功能强大……
1. 在网页UI仪表板左侧导航树中选择目标虚拟机;
2. 转到硬件选项卡;
3. 点击标有添加的加粗按钮,选择“PCI 设备”选项;
4. 在对话框中选择“原始设备”模式,然后选取与之前 lspci 输出相匹配的目标条目;
5. 对于多功能显卡,请勾选“所有功能”和“主GPU”复选框(如适用);
6. 高级选项包括切换“PCI Express”、“ROM-Bar”等——仅当厂商文档或针对该显卡型号/类型的社区指南明确建议时才启用!
7. 点击标有“添加”的加粗按钮。
随后启动/重新启动虚拟机——客户操作系统现在应能像裸机安装一样检测到真实的物理设备……
步骤7:客户操作系统内的透传后验证
分配设备还不够——您需要确凿证据证明一切均按预期运行!以下方法可帮助管理员快速验证Windows或Linux客户机的透传是否成功……
在 Linux 客户机中
在客户机操作系统内打开终端窗口并运行—
lspci | grep VGA # 应显示预期的GPU型号/厂商字符串。lsmod | grep vfio_pci # 应确认 vfio-pci 模块已成功加载dmesg # 扫描日志缓冲区末尾附近,特别查找提及直通设备的错误/警告!
glxinfo # 有用的合理性检查,用于确认OpenGL渲染器与预期的独立显卡名称/版本一致。ethtool <接口> # 用于网卡,确认链路速度/功能是否符合预期。smartctl # 用于存储控制器,验证 SMART 数据的可见性、可轮询性等。.
在 Windows 客户机中
打开设备管理器,查看“显示适配器”、“声音控制器”等类别。—已安装正确的驱动程序后,直通项目将不再显示警告三角形/感叹号。请把以下内容翻译成中文:请把以下内容翻译成中文:请把以下内容翻译成中文:请把以下内容翻译成中文:请把以下内容翻译成中文:请把以下内容翻译成中文:
如果出现错误代码(如 NVIDIA 显卡常见的“错误 43”):请参阅下方关于隐藏或绕过虚拟机监控程序签名的故障排除提示!
可选工具建议:如需深入分析,请使用 NirSoft DevManView 工具,该工具可为每个检测到的组件提供包括驱动程序版本、日期及状态字段在内的详细信息。
高级技巧与故障排除场景
即使是经验丰富的管理员有时也会遇到问题……以下是针对当前在 Proxmox 中部署 PCI 直通时最常见的问题所验证有效的解决方案:
1.尽可能始终将虚拟机类型设置为 q35,并搭配 OVMF UEFI 固件组合——这能最大程度提升兼容性,尤其是 GPU 直通场景!
2.请将属于同一张显卡的所有功能一并直通,例如显卡图形功能 + HDMI音频模块,否则 Windows/Linux 虚拟机可能在初始化时无声失败!
3.在客户机操作系统(而非宿主机)中安装所分配显卡/控制器的最新官方驱动程序……
4.NVIDIA 错误代码 43 的临时解决方案:在虚拟机配置文件(位于 /etc/pve/qemu-server/<vmid>.conf 的 .conf 文件)中添加以下行:args:-cpu host,kvm=on,hv_vendor_id=null。此举可隐藏 KVM/QEMU 签名,从而绕过驱动程序检测……
5.某些较旧或中端的 AMD 显卡存在重置错误,导致在多次启停虚拟机时无法重复使用,必须进行冷重启……解决方案?请严格按照 GitHub 上的说明,在宿主机上安装开源的 vendor-reset DKMS 模块……
6.如果遇到中断映射错误,请尝试添加内核参数:vfio_iommu_type1.allow_unsafe_interrupts=1。此方法仅作为临时措施,待正确修复后应立即停用,因其会禁用严格的安全部检查……
7.传递 USB 控制器通常需要整个集线器/组,这是由于芯片组设计限制所致……请通过之前运行的脚本或 lspci 输出确认分组情况……
8.NVMe SSD 超时?添加内核参数:nvme_core.default_ps_max_latency_us=0。
额外提示:务必随时记录所做的每一处更改,以便数月后仍能轻松回滚或排查问题……
适用于您的 Proxmox 虚拟机的企业级备份解决方案
当您在 Proxmox VE 中使用 PCI 直通配置高级工作负载后,必须采取措施保护这些虚拟机,防范因误删除、勒索软件攻击或硬件故障等导致的数据丢失事件。
Vinchin 备份与恢复是一款专业级虚拟机备份解决方案,专为满足企业需求而设计。它不仅对 Proxmox VE 提供强大支持,还支持 VMware、Hyper-V、oVirt/RHV/OLVM、XCP-ng/XenServer/Citrix Hypervisor 等平台。
它还具备诸多亮点功能,包括定时/重复备份、数据加密、多线程传输以及细粒度恢复能力——所有功能均可通过直观的基于网页的控制台进行访问,即使非专业人士也能快速上手。
在 Vinchin 的 Web 界面中,备份 Proxmox 虚拟机仅需四个简洁步骤:
(1)从清单中选择目标虚拟机;

(2)选择首选备份存储位置;

(3)配置备份策略;

(4)提交任务——内置进度监控功能。

下载他们功能齐全的免费试用版,有效期长达15天,亲身体验轻松部署——只需点击下方按钮,立即开始,即刻保护您最珍视的一切!
下载免费试用版
适用于多种数据备份
* 15天全功能免费安全下载
Proxmox PCI 直通常见问题解答
问题1:配置 PCI 直通前,我是否应先备份虚拟机?
A1:是的。PCI 直通配置的更改可能会影响虚拟机的启动能力以及硬件的可访问性。在修改虚拟机硬件设置之前创建备份,有助于在出现问题时快速恢复。
问题2:如果直通的GPU在重启后导致黑屏,我该如何安全地将服务器恢复原状?
A2:通过SSH远程连接,编辑黑名单/vfio.conf文件,删除问题条目,更新initramfs,然后重启;如有集成显卡接口,可回退使用该接口。
问题3:为什么我的USB控制器在分配后会从主机和客户机中都消失?
A3:许多USB集线器/控制器共享其设备组;只要可能,应始终传递整个设备组,而非单个功能。
Q4:与模拟虚拟硬件相比,我预期能获得多少性能提升?
A4:接近原生的速度。通常可达到裸机吞吐量的90%以上——前提是其他环节不存在瓶颈(例如CPU/内存分配不足)。
结论
PCI直通通过赋予虚拟机直接访问硬件的能力,充分释放Proxmox VE的全部潜力,使GPU、网卡(NIC)和存储控制器获得接近原生的性能表现。成功实施的关键在于严格的硬件兼容性要求(包括CPU及主板对IOMMU的支持)以及精确的配置。
虽然设置过程需要关注细节,但由此带来的延迟降低和对特定工作负载的支持效果显著。务必通过 lspci/dmesg 验证设备分组,并利用 Proxmox 的 Web 界面完成分配。熟练掌握这些步骤后,PCI 直通将成为您虚拟化工具箱中一项极具变革性的功能。