PVE开启网卡直通,显卡直通,USB直通。请务必看完此文章,再结合自己实际,操作,如果成功,请再下面评论,自己的平台,有助于网友交流。
第一步:确认自己的主板CPU是否支持Vt-d功能
不支持就搞不了直通。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。
VT-D是io虚拟化。不是VT-X,具体请参考下面文章
https://zhuanlan.zhihu.com/p/50640466
有很多新手,以为主板开启虚拟化功能,就能直通了,其实不是!要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。
第二步:开启iommu
#编辑grub,请不要盲目改。根据自己的环境,选择设置
vi /etc/default/grub
#在里面找到:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#然后修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
#如果是amd cpu请改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
#如果是需要显卡直通,建议在cmdline再加一句video=vesafb:off video=efifb:off video=simplefb:off,加了之后,pve重启进内核后停留在一个画面,这是正常情况
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"
修改完成之后,直接更新grub
update-grub
注意,如果此方法还不能开启iommu,请修改
/etc/kernel/cmdline文件
并且使用proxmox-boot-tool refresh 更新启动项
第三步 加载相应的内核模块
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.341100] pci 0000:00:00.0: Adding to iommu group 0
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4
此时输入命令
find /sys/kernel/iommu_groups/ -type l
#出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启
显卡直通
理论上AMD RADEON 5xxx, 6xxx, 7xxx, Navi 5XXX(XT), NVIDIA GEFORCE 7, 8, GTX 4xx, 5xx, 6xx, 7xx, 9xx, 10xx and RTX 16xx/20xx/30xx都可以成功直通。
但是对于NVIDIA显卡,建议使用9代以上中端卡直通,且使用最新的驱动。
对于AMD的APU3/5系列核显/RX4XX/5XX/6XXX均无法完美直通。无法使用本文提供的教程直通,请注意,有其他的教程,但由于我没有卡,无法撰写教程
1、直接屏蔽显卡驱动
#直通AMD显卡,请使用下面命令
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
#直通NVIDIA显卡,请使用下面命令
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,请不要使用下面的命令
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,可以看到下面输出
- root@pve1:~# lspci -n
- 00:00.0 0600: 8086:3ec4 (rev 0a)
- 00:01.0 0604: 8086:1901 (rev 0a)
- 00:02.0 0300: 8086:3e9b
- 00:14.0 0c03: 8086:a12f (rev 31)
- 00:17.0 0106: 8086:a102 (rev 31)
- 00:1c.0 0604: 8086:a114 (rev f1)
- 00:1d.0 0604: 8086:a118 (rev f1)
- 00:1d.2 0604: 8086:a11a (rev f1)
- 00:1d.3 0604: 8086:a11b (rev f1)
- 00:1f.0 0601: 8086:a148 (rev 31)
- 00:1f.2 0580: 8086:a121 (rev 31)
- 00:1f.3 0403: 8086:a170 (rev 31)
- 00:1f.4 0c05: 8086:a123 (rev 31)
- 00:1f.6 0200: 8086:15b8 (rev 31)
- 01:00.0 0200: 15b3:1003
- 02:00.0 0100: 10de:1381 (rev 03) 02:00.1 0100: 10de:0fbc (rev 03)
- 03:00.0 0108: 8086:f1a6 (rev 03)
- 04:00.0 0604: 1b21:1080 (rev 04)
02:00.0 02:00.1一个是GPU,一个是声卡,两者都要一起直通,所以通过命令,把2者都绑定到vfio-pci上。
echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf
#注意,上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。
上述操作完成之后,再检查一下,是否将例子内容替换成自己的。使用以下命令查看。
cat /etc/modprobe.d/blacklist.conf
cat /etc/modprobe.d/vfio.conf
root@pve:~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
[ 0.012533] ACPI: DMAR 0x000000007ACBE858 000118 (v01 ALASKA A M I 00000001 INTL 20091013)
[ 0.012569] ACPI: Reserving DMAR table memory at [mem 0x7acbe858-0x7acbe96f]
[ 0.087008] DMAR: IOMMU enabled
[ 0.244511] DMAR: Host address width 46
[ 0.244514] DMAR: DRHD base: 0x000000fbffc000 flags: 0x0
[ 0.244521] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[ 0.244526] DMAR: DRHD base: 0x000000c7ffd000 flags: 0x0
[ 0.244531] DMAR: dmar1: reg_base_addr c7ffd000 ver 1:0 cap 8d2008c10ef0466 ecap f0205b
[ 0.244535] DMAR: DRHD base: 0x000000c7ffc000 flags: 0x1
[ 0.244539] DMAR: dmar2: reg_base_addr c7ffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[ 0.244543] DMAR: RMRR base: 0x0000007b3e0000 end: 0x0000007b3f0fff
[ 0.244546] DMAR: ATSR flags: 0x0
[ 0.244549] DMAR: RHSA base: 0x000000c7ffc000 proximity domain: 0x0
[ 0.244552] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x1
[ 0.244556] DMAR-IR: IOAPIC id 3 under DRHD base 0xfbffc000 IOMMU 0
[ 0.244559] DMAR-IR: IOAPIC id 1 under DRHD base 0xc7ffc000 IOMMU 2
[ 0.244562] DMAR-IR: IOAPIC id 2 under DRHD base 0xc7ffc000 IOMMU 2
[ 0.244565] DMAR-IR: HPET id 0 under DRHD base 0xc7ffc000
[ 0.244568] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
[ 0.244568] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting.
[ 0.245582] DMAR-IR: Enabled IRQ remapping in xapic mode
[ 0.912919] DMAR: No SATC found
[ 0.912923] DMAR: IOMMU feature sc_support inconsistent
[ 0.912924] DMAR: IOMMU feature dev_iotlb_support inconsistent
[ 0.912926] DMAR: IOMMU feature sc_support inconsistent
[ 0.912928] DMAR: IOMMU feature dev_iotlb_support inconsistent
[ 0.912931] DMAR: dmar1: Using Queued invalidation
[ 0.912938] DMAR: dmar0: Using Queued invalidation
[ 0.912942] DMAR: dmar2: Using Queued invalidation
[ 0.922490] DMAR: Intel(R) Virtualization Technology for Directed I/O
3、更新内核
对于nvidia显卡,需要
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。估摸着核显需要到pci的00:02位置才能亮。
目前IGD( Intel Graphics Device)直通理论上支持3代酷睿以上。但是从目前的直通结果看,比较容易的是5代-10代。3-4代直通成功概率低,受多方面影响。11代及其之后,直到目前,也能正常直通,建议11代以上,升级到内核6.1,再直通
amd 3400g 5xxg 需要vender reset才能直通(本文教程不适合)。
核显直通过程与上面的独显直通1-3步骤一样。请参考上文。
假设你已经完成了前面的步骤,那么现在就是配置虚拟机。
使用命令配置虚拟机
qm set -args “-device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on”
如果你的VMID是101,那么命令应该是
qm set 101 -args “-device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on”
此种直通是基于UDT模式,适用于5代以上的CPU核显。
如果你打算直通到群晖,需要在GUI面板上,将显卡设置成无,添加串口设备用于调试,同时将核显位置绑定到虚拟机的00:02位置,所以应该执行该命令
qm set 101 -args “-device vfio-pci,host=00:02.0,addr=0x02,x-vga=on,x-igd-opregion=on”
update-initramfs -u -k all && reboot now
options vfio_iommu_type1 allow_unsafe_interrupts=1
options kvm ignore_msrs=1
options kvm-intel nested=Y
blacklist nouveau
options nouveau modeset=0
blacklist nvidiafb
blacklist amdgpu
blacklist radeon
blacklist nvidia
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
update-initramfs -u -k all && reboot now