Proxmox VE 直通显卡方案及解决N卡Code43 2022-06-11 服务器 暂无评论 13089 次阅读 坑太多,简单概括注意事项:`vt-d`、`iommu`、`UEFI`、`pc-q35-3.1`、`vfio`。 ![proxmox.jpg](https://blog.moper.net/usr/uploads/2022/06/2342273133.jpg) #参数设置 修改`/etc/default/grub`,找到`GRUB_CMDLINE_LINUX_DEFAULT`,按CPU类型分别修改为 ``` GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on" ``` 比如,我是Intel的 ![proxmox-1.jpg](https://blog.moper.net/usr/uploads/2022/06/3069149698.jpg) 然后修改`/etc/modules`,加上\`\`,一个一行: ``` vfio vfio_iommu_type1 vfio_pci vfio_virqfd ``` 理论上里面只会有这些 ![proxmox-2.jpg](https://blog.moper.net/usr/uploads/2022/06/1491211554.jpg) 然后屏蔽显卡驱动: ``` echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf ``` ![proxmox-3.jpg](https://blog.moper.net/usr/uploads/2022/06/684396479.jpg) 像这样然后, ``` echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf ``` #VFIO(可选) 为什么是可选呢?因为部分机器执行此操作后可能无法输出到外接显示器,如出现问题请尝试撤回这一步。 首先,查看显卡的ID。我这里有三张显卡,ID在前面: ``` root@pve:~# lspci -v | grep VGA 02:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Caicos XT [Radeon HD 7470/8470 / R5 235/310 OEM] (prog-if 00 [VGA controller]) 04:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) (prog-if 00 [VGA controller]) 09:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 30) (prog-if 00 [VGA controller]) ``` 以N卡为例,ID为02:00:0,继续执行: ``` root@pve:~# lspci -n -s 02:00 02:00.0 0300: 1002:6778 02:00.1 0403: 1002:aa98 ``` 会得到显卡和显卡内置音频的另一个ID,我这里是1002:6778和1002:aa98。 接下来把这两个ID加入VFIO(记得ID改成自己的!): ``` echo "options vfio-pci ids=1002:6778,1002:aa98 disable_vga=1"> /etc/modprobe.d/vfio.conf ``` 如出现无法输出到外接显示器可以试试以下,如还无法使用请清空vfio.conf。 ``` echo "options vfio-pci ids=1002:6778,1002:aa98"> /etc/modprobe.d/vfio.conf ``` 然后应用更改: ``` update-grub update-initramfs ``` 重启PVE主机。 #创建虚拟机 启动类型要设置为OVMF(UEFI) ,需要添加EFI磁盘。创建成功后,修改主机类型: ``` qm set 100 -machine pc-q35-3.1 ``` 接着在PVE界面中添加显卡,打钩除了【主GPU】之外的三个选项。参考配置如下,终点部分已圈出这时候环境就基本配置完毕了。 ![proxmox-4.jpg](https://blog.moper.net/usr/uploads/2022/06/2659275673.jpg) #安装操作系统 这时候先不要接显示器。在PVE内安装系统,随后安装virtio驱动。 #N卡有毒 系统安装好只后,如果显卡(尤其是N卡)不工作,设备管理器出现Code 43:来自nvidia的亲切问候:Code43就需要进一步的操作了。 不建议尝试破解N卡驱动,它可能直接甩安装失败到你脸上。 ![proxmox-5.jpg](https://blog.moper.net/usr/uploads/2022/06/4212892199.jpg) #伪装CPU ``` nano /etc/pve/qemu-server/<你的虚拟机的ID>.conf ``` 找到CPU那一行,删掉,然后改为: ``` cpu: host,hidden=1,flags=+pcid args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off' ``` ![proxmox-6.jpg](https://blog.moper.net/usr/uploads/2022/06/3599267892.jpg) 这两个,圈出来了卸载n卡驱动,停止再启动虚拟机,等待驱动安装。 如果43错误消失,就可以跳到下一章了。 #获取RomFile ``` cd /sys/bus/pci/devices/0000:02:00.0/ #这是上一步的显卡的ID echo 1 > rom cat rom > /usr/share/kvm/.bin echo 0 > rom ``` 修改虚拟机配置(上面提到的conf),在`hostpci0`一行最后,加上`,romfile=.bin `卸载n卡驱动,停止再启动虚拟机,等待驱动安装。如果还是不行......emmmm,N卡有毒,使用需谨慎。 #最后 插上外接显示器,检查是否可以点亮。如果可以,在虚拟机硬件配置页面找到显卡,编辑,勾选【主GPU】。停止再启动虚拟机,如果显示器照常点亮,就是成功了。 注意: 此时PVE网页端的VNC将无法使用。 参考文章:Ultimate Beginner's Guide to Proxmox GPU Passthrough https://www.reddit.com/r/homelab/comments/b5xpua/the_ultimate_beginners_guide_to_gpu_passthrough/ 转自https://xylog.cn/2020/03/03/proxmox-vga-nvidia.html 标签: PVE 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。