Proxmox VE 直通显卡方案及解决N卡Code43

Proxmox VE 直通显卡方案及解决N卡Code43

三月 03, 2020

坑太多,简单概括注意事项:vt-diommuUEFIpc-q35-3.1vfio

参数设置

修改/etc/default/grub,找到GRUB_CMDLINE_LINUX_DEFAULT,按CPU类型分别修改为

1
2
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

比如,我是Intel的比如,我是Intel的
然后修改/etc/modules,加上``,一个一行:

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

理论上里面只会有这些理论上里面只会有这些
然后屏蔽显卡驱动:

1
2
3
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf

像这样像这样
然后,

1
2
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在前面:

1
2
3
4
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,继续执行:

1
2
3
root@pve:~# lspci -n -s 02:00
02:00.0 0300: 1002:6778
02:00.1 0403: 1002:aa98

会得到显卡和显卡内置音频的另一个ID,我这里是1002:67781002:aa98
接下来把这两个ID加入VFIO(记得ID改成自己的!):

1
echo "options vfio-pci ids=1002:6778,1002:aa98 disable_vga=1"> /etc/modprobe.d/vfio.conf

如出现无法输出到外接显示器可以试试以下,如还无法使用请清空vfio.conf

1
echo "options vfio-pci ids=1002:6778,1002:aa98"> /etc/modprobe.d/vfio.conf

然后应用更改:

1
2
update-grub
update-initramfs

重启PVE主机。

创建虚拟机

启动类型要设置为OVMF(UEFI) ,需要添加EFI磁盘。创建成功后,修改主机类型:

1
qm set 100 -machine pc-q35-3.1

接着在PVE界面中添加显卡,打钩除了【主GPU】之外的三个选项。
参考配置如下,终点部分已圈出参考配置如下,终点部分已圈出
这时候环境就基本配置完毕了。

安装操作系统

这时候先不要接显示器。在PVE内安装系统,随后安装virtio驱动。

N卡有毒

系统安装好只后,如果显卡(尤其是N卡)不工作,设备管理器出现Code 43:
来自nvidia的亲切问候:Code43来自nvidia的亲切问候:Code43
就需要进一步的操作了。
不建议尝试破解N卡驱动,它可能直接甩安装失败到你脸上。

伪装CPU

1
nano /etc/pve/qemu-server/<你的虚拟机的ID>.conf

找到CPU那一行,删掉,然后改为:

1
2
cpu: host,hidden=1,flags=+pcid
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off'

这两个,圈出来了这两个,圈出来了
卸载n卡驱动,停止再启动虚拟机,等待驱动安装。
如果43错误消失,就可以跳到下一章了。

获取RomFile

1
2
3
4
cd /sys/bus/pci/devices/0000:02:00.0/ #这是上一步的显卡的ID
echo 1 > rom
cat rom > /usr/share/kvm/<GPURomFileName>.bin
echo 0 > rom

修改虚拟机配置(上面提到的conf),在hostpci0一行最后,加上,romfile=<GPURomFileName>.bin
卸载n卡驱动,停止再启动虚拟机,等待驱动安装。如果还是不行……emmmm,N卡有毒,使用需谨慎。

最后

插上外接显示器,检查是否可以点亮。如果可以,在虚拟机硬件配置页面找到显卡,编辑,勾选【主GPU】。停止再启动虚拟机,如果显示器照常点亮,就是成功了。

注意: 此时PVE网页端的VNC将无法使用。
参考文章:Ultimate Beginner’s Guide to Proxmox GPU Passthrough