添加或删除硬件时,不应更改可预测的网络接口名称。这不是命名方案的全部意义吗???
我的无线接口名为 wlp3s0。
我在空闲 PCI 插槽中安装了 ASUS Xonar DX 7.1 通道 PCI Express x1 接口声卡,并将无线接口名称更改为 wlp5s0。
无线网卡与安装声卡之前位于同一个 PCI 插槽中,那么为什么接口名称会改变?!
主板是技嘉GA-970A-UD3,无线网卡是华硕PCE-N15。该系统正在运行带有原生内核的 Arch Linux。
我正在寻找一个合理的解释来解释为什么接口名称会在这种情况下发生变化。如果没有充分的理由更改接口名称,我应该在哪里提交错误报告/向谁投诉?
这不是什么大问题,我需要更改的唯一配置是 netctl 的网络配置文件。我只是认为,如果“可预测”的网络接口名称不可预测,那么他们的工作就完全失败了,而这个命名方案就是无用的垃圾! /咆哮
答案1
添加或删除硬件时,不应更改可预测的网络接口名称。这不是命名方案的全部意义吗???
长话短说,这并不是什么新鲜事。这是预期的/有意的。因此,您不需要提交错误,除非您想要求您的 PC 制造商更好地支持 Linux (BIOS) 或硬件制造商(驱动程序)。如果您想改善热插拔设备的情况和/或返回旧的命名方案,可以选择一些选项:
net.ifnames=0
使用内核命令行禁用网络设备的新命名方案- 添加
biosdevname=1
内核命令行以将 BIOS 提供的索引号合并到名称中 - 创建或编辑
udev
自定义名称或更改的命名方案的规则 - 您禁用固定名称的分配,以便再次使用不可预测的内核名称。为此,只需为默认策略屏蔽 udev 的 .link 文件:
ln -s /dev/null /etc/systemd/network/99-default.link
如果您使用systemd
and/or udev
,“可预测命名方案”参数可能与以前不同。不过,根据 WiFi 接口的命名方案,我假设您是使用带有systemd
.
您可以尝试将以下引导参数附加到内核命令行以使用网络设备的“旧”命名约定。但是,我并不完全确定除了保留网络设备的命名方案之外,这可能还会产生什么(如果有的话)额外影响。
net.ifnames=0
添加进去/etc/default/grub
可以方便这个参数的持久化和复用;再次假设您正在使用grub2
:
GRUB_CMDLINE_LINUX="net.ifnames=0"
如果udev
在确定设备名称时使用设备固件、位置和其他选项,则位置或其他内容可能会在内部发生变化,具体取决于相关设备如何相互交互。这在这里似乎不太相关,因为这些设备是 WiFi 适配器和声卡。不过,可能与底层总线结构有关;这看起来确实相关,因为这两个设备都连接到 PCI 插槽。
附加信息来自Fedora文档
8.1.命名方案层次结构
默认情况下,systemd 将使用以下策略命名接口以应用支持的命名方案:
方案 1:如果固件或 BIOS 中的信息适用且可用,则应用包含固件或 BIOS 为板载设备提供的索引号的名称(例如:eno1),否则回退到方案 2。
方案 2:如果固件或 BIOS 中的信息适用且可用,则应用包含固件或 BIOS 提供的 PCI Express 热插拔插槽索引号的名称(例如:ens1),否则回退到方案 3。
方案 3:如果适用,则应用包含硬件连接器物理位置的名称(例如:enp2s0),否则在所有其他情况下直接回落到方案 5。
方案 4:包含接口 MAC 地址的名称(例如:enx78e7d1ea46da),默认情况下不使用,但如果用户选择,则可以使用。
方案 5:如果所有其他方法都失败,则使用传统的不可预测的内核命名方案(例如:eth0)。
此策略(即上述过程)是默认策略。如果系统启用了biosdevname,则会使用它。请注意,启用biosdevname需要biosdevname=1
作为命令行参数传递,但在Dell系统中除外,只要安装了biosdevname,就会默认使用biosdevname。如果用户添加了udev
更改内核设备名称的规则,则这些规则将优先。