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代以上中端卡直通,且使用最新的驱动。
[c-alert type="warning"]对于AMD的APU3/5系列核显/RX4XX/5XX/6XXX均无法完美直通。无法使用本文提供的教程直通,请注意,有其他的教程,但由于我没有卡,无法撰写教程[/c-alert]
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
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.2,再直通
amd 3400g 5xxg 需要vender reset才能直通(本文教程不适合)。
基于5-10代的CPU核显和11-13代直通给linux。请优先以下面这种方式直通:
针对于qemu-sever大于6.2-3版本,就是pve6.3以上版本。
将bios改成seabios,机器类型选择i440fx,使用传统模式装好系统,开启远程。
将显卡设置成无,在核显后面添加legacy-igd=1,如hostpci0: 0000:00:02.0,legacy-igd=1。此时机器会出现显示器画面。如果出现画面,但是核显不能正确驱动,
添加一个args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on
最后的配置文件,加上声卡可以参考如下:
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on
hostpci0: 0000:00:02.0,legacy-igd=1
hostpci1: 0000:00:1f.3
machine: pc-i440fx-7.2
如果上面操作还是不行,请尝试添加vbios,关于什么是vbios,请百度一下,如何提取vbios,请参考下面文章https://foxi.buduanwang.vip/yj/1602.html/,本文不适用。
基于5-10代的CPU核显直通黑苹果。请优先以下面这种方式直通:
黑苹果需要OVMF启动,一般需要定制虚拟机bios,以在虚拟机启动的时候,在虚拟机内驱动核显。
定制bios,请加QQ 70083721,需要付费定制。
基于11-13代的CPU核显直通。请优先以下面这种方式直通:
看这个吧,
https://blog.csdn.net/coolhz/article/details/130234903
心态炸了。不想写了。
如果是要显示虚拟机bios,请加QQ 70083721,需要付费定制虚拟机bios。
硬盘直通
此部分请参考
https://foxi.buduanwang.vip/virtualization/1754.html/
网卡直通
正常情况下,网卡直通不会有什么困难。在开启iommu之后,即可在Web页面上,将网卡作为PCIe设备添加即可。
但,你需要确保没有直通到PVE的管理网口。否则你的PVE会失联。且PVE没有使用此网卡。
下图为PVE7.2直通网卡的界面。
注意!
由于供应商的问题,可能一张物理网卡会有多个逻辑的网口,这些网口会在同一个PCIe地址上,如下
这有2个I350的网卡,均在07:00这个位置上。将此类网卡直通,有2种情况。
1、一个网口为PVE管理口,一个网口直通给虚拟机
此种情况,请参考上面,进行直通,如上上图,请勿勾选 所有功能。
2、分别直通给虚拟机。
由于多个网卡位于同一个PCI地址上,可能会在一个iommu组里,只能将这些网卡同时直通给一个虚拟机,否则会报错。
你需要确认网卡是否在同一个iommu组,执行下面命令:
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
如下输出:
root@pve3:~# for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s ' "$n"; lspc
IOMMU Group 17 04:00.0 Ethernet controller [0200]: Mellanox Technologies MT27500 Family [ConnectX-3] [15b3:1003]
IOMMU Group 19 07:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
IOMMU Group 20 07:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
从上面输出看,这上面的2个I350网卡分别在组19和20上,就意味着可以分开直通给虚拟机。
如果同一个iommu组,那么就需要利用PCIe桥的ACS特性,这部分请参考
IOMMU是如何划分PCI device group的? - 知乎 (zhihu.com)
情况1: 版本低于7.1
你需要安装破解内核,才能开启ACS强制。
这部分参考:
https://foxi.buduanwang.vip/linux/1522.html/
情况2:PVE版本为7.1+
你可以在GRUB上配置一个命令即可完成。
在grub文件里添加一个参数pcie_acs_override=downstream
grub如下
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
update-grub
update-initramfs -k all -u
随后重启
黑苹果
虚拟机可以创建黑苹果,随后直通硬件到虚拟机,可以获得相关的性能提升。
黑苹果,你需要以PCI方式直通硬件(请勿勾选PCIe)。最好使用免驱显卡,这样可以直接输出到显示器。
如果不是免驱显卡,那么请自行进系统之后,配置Opencore。
黑苹果不支持gvt-g
“注意,如果此方法还不能开启iommu,请修改 /etc/kernel/cmdline文件,并且使用proxmox-boot-tool refresh 更新启动项”
—— 请问up主使用zfs的情况下用这个方式开启iommu的具体操作应该怎么做呢?网上查了很久没看到适合的教程[f=haixiu]
将“intel_iommu=on”添加到 /etc/kernel/cmdline 上现有行的末尾(全部在一行上),然后执行proxmox-boot-tool refresh。这是我在proxmox论坛看到的解决办法,个人实测也能用
请问我直通独显,开启虚拟机后风扇转速很快,安装显卡驱动也解决不了,只有重启pve才行
老哥,请问下,我的PVE上WEBUI无法访问了,但是SSH可以登录,而且PVE上装的黑裙可以打开WEB界面。是不是直通了管理口的原因?能脚下怎么查找问题解决么?感谢感谢
大佬您好,我的机器有两个网口,eno1和enp2s0,其中enp2s0作为管理口在使用,当我想进行pci设备直通时,仅显示网卡的编号及名称
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
请问在哪里能看到两者的对应关系,因为在直通时选择错网卡会导致pve失联,导致我不敢进行尝试,谢谢您
参考 https://foxi.buduanwang.vip/linux/2214.html/
大佬请教个问题,我PVE是7.1版本的,用的9带INTEL。开启了显卡虚拟化intel GVT-g,然后直通给了黑裙918.运行了一段时间感觉很好。 然后现在想把nvidia的2070S显卡直通给虚拟机20.04版本的Cloud images版本的UBUNTU做点科学计算。按照这个教程里的显卡直通方法不知道能否可行。[f=yun]
我用的PVE是7.2版的,可是,添加网卡直通的方法同你是一样的,可是,在OP虚拟机里面网口都不出来。。。。。我又看了一个你的教程,可发现添加网口的配置信息上面无法给PCI-E打上勾,后面的括号提示是:仅Q35. 不知道这个提识指的是什么,在虚拟机里面也没有发现有相关的参数设置。。。。。
testing 汉字?????
大佬,PVE核显直通和主板有关系吗?i7 10700t,使用B560追击炮,七彩虹cn b460i gaming frozen装完显卡驱动都是43报错。然后发现公司的联想品牌机i5 10400的U直通成功了,然后我淘了个联想机准系统,换上自己的U和内存硬盘也直通成功了,很纳闷不知道咋回事?
怎么直通pcie 硬盘啊 ,我选直通后 就不能初始化 ,卡住了
大佬新年好,我想问下原来一直pve+群晖直通sata用的好好的,这次更新完pve重启以后直通出了问题,显示TASK ERROR: Cannot bind 0000:00:17.0 to vfio,类似这样的提示,而且试了下网卡的直通没有问题,貌似只有sata直通出现这种提示,这该咋办啊?pve更新能滚回吗?我更新的比较频繁,距离上一个版本跨度应该不大,现在pve版本是7.1-10。
用的pve7.1,sata和网卡都可以直通,只要一直通核显虚拟机就启动不了
这里补充一下,如果 boot 设备是做的 zfs mirror 的,可能再需要一下修改 /etc/kernel/cmdline,添加 intel_iommu=on
大佬 咨询一下 我这边按照教程直通安装n卡驱动成功,但重启后又报错43,而且安装好显示性能很差,这是什么原因啊。
直通是直通,并不是直通之后,就能利用显卡。建议开启远程桌面,在pve控制台设置显卡为无,然后rdp进去
PVE控制台把显卡设置为“无”之后就无法启动了,添加显卡之后才能启动,有解决方法吗 。。[f=leiben]
大佬,pve下win10直通核显,安装显卡驱动就蓝屏了,提示igdkmd64.sys这个蓝屏。是i7 3770的cpu。这个cpu支持直通核显吗
加qq群904754537,发图片看一下
站长,我最新的pve 7.0 只开启了iommu,然后直接虚拟机选择pci设备还是会报 代码43啊!!该如何解决啊
显卡43吗 安装最新的NVIDIA驱动
请问一下7.0怎么配置网卡的SR-IOV?能否出个教程?
是什么网卡,开启SRIOV一般不区别版本。
X550-T2
参考这个帖子,试一下
https://forum.proxmox.com/threads/enabling-sr-iov-for-intel-nic-x550-t2-on-proxmox-6.56677/
好的,谢谢
好像7.0如果按旧教程反而会导致核显直通失败?至少在我这的黑群晖DS918里不能硬解码成功。
迷,不按旧教程,直接直通应该没问题吧
可以联系下吗
大哥,我是N卡,我为什么会报由于该设备有问题,windows已将其停止的问题呀,可有解决之法
您好 N卡直通比较麻烦
老哥,我想直通nvme给win10,但是lspci看的不知道哪个是nvme的
00:00.0 Host bridge: Intel Corporation 8th Gen Core 4-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S] (rev 08)
00:02.0 VGA compatible controller: Intel Corporation 8th Gen Core Processor Gaussian Mixture Model
00:08.0 System peripheral: Intel Corporation Skylake Gaussian Mixture Model
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
00:14.2 Signal processing controller: Intel Corporation 200 Series PCH Thermal Subsystem
00:16.0 Communication controller: Intel Corporation 200 Series PCH CSME HECI
00:17.0 SATA controller: Intel Corporation 200 Series PCH SATA controller [AHCI mode]
00:1c.0 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.5 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1f.0 ISA bridge: Intel Corporation Device a2cc
00:1f.2 Memory controller: Intel Corporation 200 Series/Z370 Chipset Family Power Management Controller
00:1f.3 Audio device: Intel Corporation 200 Series PCH HD Audio
00:1f.4 SMBus: Intel Corporation 200 Series/Z370 Chipset Family SMBus Controller
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
02:00.0 Network controller: Intel Corporation WiFi Link 5100
hi 如果需要直通硬盘,可以直接qm set --scsi /dev/disk/by-id/xxxxx,无需硬件的直通
感谢老哥,nvme挂载成功了,但是现在还有个问题,pve自带的控制台vnc不能连接报authentication failed,导致不能安装系统
If you want to obtain a great deal from this paragraph
then you have to apply such strategies to your won blog.
大哥大哥,我想直通之后玩游戏,怎么解决输入延迟问题,用什么远程桌面,自带的延迟都好高
老哥您好。不清楚您这边是直接直通USB,然后接显示器玩游戏,还是远程。
如果您是直接接显示器玩游戏的话,有延迟那就无解了。
如果您是通过远程玩游戏,延迟是会有的,特别是FPS游戏。
当然,如果您是用微软的远程桌面的话,是不能玩3D游戏的。
我目前接触到的最经济、最简便的远程游戏解决方案为Xendesktop。LOL玩玩下棋还是没有问题。
如果要求高的话,可以试试VDI虚拟显卡。
老哥 后面这个 p106能拿来玩游戏吗?
不行,阉割了显示功能,使用xendesktop进去一直黑屏。
200ge a320 验证无法开启 iommu?
[ 0.722705] pci 0000:00:00.2: AMD-Vi: Unable to read/write to IOMMU perf counter.
[ 0.728383] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40
[ 0.728385] pci 0000:00:00.2: AMD-Vi: Extended features (0x4f77ef22294ada):
[ 0.728391] AMD-Vi: Interrupt remapping enabled
[ 0.728392] AMD-Vi: Virtual APIC enabled
[ 0.728593] AMD-Vi: Lazy IO/TLB flushing enabled
[ 6.334053] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel
已经开启了
期待后续 不知道amd的apu可以不
amd的显卡,直通很简单,但是我并没有apu。我这边尝试直通一下,rx570和v4800,可以借鉴一下。