如何确定网络接口的“可预测名称”

pym*_*kin 6 networking ubuntu udev systemd

我正在设置一个新服务器并安装了 Ubuntu Bionic,它使用可预测的网络接口名称

安装程序在救援系统上运行,该系统仍然使用旧的接口名称,如eth0, eth1,但新安装的系统已将第一个网卡配置为enp8s0

使用lshw,这张卡的公交信息是:

bus info: pci@0000:08:00.0
Run Code Online (Sandbox Code Playgroud)

我想设置其他网络接口而不启动到新安装的系统,但不知道如何确定其他卡的可预测网络接口名称。

使用lshw,我找到了另一个网卡,目前已禁用:

bus info: pci@0000:41:00.0
Run Code Online (Sandbox Code Playgroud)

是否可以由此确定可预测的网络接口名称?会是这样enp41s0吗?

我已经搜索了一段时间,但找不到任何可以简单地列出所有设备及其可预测名称的工具。

编辑:为什么我不想启动新系统来查找?因为这会在设置过程中增加一个额外的步骤。使用旧的接口命名,我可以运行一个脚本来从托管公司提供的救援系统中设置服务器,并且可以使用了。现在我必须先设置服务器减去额外的网络配置。然后我必须在新系统启动后手动设置网络,只是为了知道接口的名称。

Joh*_*ald 7

命名方案的详细信息在源代码中:udev/udev-builtin-net_id.c。以前,这有一个很好的可读注释块来解释事情,但是由于重构删除了更好的参考在man systemd.net-naming-scheme

一些常见的方案是 PCI 物理、PCI 热插拔和板载。您的 enp 界面建议物理。

从评论中去除异国情调和不相关的部分会留下以下规则:

 * Two character prefixes based on the type of interface:
 *   en — Ethernet
 *
 * Type of names:
 *   [P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>]
 *                                         — PCI geographical location
 *
 * All multi-function PCI devices will carry the [f<function>] number in the
 * device name, including the function 0 device.
 *
 *
 * When using PCI geography, The PCI domain is only prepended when it is not 0.
Run Code Online (Sandbox Code Playgroud)

该 PCI 总线名称的格式为domain:bus:slot.function

假设它不是多功能设备,pci@0000:41:00.0显示为enp65s0,因为十六进制 41 转换为十进制 65。


Mar*_*rco 5

有一些(新的)可能性可以直接查找可预测的网络接口名称。您可以用于udevadm info此用途。此外,您还可以获得一些可能有用的更多信息。

该命令可以将其导出为键值对,以便于在脚本中使用。请参阅ID_NET_NAME此示例:

# udevadm info --export --query=property --path=/sys/class/net/eth0
DEVPATH='/devices/pci0000:00/0000:00:0d.0/0000:02:00.0/net/eth0'
INTERFACE='eth0'
IFINDEX='2'
SUBSYSTEM='net'
USEC_INITIALIZED='3750679'
ID_NET_NAME_MAC='enx0012345678'
ID_OUI_FROM_DATABASE='Super Micro Computer, Inc.'
ID_NET_NAME_PATH='enp2s0f0'
ID_BUS='pci'
ID_VENDOR_ID='0x8086'
ID_MODEL_ID='0x10c9'
ID_PCI_CLASS_FROM_DATABASE='Network controller'
ID_PCI_SUBCLASS_FROM_DATABASE='Ethernet controller'
ID_VENDOR_FROM_DATABASE='Intel Corporation'
ID_MODEL_FROM_DATABASE='82576 Gigabit Network Connection'
ID_PATH='pci-0000:02:00.0'
ID_PATH_TAG='pci-0000_02_00_0'
ID_NET_DRIVER='igb'
ID_NET_LINK_FILE='/lib/systemd/network/99-default.link'
ID_NET_NAME='enp2s0f0'
SYSTEMD_ALIAS='/sys/subsystem/net/devices/eth0'
TAGS=':systemd:'
Run Code Online (Sandbox Code Playgroud)

提醒:此示例适用于名称仍为“eth[0-9]”的接口。否则,可预测的名称就是接口名称。

  • 您知道“旧”名称并想知道“可预测”名称。为什么?升级时,“旧”名称可能会在重新启动后更改为“可预测”名称。在安装(例如 FAI)时,安装映像使用“旧”名称,但在启动到已安装映像后,您将获得“可预测”名称。在安装过程中,您想要设置网络接口并且需要“可预测”名称。... 等等 ... (3认同)