全新安装 Ubuntu 20.04 后,什么控制 NIC 命名约定?

全新安装 Ubuntu 20.04 后,什么控制 NIC 命名约定?

这是全新安装的 Ubuntu 服务器 20.04.04 系统。我使用 networkd 和 netplan 配置网络。我没有执行任何自定义安装步骤,只是加载了 .iso 并根据提示安装了 Ubuntu 服务器。

当这些机器从供应商处发货时,Ubuntu 已经安装好了,并且网络接口被命名ens1f0如下ens1f1

root@oldHost2:~# sudo lshw -C network |grep "logical name"
       logical name: ens1f0
       logical name: ens1f1
       logical name: bond0

然而,重新安装操作系统后(运行 netplan 之前)我得到了......

root@freshHost1:~# sudo lshw -C network |grep "logical name"
       logical name: ens1f0np0
       logical name: ens1f1np1
       logical name: bond0

在我的所有站点中,我们使用一个假设ens1f0和的 netplan 配置ens1f0。我希望所有接口都符合这一点。

我知道你可以在 netplan 中设置接口名称set-name(定义在https://ubuntu.com/server/docs/network-configuration)但是您需要已经以某种方式匹配接口(使用 Mac 地址等),这将使自动配置成为一场噩梦(如果不是不可能的话)。这是一个先有鸡还是先有蛋的场景。我有数百台机器需要配置,我想在不知道 Mac 地址的情况下模板化我的 netplan 配置。

我知道你也可以在 netplan 中将接口组合在一起:

  ethernets:
    eports:
      match:
        name: ens*

这可能对我的情况有用,但并非所有系统都有像这样的简单的双 NIC 设置,所以我不确定最好的做法是什么。

我对 ServerFault 的问题...

  • 由于这个逻辑名称是在 Netplan 运行之前设置的,那么这个名称是由什么决定的?如何在操作系统安装/配置期间覆盖它?
  • 接口名称中的np0和代表什么意思?np1

答案1

这是由 systemd 根据设备信息确定的。名称可能受多种不同因素影响,包括 BIOS、可能安装的其他设备、Linux 版本和驱动程序版本。请参阅https://www.freedesktop.org/software/systemd/man/systemd.net-naming-scheme.html了解 systemd 如何构造名称。

例如,插槽号可能与 PCIe 插槽相关,也可能不相关。我认为这至少与 BIOS/ACPI 有一定关系,但可能还有其他因素。在我的一台机器上,安装在一个插槽中的 NIC 枚举为 enpN,而当将同一个 NIC 移到另一个插槽时,枚举为 ensN。

我听说过在某些情况下 PCIe 总线编号会分配不同的情况,例如在启动期间存在雷电设备。归根结底,这可能是系统 BIOS 的错误,因为它没有为雷电端口正确保留 PCIe 总线编号。

就您看到的 np0 和 np1 而言,p0 和 p1 是来自 devlink 的物理端口名称__devlink_port_phys_port_name_get。据推测,网卡驱动程序中添加了 devlink 支持,这导致出现 np0/np1。如果您将旧系统更新为相同的内核版本,命名也应该会发生变化。

相关内容