PVE8开启虚拟化的时候死活开不开,记录分享一下(前提条件:主板BIOS开启VT-D)

自行安装PVE,废话不多说,开搞

下面按照网上的教程开启iommu和vfio

开启iommu

vim /etc/default/grub
#找到
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#intel cpu 改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
#amd cpu改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

更新grub

update-grub

加载vfio模块

echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules

还有一个 vfio_virqfd,查资料说是在内核6.2以上的版本中vfio已包含了,就没加,有需要自行添加

更新内核参数

update-initramfs -k all -u

重启后检查一下是否成功开启

dmesg | grep -e DMAR

神奇的来了,返回结果

[    0.012250] ACPI: DMAR 0x000000006B93DCE0 000148 (v01 ALASKA A M I    00000001 INTL 20091013)
[    0.012308] ACPI: Reserving DMAR table memory at [mem 0x6b93dce0-0x6b93de27]
[    0.462094] DMAR: IOMMU enabled
[    0.483347] DMAR: [Firmware Bug]: Your BIOS is broken; DMAR reported at address c5ffc000 returns all ones!
[    1.202547] DMAR: Host address width 46
[    1.202549] DMAR: DRHD base: 0x000000c5ffc000 flags: 0x0
[    1.202560] DMAR: Failed to map dmar0
[    1.202563] DMAR: Parse DMAR table failure

PVE的WEB页面配置PCI直通显示

NO IOMMU Detected

反复检查BIOS设置,确定该开的都开了,我的主板D2143D8UM的datto版本,4根64G LRDIMM内存条,更新bios后还是错误,把内存条更换了也一样,最后发现是显卡的问题,PCIE x8的插槽插了一张的NVIDIA P600的显卡拔了之后正常了

屏蔽系统中的开源显卡驱动避免开启显卡被系统加载

echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf

接下来参考这位大佬的博客(如何下载NVIDIA vGPU软件(驱动)(图文+视频) - 丁乾的博客)下载驱动

将Host_Drivers中的NVIDIA-Linux-x86_64-535.230.02-vgpu-kvm.run复制到PVE中

首先安装前置依赖 apt install build-essential dkms mdevctl pve-headers-$(uname -r)

chmod +x NVIDIA-Linux-x86_64-535.230.02-vgpu-kvm.run
./NVIDIA-Linux-x86_64-535.230.02-vgpu-kvm.run

然后提示

ERROR: The Nouveau kernel driver is currently in use by your system.

继续找解决方法

把原 /etc/modprobe.d/blacklist.confblacklist nouveau 移除,vim /etc/modprobe.d/blacklist-nouveau.conf

添加以下内容

blacklist nouveau
options nouveau modeset=0

再次运行 ./NVIDIA-Linux-x86_64-535.230.02-vgpu-kvm.run

重启后进入PVE的WEB页面就可以划分 PCI-E 设备给虚拟机了