如何解决可预测名称方案使用的网络接口命名方案中的冲突?

如何解决可预测名称方案使用的网络接口命名方案中的冲突?

我全新安装了 Debian 10 (Buster),但可预测名称方案存在问题。

我有 4 个板载 NIC 和一个 4 端口 PCIe NIC。

命名约定适用于板载端口,但 4 端口 PCIe 适用于前 2 个端口ens2f1ens2f0但最后 2 个端口的名称为rename8rename9

我在这里阅读了整篇文章:https://wiki.debian.org/NetworkInterfaceNames

我明白他们为什么得到这些名称,这里有一个简短的解释:
由于这些接口的名称/lib/udev/rules.d/80-net-setup-link.rules中的规则文件使用的优先级ID_NET_NAME来自ID_NET_NAME_SLOT,问题是和_SLOT是相同的,同样对于测试时的和以下是and 的输出:ens2f0rename8ens2f1rename9udevadmens2f0rename8

# udevadm test-builtin net_id /sys/class/net/ens2f0 2>/dev/null
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx00151757e989
ID_OUI_FROM_DATABASE=Intel Corporate
ID_NET_NAME_PATH=enp13s0f0
ID_NET_NAME_SLOT=ens2f0

# udevadm test-builtin net_id /sys/class/net/rename8 2>/dev/null
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx00151757e98b
ID_OUI_FROM_DATABASE=Intel Corporate
ID_NET_NAME_PATH=enp14s0f0
ID_NET_NAME_SLOT=ens2f0
  1. 我可以覆盖该/lib/udev/rules.d/80-net-setup-link.rules文件并使其使用吗ID_NET_NAME_PATH
    更改此行:
    NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}"

    NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"

  2. 我将如何覆盖这个文件,我将把新的规则文件放在哪里,因为在文件中它说“不要编辑这个文件,它将在更新时被覆盖”?

我确信自己已经理解了这个“脚本”的工作原理。
在这一行中NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}",它首先检查是否NAME等于"",然后确保ENV{ID_NET_NAME}不等于"",然后NAME根据ID_NET_NAME优先级设置一个新的。

这是我拥有的完整文件(我知道每个人都必须相同,但为了清楚起见,我将其发布):

# do not edit this file, it will be overwritten on update

SUBSYSTEM!="net", GOTO="net_setup_link_end"

IMPORT{builtin}="path_id"

ACTION!="add", GOTO="net_setup_link_end"

IMPORT{builtin}="net_setup_link"

NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}"

LABEL="net_setup_link_end"
  1. 我可以把它改成这样吗?
SUBSYSTEM!="net", GOTO="net_setup_link_end"

IMPORT{builtin}="path_id"

ACTION!="add", GOTO="net_setup_link_end"

IMPORT{builtin}="net_setup_link"

NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"
NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
NAME=="", ENV{ID_NET_NAME_MAC}!="", NAME="$env{ID_NET_NAME_MAC}"
NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}"

LABEL="net_setup_link_end"

答案1

  1. 是的,您可以将其更改为ID_NET_NAME_PATH专门用途,而不仅仅是ID_NET_NAME优先级。

  2. 覆盖文件位于此处:/etc/udev/rules.d/80-net-setup-link.rules

  3. 是的,该脚本可以工作(自我测试)

  4. 被转移到新问题:检查网络接口名称是否已存在于 udev 可预测名称方案规则中?

相关内容