Linux 上意外一致的网络设备名称

Linux 上意外一致的网络设备名称

我有一个安装了最少 Linux 的单个 SSD 磁盘,我在其中配置了 GRUB 以启动 Linux(内核版本 4.15.0),并启用了一致的网络设备命名功能(通过设置net.ifnames=1)。我把这个 SSD 放入两台几乎完全相同的 PC 中(主板相同,只是处理器版本略有不同)。我在两台 PC 上运行lshw -class network

PC1上的输出:

  *-network
       description: Ethernet interface
       product: Ethernet Connection I219-LM
       vendor: Intel Corporation
       physical id: 1f.6
       bus info: pci@0000:00:1f.6
       logical name: enp0s31f6
       version: 21
       serial: 00:13:95:2a:e4:5c
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.2-4 ip=192.168.0.171 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:126 memory:df200000-df21ffff

PC2 的输出:

  *-network
       description: Ethernet interface
       product: Ethernet Connection (7) I219-LM
       vendor: Intel Corporation
       physical id: 1f.6
       bus info: pci@0000:00:1f.6
       logical name: eno1
       version: 10
       serial: 00:13:95:33:8c:4c
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.5-4 ip=192.168.0.171 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:126 memory:a1300000-a131ffff

两台 PC 都在 PCI 总线上安装了以太网适配器00:1f.6。PC1 上的接口名为enp0s31f6,这正是我所期望的。但在 PC2 上,接口名为eno1,这让我很困惑。

所以有两个问题:

  • 为什么它们的名字不同?我在两者上使用相同的 SSD,因此软件配置完全相同。
  • 是否可以根据 PCI 位置强制使用名称(enp0s31f6)?

biosdevname未安装(emX无论如何都应该使用名称)

答案1

简称eno#ens#名称是根据您提供的插槽信息生成的固件o表示板载 LAN 端口,s表示热插拔插槽号。请参阅手册页systemd.net 命名方案了解更多详细信息(当前仅在线,v243 中的新功能)。

udev 内置网络 ID主要从 中获取插槽信息/sys/class/pci/slots,记录为“ACPI _SUN - 插槽用户编号”。板载索引从/sys/class/net/eth0属性device/acpi_index(ACPI _DSM)、device/index(SMBIOS)、dev_port、中读取phys_port_name。)

要强制基于 PCI 拓扑的名称,请使用 systemd.link(5) 将名称策略设置为path

# /etc/systemd/network/50-names.link

[Match]
OriginalName=*

[Link]
NamePolicy=keep path
# Default is "keep kernel database onboard slot path"
# (set in /lib/systemd/network/99-default.link)

...或者使用 81-something.rules 中的 udev 规则分配NAME="$env{ID_NET_NAME_PATH}"给网络接口(您不需要这样做,因为 udev 总是读取 .link 文件):

# /etc/udev/rules.d/81-net-names.rules
SUBSYSTEM=="net", ENV{ID_NET_NAME_PATH}=="?*", NAME="$env{ID_NET_NAME_PATH}"

相关内容