Unraid 6.9.x 网卡开启SR-IOV

前提如下

需主板支持SR-IOV

如主板没有此功能,请直接臭不要脸跟厂家发邮件要,我就是这样要了个新bios刷入后开启

如此途径失败,请购买其他板子😎

需网卡支持SR-IOV

82599ES/I350/82576都是支持的,其他自测,如不支持,那也就不用往下看了
判断网卡是否支持
Unraid-工具-系统设备-鼠标悬停在自己的网卡上

如箭头标识有SR-IOV字样就代表支持
也可通过以下命令判断

lspci -vvv -d 8086:10c9 | grep -A 9 SR-IOV  

8086:10c9为网卡设备ID

开搞

设置bios-高级-芯片组

页面中默认应该是这样的

把没开的所有选项都开启

开启VF网卡

进Unraid-工具-系统设备
找到你网卡的ID 如我的是[8086:10c9]
记下,并在终端中输入此命令

lspci -vvv -d 8086:10c9 | grep -A 9 SR-IOV

如图所示

VFs: 8 理解为最大支持8个网口
然后编辑/boot/config/go 文件
安装Config File Editor插件可以直接编辑go文件
# Start the Management Utility上方添加以下命令

sudo echo 7 > /sys/class/net/eth1/device/sriov_numvfs

echo 7 代表虚拟7个网卡 最大8个,默认占用一个,所以输入7
eth1 为用来虚拟的网口,按自己需求更改
****并进入Unraid-主界面-引导设备-闪存 ****
在Syslinux 配置中Unraid OS栏添加以下命令

intel_iommu=pt

保存重启,一般来说虚拟机就已经出现7个VF网卡了
就像这样

然后就可以勾选相应的网卡分配给虚拟机使用了

接下来说说疑难杂症

就是我遇到的问题,相同案例可以按此方法解决

系统设备无法勾选绑定网卡

如网卡默认被unraid调用无法勾选先添加此命令
从unraid分离8086:10c9按自己ID填写

vifo-pci.ids=8086:10c9

重启后网卡在系统设备中即可勾选绑定
绑定后建议删除此命令
建议所有绑定操作皆通过系统设备勾选操作

固定VF网卡MAC地址

生成的VF网卡MAC地址是混乱的,不好记
所以.......
我们需要给这些设备都给编上号,让自己好记
编辑/boot/config/go 文件
sudo echo 7 > /sys/class/net/eth1/device/sriov_numvfs下方添加以下命令

ip link set eth1 vf 0 mac 00:25:8b:03:10:01
ip link set eth1 vf 1 mac 00:25:8b:03:10:03
ip link set eth1 vf 2 mac 00:25:8b:03:10:05
ip link set eth1 vf 3 mac 00:25:8b:03:10:07
ip link set eth1 vf 4 mac 00:25:8b:03:11:01
ip link set eth1 vf 5 mac 00:25:8b:03:11:03
ip link set eth1 vf 6 mac 00:25:8b:03:11:05

虚拟了几个网卡,就写几行
MAC地址随便编辑,我后面是根据VF网卡ID来
这玩意儿就图个好记
保存-重启
现在可以去路由器中的DHCP添加对应信息了😁

虚拟机中网卡显示不完整

如图,系统设备中VF网卡只亮了一个

虚拟机中只有一个网卡,没有将虚拟的7个VF全部显示出来

这是因为在Unraid在启动过程中很早就将设备绑定到vfio-pci
所以我们需要增加一条命令再次进行设备绑定
编辑/boot/config/go 文件
ip link set eth1 vf 6 mac 00:25:8b:03:11:05下方添加以下命令

/usr/local/sbin/vfio-pci >>/var/log/vfio-pci

这样保存重启后就会正常显示了
如果还没有正常显示,可以编辑下 /boot/config/network.cfg文件

# Generated settings:
IFNAME[0]="br0"
DHCP_KEEPRESOLV="no"
DHCP6_KEEPRESOLV="no"
BRNAME[0]="br0"
BRNICS[0]="eth0"
BRSTP[0]="no"
BRFD[0]="0"
DESCRIPTION[0]="unraid"
PROTOCOL[0]="ipv4+ipv6"
USE_DHCP[0]="yes"
USE_DHCP6[0]="yes"
METRIC6[0]="0"
PRIVACY6[0]="0"
IFNAME[1]="eth1"
PROTOCOL[1]="ipv4+ipv6"
USE_DHCP[1]="yes"
USE_DHCP6[1]="yes"
PRIVACY6[1]="0"
SYSNICS="2"

可能你的是默认调用了两个网口,需要删除第二个网卡的信息

IFNAME[1]="eth1"
PROTOCOL[1]="ipv4+ipv6"
USE_DHCP[1]="yes"
USE_DHCP6[1]="yes"
PRIVACY6[1]="0"
SYSNICS="2"

并将此数值改为1

SYSNICS="1"

这样确保只有unraid一个口,删除其他网卡
保存重启

VF网卡没网 ETH1网卡默认关闭

如果...
系统设备中VF网卡全亮了
虚拟机VF也全显示了
但是就是没网,显示网线被拔出咋办呢?
去设置-网络设置中看下ETH1是否启用

如果没有启用,可以手动点击启用后
但是这样虚拟机还是没网的,只能通过重启虚拟机或者禁用-启用网卡来获取,这样太麻烦了,狗屎!
所以我们再在/boot/config/go 文件加一条命令吧
/usr/local/sbin/vfio-pci >>/var/log/vfio-pci下方添加以下命令

ifconfig eth1 up

保存重启
这样在系统启动的时候就会启动此端口
这样虚拟机就可以正常获取网络了😁

总结

很不巧,我遇到了这些问题,所以我最终的go文件中信息如下

#!/bin/bash
# enable SRIOV and process vfio-pci binding again
echo 7 > /sys/class/net/eth1/device/sriov_numvfs
ip link set eth1 vf 0 mac 00:25:8b:03:10:01
ip link set eth1 vf 1 mac 00:25:8b:03:10:03
ip link set eth1 vf 2 mac 00:25:8b:03:10:05
ip link set eth1 vf 3 mac 00:25:8b:03:10:07
ip link set eth1 vf 4 mac 00:25:8b:03:11:01
ip link set eth1 vf 5 mac 00:25:8b:03:11:03
ip link set eth1 vf 6 mac 00:25:8b:03:11:05
/usr/local/sbin/vfio-pci >>/var/log/vfio-pci
ifconfig eth1 up

# Start the Management Utility
/usr/local/sbin/emhttp &