PVE 7.3 优化和显卡直通 – 凤曦的小窝 您所在的位置:网站首页 win10显卡驱动装不上错误43 PVE 7.3 优化和显卡直通 – 凤曦的小窝

PVE 7.3 优化和显卡直通 – 凤曦的小窝

2024-07-16 04:43| 来源: 网络整理| 查看: 265

本文编写时PVE(Proxmox Virtual Environment)版本为7.3-4,内核版本为5.15.83-1-pve请注意你使用的PVE版本号!!!

关于PVE

PVE本质上是基于Debian修改的Linux系统,硬件兼容性十分优秀有两套虚拟化内核,一套为KVM虚拟化,使用qemu作为虚拟化前端配置,另外一套为Linux原生的LXC容器虚拟化,类似于Docker

关于安装

PVE的安装和所有的Linux系统安装基本一致,制作ISO镜像,写入U盘,然后引导安装这里就详细展开写了,安装并不是很复杂,可以参考其他博客或者官方安装文档

不过有一点需要注意的,如果你准备虚拟化的机器没有核显并且使用的是NVIDIA RTX20系以上的显卡PVE官方安装引导镜像自带的nouveau驱动无法识别显卡信息,会无法驱动N卡输出画面表现为PVE引导安装启动后黑屏无输出,切换到tty2后可以看到Xorg输出报错信息

原因是PVE使用的安装镜像自带的nouveau版本比较低,锅是Debian上游的锅同理Debian安装也无法驱动RTX20系以上显卡(Debian你不修一修吗)

PVE令人无语的一点在于,它不提供CommandLine模式的GUI引导安装,所以Xorg模式下永远也没办法安装成功Debian至少可以通过Grub参数添加textonly nomodeset引导一个纯文本的Debian安装界面完成安装这个时候你需要使用Debian原生镜像安装Linux系统,然后通过PVE over Debian的方式安装PVE软件包

开启虚拟化 IOMMU

首先要保证BIOS中开启了VT-d或类似的虚拟化技术,否则是无法直通成功的然后我们需要在Grub引导中开启iommu

# 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

# PVE over Debian模式安装执行 update-grub2 # PVE引导镜像安装执行 pve-efiboot-tool refresh 加载对应的内核模块

在/etc/modules中添加以下模块

vfio vfio_pci vfio_virqfd vfio_iommu_type1 验证是否开启成功

重启之后,在终端输入

dmesg | grep remapping

出现如下例子。则代表成功

DMAR-IR: Enabled IRQ remapping in x2apic mode #或者 AMD-Vi: Interrupt remapping enabled

到这里已经可以直通PCI-E除显卡外的所有设备了,然而显卡直通还有更多要求和配置

显卡直通

显卡直通需要满足前面所有的配置,同时虚拟机芯片组必须是q35,BIOS最好是UEFI模式

AMD的显卡如果给黑苹果使用,则需要小心重启bugNVIDIA的显卡如果支持vGPU模式,可以配置虚拟PCI-E设备给虚拟机使用

下面的教程讲述的是全设备直通

屏蔽驱动

编辑/etc/modprobe.d/pve-blacklist.conf添加驱动屏蔽列表

# This file contains a list of modules which are not supported by Proxmox VE 2 # nidiafb see bugreport https://bugzilla.proxmox.com/show_bug.cgi?id=701 # Nvidia blacklist nvidiafb blacklist nouveau blacklist nvidia # AMD blacklist amdgpu blacklist radeon # Intel UHD blacklist snd_hda_codec_hdmi blacklist snd_hda_intel blacklist snd_hda_codec blacklist snd_hda_core options nouveau modeset=0

根据你的显卡类型来对应添加对应的驱动屏蔽如果你是NVIDIA的显卡,还需要执行

echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

现在开始查看你需要直通的显卡

lspci -knn | grep -i -A 2 vga OutPut: 17:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev e7) Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:0b31] Kernel driver in use: vfio-pci -- 65:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU104 [GeForce RTX 2080 Rev. A] [10de:1e87] (rev a1) Subsystem: ASUSTeK Computer Inc. TU104 [GeForce RTX 2080 Rev. A] [1043:865f] Kernel driver in use: vfio-pci

其中65:00是代表组名。65:00.0是代表65:00组的第一个设备1043:865f表示厂商ID:设备ID,直接通过lspci看的话可以看到音频设备甚至是USB设备这里我因为不需要对当前PCI-E设备组再拆分,所以直接略过

如果你需要设置显卡显示设备和音频设备单独直通,需要执行下面语句让PCI-E设备(显卡)由vfio驱动程序接管便于直通如果不需要单独直通,vfio驱动会在设置直通的时候自动接管PCI-E设备,可以不用配置vfio-pci

echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf #注意,上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。

然后执行下面命令更新引导配置

update-initramfs -u -k all

重启验证PCI-E显卡是否被vfio-pci驱动,Kernel driver in use: vfio-pci表示直通驱动成功

lspci -knn | grep -i -A 2 vga ...... Kernel driver in use: vfio-pci 添加设备 虚拟机设置

在对应需要直通的虚拟机中添加PCI设备,使用如上图所示设置勾选所有功能后同一IOMMU分组下所有PCIE设备都会进入直通

至此显卡直通已经完成,如果在虚拟机中安装完成以后出现驱动错误请继续往下看

Window错误代码43

网上有人说是CPU需要伪装,有的人说grub不需要那么多参数但是都不适用我的情况

如果你和我情况一样可以继续看下去注意PVE版本!!!注意PVE版本!!!注意PVE版本!!!

博主这边的CPU没有核显,独显作为输出设备的同时需要直通给虚拟机使用此时显卡直通是成功的,进入Windows虚拟机后也能正常安装驱动,但是,一旦重启以后就显示错误代码43,显卡无法被正常驱动

同时会在dmesg中输出如下提示

vfio-pci 0000:65:00.0: BAR 3: can't reserve [mem 0xca000000-0xcbffffff 64bit]

这是因为在PVE 7.3中,5.15的内核会启动一个simplefb作为默认的显示输出设备我们可以通过命令来确定是否有simplefb被加载了上面的mem后面的地址就是要查询的内存地址下面示例为修正以后的结果

cat /proc/iomem ...... 93000000-b5ffffff : PCI Bus 0000:16 a0000000-b01fffff : PCI Bus 0000:17 a0000000-afffffff : 0000:17:00.0 a0000000-afffffff : vfio-pci b0000000-b01fffff : 0000:17:00.0 b0000000-b01fffff : vfio-pci b5e00000-b5efffff : PCI Bus 0000:17 b5e00000-b5e3ffff : 0000:17:00.0 b5e00000-b5e3ffff : vfio-pci b5e40000-b5e5ffff : 0000:17:00.0 b5e60000-b5e63fff : 0000:17:00.1 b5e60000-b5e63fff : vfio-pci b5f00000-b5f00fff : 0000:16:05.4 b5ffc000-b5ffcfff : dmar0 b6000000-d8ffffff : PCI Bus 0000:64 c0000000-d20fffff : PCI Bus 0000:65 c0000000-cfffffff : 0000:65:00.0 c0000000-cfffffff : vfio-pci d0000000-d1ffffff : 0000:65:00.0 d0000000-d1ffffff : vfio-pci d2000000-d203ffff : 0000:65:00.2 d2000000-d203ffff : vfio-pci d2040000-d204ffff : 0000:65:00.2 d2040000-d204ffff : vfio-pci d7000000-d80fffff : PCI Bus 0000:65 d7000000-d7ffffff : 0000:65:00.0 d7000000-d7ffffff : vfio-pci d8080000-d8083fff : 0000:65:00.1 d8080000-d8083fff : vfio-pci d8084000-d8084fff : 0000:65:00.3 d8084000-d8084fff : vfio-pci d8100000-d8100fff : 0000:64:05.4 d8ffc000-d8ffcfff : dmar1

如果你的输出里面出现了simplefb的字样,说明显卡被simplefb驱动了,这就是导致错误的原因。我们可以修改grub引导菜单,添加一条指令就可以屏蔽simplefb的加载

# Intel CPU GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init" # AMD CPU GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt initcall_blacklist=sysfb_init"

别的教程会让你在grub中添加video=vesafb:off video=efifb:off来保证直通,不过在PVE 7.3版本中这两条指令就没有必要加了,因为都被simplefb取代了,需要用initcall_blacklist=sysfb_init让simplefb不加载vesafb是veas设备的fb,efifb是指uefi设备的fb

附录

参考链接:

https://www.xh86.me/?p=724 https://blog.csdn.net/fbllfbll/article/details/127345381 (没啥用的文章,居然搜索排名第一) https://xylog.cn/2020/03/03/proxmox-vga-nvidia.html (看起来有点用,但实际一点用都没) 声明: 本文采用 BY-NC-SA 协议进行授权,如无注明均为原创,转载请注明转自 凤曦的小窝 本文地址: PVE 7.3 优化和显卡直通


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有