PVE开启IOMMU(输入输出内存管理单元)硬件虚拟化支持
如何xxx
#type / howto
#status / evergreen
[!info] related notes
PVE开启IOMMU(输入输出内存管理单元)硬件虚拟化支持
看到你提供的截图了,在“添加 PCI 设备”窗口中列表是空的,这通常是因为你的 PVE 还没有开启 IOMMU(输入输出内存管理单元)硬件虚拟化支持。
没有开启 IOMMU,PVE 就无法把硬件(比如 N100 的核显)从宿主机里剥离并“穿透”给虚拟机。
要解决这个问题,我们需要从 BIOS 和 PVE 系统内核两个地方进行配置。
第一步:检查 BIOS 设置
N100 必须在硬件层面先开启虚拟化支持:
- 重启 N100,按
Del或F2进入 BIOS。 - 找到 Intel Virtualization Technology (VT-x),设置为 Enabled。
- 找到 VT-d(关键!),设置为 Enabled。
- 保存并重启。
第二步:开启 PVE 内核 IOMMU 支持
即使 BIOS 开启了,Linux 内核默认也不会启动这个功能。
-
进入 PVE 的 Shell。
-
编辑 Grub 配置文件(假设你使用的是标准的 Grub 引导):
nano /etc/default/grub -
找到这一行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet" -
修改为(添加
intel_iommu=on iommu=pt):GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"intel_iommu=on开启 Intel 平台的 IOMMU。iommu=pt(Pass-Through) 提高未穿透设备的使用性能。
-
保存退出(按
Ctrl+O然后回车,再按Ctrl+X)。 -
更新引导记录:
update-grub
第三步:添加必要的系统内核模块
我们需要告诉 PVE 加载用于“穿透”的驱动模块。
-
在 Shell 中编辑模块文件:
nano /etc/modules -
在文件末尾添加以下四行内容:
vfio vfio_iommu_type1 vfio_pci vfio_virqfd -
保存并退出。
第四步:重启并验证
-
重启 PVE 宿主机。
-
重启后,再次进入 Shell,输入以下命令检查 IOMMU 是否生效:
dmesg | grep -e DMAR -e IOMMU- 如果看到类似
IOMMU enabled或者Directed I/O的字样,说明成功了。
- 如果看到类似
-
回到网页后台,再次尝试给 fnOS 添加 PCI 设备,你会发现列表里出现了长长的一串设备,找到那个 VGA compatible controller (Intel) 勾选即可。