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.conf
中 blacklist 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 设备给虚拟机了