You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RHEL8环境下如何自定义SR-IOV VF网卡接口名称

RHEL8环境下如何自定义SR-IOV VF网卡接口名称

我来给你几个避开MAC地址问题的实用方案,亲测在RHEL8里可行:

方案一:用UDEV规则匹配固定PCI属性(推荐)

既然VF的MAC启动时是随机的,那咱们换个固定的匹配维度——比如VF的物理端口索引或者PCI设备路径:

  1. 先查看你的VF的phys_port_name属性,执行命令:

    for vf in <PF>v0 <PF>v1 <PF>v2; do ethtool -P $vf; echo "phys_port_name: $(cat /sys/class/net/$vf/phys_port_name)"; done
    

    你会看到每个VF对应的phys_port_name是0、1、2这样的固定数字(和VF索引对应)。

  2. 创建UDEV规则文件/etc/udev/rules.d/70-sriov-vf-naming.rules,内容如下(把名字换成你想要的):

    SUBSYSTEM=="net", ACTION=="add", ATTR{phys_port_name}=="0", NAME="web-vf0"
    SUBSYSTEM=="net", ACTION=="add", ATTR{phys_port_name}=="1", NAME="db-vf1"
    SUBSYSTEM=="net", ACTION=="add", ATTR{phys_port_name}=="2", NAME="storage-vf2"
    

    如果phys_port_name不生效,也可以用固定的PCI路径来匹配:先通过lspci -D找到每个VF的完整PCI地址(比如0000:01:00.1),然后写规则:

    SUBSYSTEM=="net", ACTION=="add", DEVPATH=="*/0000:01:00.1", NAME="web-vf0"
    SUBSYSTEM=="net", ACTION=="add", DEVPATH=="*/0000:01:00.2", NAME="db-vf1"
    SUBSYSTEM=="net", ACTION=="add", DEVPATH=="*/0000:01:00.3", NAME="storage-vf2"
    
  3. 重启UDEV服务或者直接重启系统,就能看到自定义的VF名称了:

    udevadm control --reload-rules && udevadm trigger
    

方案二:用Systemd服务在启动后重命名

如果UDEV的方式还是有问题,咱们可以搞个简单的Systemd服务,等网络初始化完成后手动改名字:

  1. 创建服务文件/etc/systemd/system/vf-rename.service,内容:

    [Unit]
    Description=自定义SR-IOV VF网卡名称
    After=network.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/sbin/ip link rename <PF>v0 web-vf0
    ExecStart=/usr/sbin/ip link rename <PF>v1 db-vf1
    ExecStart=/usr/sbin/ip link rename <PF>v2 storage-vf2
    
    [Install]
    WantedBy=multi-user.target
    
  2. 启用并启动服务:

    systemctl daemon-reload
    systemctl enable --now vf-rename.service
    

    这样每次系统启动后,都会自动把默认的VF名称改成你指定的名字。

方案三:通过NetworkManager直接配置VF连接

既然你已经用NetworkManager持久化了PF的VF数量,那也可以直接给每个VF创建独立的NetworkManager连接,指定接口名称:

  1. 先查看当前的VF设备:

    nmcli device status
    

    找到对应的<PF>v0、<PF>v1、<PF>v2。

  2. 给每个VF创建自定义名称的连接:

    nmcli connection add type ethernet ifname web-vf0 con-name web-vf0 connection.autoconnect true
    nmcli connection add type ethernet ifname db-vf1 con-name db-vf1 connection.autoconnect true
    nmcli connection add type ethernet ifname storage-vf2 con-name storage-vf2 connection.autoconnect true
    
  3. 删除原来的默认VF连接(可选):

    nmcli connection delete <PF>v0 <PF>v1 <PF>v2
    

    下次重启后,NetworkManager就会自动识别并使用你设置的自定义接口名称。

为什么你之前的UDEV方法没用?

因为SR-IOV VF在系统启动初期,MAC地址是随机生成的,之后可能会被NetworkManager或者网卡驱动重新设置为固定值,而UDEV是在VF刚创建时触发的,此时看到的是随机MAC,和你后续设置的固定MAC不一致,所以规则匹配失败。

备注:内容来源于stack exchange,提问作者user892960

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:43:12