跳转到内容

硬件直通 ​

直通(passthrough)是把一个物理 PCI 设备整个从宿主机剥离,交给某一台虚拟机独占。它让 NAS 虚拟机能直接管硬盘、让转码虚拟机能用核显、让软路由虚拟机能用真网卡。

这是 PVE 里最容易出问题的功能,也是本站最谨慎对待的章节。

先认清代价 ​

直通不是免费的

一台挂了直通设备的虚拟机,会失去这些能力:

  • 不能打快照(多数情况下)。设备状态没法保存。
  • 不能在线迁移。目标节点上没有同一个物理设备。
  • 内存必须全部预分配,气球驱动不可用。
  • 宿主机看不到这个设备了。直通 HBA 之后,宿主机上的 lsblk 不再显示那些硬盘。

决定直通之前,确认这些代价你能接受。特别是「不能快照」这一条——它会改变你的备份策略。

直通配错可能让宿主机无法启动

把宿主机正在使用的设备(系统盘控制器、唯一的网卡、正在输出显示的显卡)直通出去,会导致宿主机启动失败或失去管理能力。

开始之前确保你有:物理控制台,或者一个不依赖被直通设备的管理路径。

前提条件 ​

条件怎么确认
CPU 支持 VT-d / AMD-Vi规格页
主板支持并已在 BIOS 中开启BIOS 里找 IOMMU / VT-d
内核启用了 IOMMU见下文
目标设备在一个干净的 IOMMU 分组里见下文

快速确认 IOMMU 是否已生效:

sh
dmesg | grep -e DMAR -e IOMMU | head

看到 IOMMU enabled 之类的行说明内核这边开了。完全没有输出,说明 BIOS 里没开或者内核参数没加。

看分组情况:

sh
for d in /sys/kernel/iommu_groups/*/devices/*; do
  n=${d#*/iommu_groups/}; n=${n%%/*}
  printf 'Group %s: ' "$n"
  lspci -nns "${d##*/}"
done | sort -V

分组决定了能不能直通

IOMMU 分组是硬件层面的隔离单位。一个分组里的设备只能整组直通。如果你的显卡和 USB 控制器、网卡挤在同一个分组里,就只能一起给出去——而如果那个分组里还有宿主机需要的设备,这个直通就做不了。

分组情况由主板的 PCIe 拓扑决定,换插槽有时会改变分组。

本章文章 ​

  1. 开启 IOMMU:GRUB 与 systemd-boot:让内核认得到 VT-d/AMD-Vi,两种引导方式的不同改法。
  2. 读懂 IOMMU 分组:判断你的目标设备能不能干净地单独直通出去。
  3. 显卡直通:独显与核显:绑定 vfio-pci、配置 OVMF,避免常见黑屏原因。
  4. SR-IOV 与 vGPU:把一张网卡或显卡拆成多个虚拟功能,分给不同虚拟机。
  5. 硬盘与 HBA 直通:NAS 虚拟机的正确做法:直通整张 HBA 卡而不是单块硬盘。
  6. USB 与串口直通:比 PCI 直通简单得多的场景,例如 Zigbee 网关和许可证狗。
  7. 资源映射(Resource Mapping):把直通配置和物理地址解耦,方便集群迁移和分权限。
  8. 直通常见问题:黑屏、Code 43 与设备无法重置:三类最常见故障的排查思路。

内容状态:对照官方文档整理,尚未在本站实机验证

以上文章已逐项对照 Proxmox 官方 Wiki 的 PCI(e) Passthrough / PCI Passthrough 条目和管理指南的 qm 章节核实过菜单路径、命令语法和配置项含义,但本站还没有在自己的硬件上完整跑通验证(文章顶部因此只标注"资料核查"而不是"实机核验")。

直通行为对 CPU 代次、主板型号、固件版本、显卡/网卡型号高度敏感,你的实际结果可能和文章描述不同,尤其是 Code 43、复位缺陷这类和具体芯片相关的问题。动手前预留回退时间,遇到和本站描述不一致的地方,优先信任你自己机器上的实际现象,并参考文末列出的官方资料确认。

一个更简单的替代方案 ​

很多人做直通是为了让 NAS 虚拟机管理硬盘。如果你只有一两块数据盘,还有两个更简单的选项:

  1. 直通整个磁盘(不是 PCI 控制器):用 qm set <vmid> -scsi1 /dev/disk/by-id/<磁盘ID>。比 PCI 直通简单,但客户机拿不到 SMART 信息,ZFS 的一些特性也受影响。
  2. 宿主机管盘,容器做共享:宿主机上建 ZFS 池,用 LXC 容器跑 Samba。省掉整个直通话题。

直通 HBA 卡才是 NAS 虚拟机的推荐做法

如果确实要跑 TrueNAS 这类依赖直接访问磁盘的系统,直通整张 HBA 卡(而不是单块盘)才是官方推荐的做法——ZFS 需要真正看到磁盘和它的 SMART 数据。这需要一张独立的 HBA 卡,以及它在一个干净的 IOMMU 分组里。

继续浏览 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。