PVE开启IOMMU(输入输出内存管理单元)硬件虚拟化支持

如何xxx

#type / howto #status / evergreen

[!info] related notes

PVE开启IOMMU(输入输出内存管理单元)硬件虚拟化支持

看到你提供的截图了,在“添加 PCI 设备”窗口中列表是空的,这通常是因为你的 PVE 还没有开启 IOMMU(输入输出内存管理单元)硬件虚拟化支持

没有开启 IOMMU,PVE 就无法把硬件(比如 N100 的核显)从宿主机里剥离并“穿透”给虚拟机。

要解决这个问题,我们需要从 BIOSPVE 系统内核两个地方进行配置。


第一步:检查 BIOS 设置

N100 必须在硬件层面先开启虚拟化支持:

  1. 重启 N100,按 DelF2 进入 BIOS。
  2. 找到 Intel Virtualization Technology (VT-x),设置为 Enabled
  3. 找到 VT-d(关键!),设置为 Enabled
  4. 保存并重启。

第二步:开启 PVE 内核 IOMMU 支持

即使 BIOS 开启了,Linux 内核默认也不会启动这个功能。

  1. 进入 PVE 的 Shell

  2. 编辑 Grub 配置文件(假设你使用的是标准的 Grub 引导):

    nano /etc/default/grub
  3. 找到这一行

    GRUB_CMDLINE_LINUX_DEFAULT="quiet"

  4. 修改为(添加 intel_iommu=on iommu=pt):

    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

    • intel_iommu=on 开启 Intel 平台的 IOMMU。
    • iommu=pt (Pass-Through) 提高未穿透设备的使用性能。
  5. 保存退出(按 Ctrl+O 然后回车,再按 Ctrl+X)。

  6. 更新引导记录

    update-grub

第三步:添加必要的系统内核模块

我们需要告诉 PVE 加载用于“穿透”的驱动模块。

  1. 在 Shell 中编辑模块文件:

    nano /etc/modules
  2. 在文件末尾添加以下四行内容:

    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
  3. 保存并退出。


第四步:重启并验证

  1. 重启 PVE 宿主机

  2. 重启后,再次进入 Shell,输入以下命令检查 IOMMU 是否生效:

    dmesg | grep -e DMAR -e IOMMU
    • 如果看到类似 IOMMU enabled 或者 Directed I/O 的字样,说明成功了。
  3. 回到网页后台,再次尝试给 fnOS 添加 PCI 设备,你会发现列表里出现了长长的一串设备,找到那个 VGA compatible controller (Intel) 勾选即可。

创建于 2026/1/31 更新于 2026/5/27