PVE开启网卡直通,显卡直通,USB直通。
第一步:确认自己的主板CPU是否支持Vt-d功能 不支持就搞不了直通。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。
VT-D是io虚拟化。不是VT-X,以为主板开启虚拟化功能,就能直通了,其实不是!要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。
第二步:开启iommu #编辑grub,请不要盲目改。根据自己的环境选择设置
1 2 3 4 5 6 7 8 9 vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT ="quiet" GRUB_CMDLINE_LINUX_DEFAULT ="quiet intel_iommu=on iommu=pt" GRUB_CMDLINE_LINUX_DEFAULT ="quiet amd_iommu=on iommu=pt" video =vesafb:off video =efifb:off video =simplefb:off
加了之后,pve重启进内核后停留在一个画面,这是正常情况
1 GRUB_CMDLINE_LINUX_DEFAULT ="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"
修改完成之后,直接更新grub
注意,如果此方法还不能开启iommu,请修改 /etc/kernel/cmdline文件 并且使用proxmox-boot-tool refresh 更新启动项
第三步 加载相应的内核模块 1 2 3 4 echo vfio >> /etc/modules echo vfio_iommu_type1 >> /etc/modules echo vfio_pci >> /etc/modules echo vfio_virqfd >> /etc/modules
使用update-initramfs -k all -u命令更新内核参数->重启主机
第四步 验证是否开启iommu 重启之后,在终端输入dmesg | grep iommu
出现如下例子。则代表成功
1 2 3 4 5 pci 0000 :00 :00 .0 : Adding to iommu group 0 pci 0000 :00 :01 .0 : Adding to iommu group 1 pci 0000 :00 :02 .0 : Adding to iommu group 2 pci 0000 :00 :14 .0 : Adding to iommu group 3 pci 0000 :00 :17 .0 : Adding to iommu group 4
此时输入命令
1 2 find /sys/ kernel/iommu_groups/ -type l
直通显卡 1.首先屏蔽显卡驱动 直通AMD显卡,请使用下面命令 1 echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
直通NVIDIA显卡,请使用下面命令 1 2 3 echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
直通INTEL核显,请使用下面命令, 注意!如果使用Gvt-G,请不要使用下面的命令
1 2 3 echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf
2、把显卡绑定到vfio-pci 使用lspci 查看自己的显卡PCI地址,如02:00使用lspci -n 查看显卡的did和vid。我这边是02:00,可以看到下面输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 root @pve1:~# lspci -n00 :00 .0 0600 : 8086 :3 ec4 (rev 0 a)00 :01 .0 0604 : 8086 :1901 (rev 0 a)00 :02 .0 0300 : 8086 :3 e9b00:14 .0 0 c03: 8086 :a12f (rev 31 )00 :17 .0 0106 : 8086 :a102 (rev 31 )00 :1 c.0 0604 : 8086 :a114 (rev f1)00 :1 d.0 0604 : 8086 :a118 (rev f1)00 :1 d.2 0604 : 8086 :a11a (rev f1)00 :1 d.3 0604 : 8086 :a11b (rev f1)00 :1 f.0 0601 : 8086 :a148 (rev 31 )00 :1 f.2 0580 : 8086 :a121 (rev 31 )00 :1 f.3 0403 : 8086 :a170 (rev 31 )00 :1 f.4 0 c05: 8086 :a123 (rev 31 )00 :1 f.6 0200 : 8086 :15 b8 (rev 31 )01 :00 .0 0200 : 15 b3:100302 :00 .0 0100 : 10 de:1381 (rev 03 )02 :00 .1 0100 : 10 de:0 fbc (rev 03 )03 :00 .0 0108 : 8086 :f1a6 (rev 03 )04 :00 .0 0604 : 1 b21:1080 (rev 04 )
02:00.0 02:00.1一个是GPU,一个是声卡,两者都要一起直通,所以通过命令,把2者都绑定到vfio-pci上。
1 2 echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf
上述操作完成之后,再检查一下,是否将例子内容替换成自己的。使用以下命令查看。
1 2 cat /etc/modprobe.d/blacklist.conf cat /etc/modprobe.d/vfio.conf
3、更新内核 对于nvidia显卡:
1 2 3 echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf update -initramfs -k all -u
随后重启
4、开始直通 新建一个虚拟机。根据自己的爱好,选择ovmf或者seabios,通常来说两者对独显直通没有影响,建议nvidia 9系以上选择OVMF,其他选择seabios。打开虚拟机面板,正常安装系统,并且开启远程桌面或者安装好向日葵。 随后点击添加 PCI设备 注意!!!不要勾选主GPU!。如果不能勾选PCIE,那么一定要把虚拟机改成Q35类型。 随后开机,如果能正常启动,那么就安装NVIDIA最新驱动。 提示:由于某些消费级主板PCI的设计问题,你可能只能直通第一个PCIe x16槽的显卡。
核显直通 如果想要核显显示到显示器。虚拟机请使用Seabios,机型为i440fx并且在bios中开启CSM。 核显直通过程与上面的独显直通1-3步骤一样。请参考上文。
完成了前面的步骤,那么现在就是配置虚拟机。使用命令配置虚拟机
1 qm set <vmid> -args "-device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on"
如果你的VMID是101,那么命令应该是
此种直通是基于UDT模式,适用于5代以上的CPU核显。如果你打算直通到群晖,需要在GUI面板上,将显卡设置成无,添加串口设备用于调试,同时将核显位置绑定到虚拟机的00:02位置,所以应该执行该命令
如果你把上面的命令输错了,或者有问题,你可以使用命令
1 qm set 101 --delete args
删除此args参数,或者修改vm的配置文件如果通过上述操作,核显不能输出到显示器,那么你应该尝试传统方式,即将bios改成seabios,使用传统模式装好系统,开启远程,将显卡设置成无,将核显绑定到00:02位置(和群晖命令相同)。使用远程方式进系统安装驱动。如果上面操作还是不行,请尝试添加vbios,关于什么是vbios,请百度一下,如何提取vbios
硬盘直通 此部分请参考 网卡直通
网卡直通 正常情况下,网卡直通不会有什么困难。在开启iommu之后,即可在Web页面上,将网卡作为PCIe设备添加即可。但,你需要确保没有直通到PVE的管理网口。否则你的PVE会失联。且PVE没有使用此网卡。 注意!由于供应商的问题,可能一张物理网卡会有多个逻辑的网口,这些网口会在同一个PCIe地址上, 有2种情况: 1、一个网口为PVE管理口,一个网口直通给虚拟机此种情况,请参考上面,进行直通,请勿勾选 所有功能。 2、分别直通给虚拟机。由于多个网卡位于同一个PCI地址上,可能会在一个iommu组里,只能将这些网卡同时直通给一个虚拟机,否则会报错。 你需要确认网卡是否在同一个iommu组,执行下面命令:
1 for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*} ; n=${n%%/*} ; printf 'IOMMU Group %s ' "$n " ; lspci -nns "${d##*/} " ; done |grep Eth
从输出看,2个I350网卡分别在组19和20上,就意味着可以分开直通给虚拟机。如果同一个iommu组,那么就需要利用PCIe桥的ACS特性,这部分请参考IOMMU是如何划分PCI device group的? 情况1: 版本低于7.1你需要安装破解内核,才能开启ACS强制。 情况2:PVE版本为7.1+你可以在GRUB上配置一个命令即可完成。 在grub文件里添加一个参数pcie_acs_override=downstreamgrub如下
1 2 3 4 5 GRUB_DEFAULT =0 GRUB_TIMEOUT =5 GRUB_DISTRIBUTOR =`lsb_release -i -s 2 > /dev/null || echo Debian`GRUB_CMDLINE_LINUX_DEFAULT ="quiet intel_iommu=on pcie_acs_override=downstream" GRUB_CMDLINE_LINUX =""
随后进行保存,并且更新内核,更新grub
1 2 update -grubupdate -initramfs -k all -u
随后重启
黑苹果 虚拟机可以创建黑苹果,随后直通硬件到虚拟机,可以获得相关的性能提升。黑苹果,你需要以PCI方式直通硬件(请勿勾选PCIe)。最好使用免驱显卡,这样可以直接输出到显示器。如果不是免驱显卡,那么请自行进系统之后,配置Opencore。黑苹果不支持gvt-g