![如何解决可预测名称方案使用的网络接口命名方案中的冲突?](https://linux22.com/image/180881/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%8F%AF%E9%A2%84%E6%B5%8B%E5%90%8D%E7%A7%B0%E6%96%B9%E6%A1%88%E4%BD%BF%E7%94%A8%E7%9A%84%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E5%91%BD%E5%90%8D%E6%96%B9%E6%A1%88%E4%B8%AD%E7%9A%84%E5%86%B2%E7%AA%81%EF%BC%9F.png)
我全新安装了 Debian 10 (Buster),但可预测名称方案存在问题。
我有 4 个板载 NIC 和一个 4 端口 PCIe NIC。
命名约定适用于板载端口,但 4 端口 PCIe 适用于前 2 个端口ens2f1
,ens2f0
但最后 2 个端口的名称为rename8
和rename9
。
我在这里阅读了整篇文章:https://wiki.debian.org/NetworkInterfaceNames
我明白他们为什么得到这些名称,这里有一个简短的解释:
由于这些接口的名称/lib/udev/rules.d/80-net-setup-link.rules
中的规则文件使用的优先级ID_NET_NAME
来自ID_NET_NAME_SLOT
,问题是和_SLOT
是相同的,同样对于测试时的和以下是and 的输出:ens2f0
rename8
ens2f1
rename9
udevadm
ens2f0
rename8
# 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
我可以覆盖该
/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}"
我将如何覆盖这个文件,我将把新的规则文件放在哪里,因为在文件中它说“不要编辑这个文件,它将在更新时被覆盖”?
我确信自己已经理解了这个“脚本”的工作原理。
在这一行中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"
- 我可以把它改成这样吗?
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
是的,您可以将其更改为
ID_NET_NAME_PATH
专门用途,而不仅仅是ID_NET_NAME
优先级。覆盖文件位于此处:
/etc/udev/rules.d/80-net-setup-link.rules
是的,该脚本可以工作(自我测试)
被转移到新问题:检查网络接口名称是否已存在于 udev 可预测名称方案规则中?