CentOS7网卡一致性命名规则

一致性网络设备命名,即 Consistent Network Device Naming 。

服务器通常有多块网卡,有板载集成(集成网卡主板(Lan-on-Motherboard),或 LOM)的,同时也有插在 PCIe 插槽的。Linux 系统的命名原来是 eth0eth1 这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。为解决这类问题,Dell 开发了 biosdevname 方案。systemd v197 版本中将 Dell 的方案作了进一步的一般化拓展。目前的 CentOS 7 既支持 Dell 的 biosdevname,也支持 systemd 的方案。

在 CentOS 7 中,udev 支持大量不同的命名方案。默认是根据固件、拓扑及位置信息分配固定名称。这样做的优点是命名可完全自动进行,并可预期,即使添加或删除硬件后也会保留其名称(不会出现重复枚举的情况),同时可顺利更换损坏的硬件。不足之处是,相比传统的名称,比如 eth0wlan0,这些名称有时会比较难理解。例如:enp5s0

命名方案层级结构

默认情况下,systemd 会使用以下策略,采用支持的命名方案为接口命名:

  • 方案 1:如果固件或 BIOS 信息适用且可用,则使用整合了为板载设备提供索引号的固件或 BIOS 的名称(例如:eno1),否则请使用方案 2。

  • 方案 2:如果固件或 BIOS 信息适用且可用,则使用整合了为 PCI 快速热插拔插槽提供索引号的固件或 BIOS 名称(例如 ens1),否则请使用方案 3。

  • 方案 3:如果硬件连接器物理位置信息可用,则使用整合了该信息的名称(例如:enp2s0),否则请使用方案 5。

  • 方案 4: 默认不使用整合接口 MAC 地址的名称(例如:enx78e7d1ea46da),但用户可选择使用此方案。

  • 方案 5:传统的不可预测的内核命名方案,在其他方法均失败后使用(例如: eth0)。

这个策略(如上所述)是默认策略。如果该系统已启用 biosdevname,则会使用该方案。注:启用 biosdevname 需要添加 biosdevname=1 作为内核命令行参数(Dell 系统除外),此时只要安装 biosdevname,就会默认使用该方案。如果用户已添加 udev 规则,该规则会更改内核设备名称,则会优先使用这些规则。

了解设备重命名过程

设备命名过程如下:

1、/usr/lib/udev/rules.d/60-net.rules 文件中的规则会让 udev 帮助工具 /lib/udev/rename_device 查看所有 /etc/sysconfig/network-scripts/ifcfg-suffix 文件。如果发现包含 HWADDR 条目的 ifcfg 文件与某个接口的 MAC 地址匹配,它会将该接口重命名为 ifcfg 文件中由 DEVICE 指令给出的名称。

2、/usr/lib/udev/rules.d/71-biosdevname.rules 中的规则让 biosdevname 根据其命名策略重命名该接口,即在上一步中没有重命名该接口、已安装 biosdevname、且在 boot 命令行中将 biosdevname=0 作为内核命令给出。

3、 /lib/udev/rules.d/75-net-description.rules 中的规则让 udev 通过检查网络接口设备,填写内部 udev 设备属性值 ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。注:有些设备属性可能处于未定义状态。

4、 /usr/lib/udev/rules.d/80-net-name-slot.rules 中的规则让 udev 重命名该接口,优先顺序如下:ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。并提供如下信息:没有在步骤 1 或 2 中重命名该接口,同时未给出内核参数 net.ifnames=0。如果一个参数未设定,则会按列表的顺序设定下一个。如果没有设定任何参数,则不会重命名该接口。

第 3 步和第4 步采用命名规则 1、2、3,可自选方案 4 。

了解可预期网络接口设备名称

根据接口类型以两个字母开头:
1、en 代表以太网,
2、wl 代表无线局域网(WLAN),
3、ww 代表无线广域网(WWAN)。

名称有以下类型:

设备名称类型

  • 所有多功能 PCI 设备都在其设备名称中包含 [f<function>] 号,其中包括 function 0 设备。

  • 在 USB 设备中会组成集线器端口号完整链。如果该名称超过 15 个字符上限,则无法导出该名称。

  • 已取消 USB configuration descriptors == 1 和 USB interface descriptors == 0(如果只有一个 USB 配置或接口存在,则默认值为 configuration == 1 及 interface == 0)。

使用 BIOSDVNAME 保持网络设备命名一致

通过 biosdevname udev 帮助程序实施此功能,可将所有内嵌网络接口名称、PCI 卡网络接口名称、以及现有eth[0123…] 的虚拟功能网络接口名称改为新的命名规范。

注:除非使用 Dell 系统,或特别明确说明启用 biosdevname,否则会优先使用 systemd 命名惯例。

biosdevname 命名惯例

系统要求

biosdevname 程序使用来自系统BIOS 的信息,特别是 SMBIOS 中包含。type 9(系统插槽)和 type 41(板载设备扩展信息)字段。如果系统的 BIOS 没有 SMBIOS 版本 2.6 或更高版本和这个数据,则不会使用新的命名规则。大多数老硬件不支持这个功能,因为缺少有正确 SMBIOS 版本的 BIOS 和字段信息。

必须安装 biosdevname 软件包方可或使用这个功能。要安装这个软件包,请作为 root 用户运行以下命令:

1
~]# yum install biosdevname

启用和禁用该功能

要禁用这个功能,请在安装过程中及安装后,在 boot 命令行中使用以下选项:

1
biosdevname=0

要启用这个功能,请在安装过程中及安装后,在 boot 命令行中使用以下选项:

1
biosdevname=1

除非系统达到最低要求,否则会忽略这个选项,同时系统会使用 systemd 命名方案。

如果指定 biosdevname 安装选项,那么它就必须在该系统的声明周期内作为其引导选项使用。

控制网络设备名称选择

可以如下方式控制设备命名:

根据网络接口设备识别

ifcfg 文件中使用 HWADDR 指令设定 MAC 地址,这样就可由 udev 识别。会从 DEVICE 指令提供的字符串中提取该名称,根据惯例,该名称应使用与 ifcfg 相同的后缀。例如:ifcfg-eth0。

通过打开或关闭 biosdevname

可使用由 biosdevname 提供的名称(如果 biosdevname 可确定)。

通过打开或关闭 systemd-udev 的命名方案

可使用由 systemd-udev 提供的名称(如果 systemd-udev 可确定)。

禁用一致网络设备命名

请选择以下方法之一禁用一致网络设备命名:

  • 通过屏蔽默认策略中的 udev 规则文件,禁止分配固定名称,以便重新使用不可预期的内核名称。可为 /dev/null 生成一个符号链接完成“屏蔽”。请作为 root 用户运行以下命令:
1
ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules
  • 创建自己的手动命名方案。例如:将接口命名为 “internet0”、“dmz0” 或 “lan0”。要创建自己的 udev 规则文件,并为那些设备设置 NAME 属性。确定在使用默认策略文件前使用该文件。例如:将其命名为 /etc/udev/rules.d/70-my-net-names.rules

  • 修改策略文件,使其选择不同的命名方案后。例如:默认根据接口的 MAC 地址命名所有接口。作为 root 复制默认策略文件,如下:

1
cp /usr/lib/udev/rules.d/80-net-name-slot.rules /etc/udev/rules.d/80-net-name-slot.rules

/etc/udev/rules.d/ 目录中编辑文件,并根据需要修改。

  • 在 GRUB 2 菜单的内核命令行中添加以下指令:
1
net.ifnames=0

更新所有 GRUB 2 内核菜单条目,作为 root 用户输入以下命令:

1
~]# grubby --update-kernel=ALL --args=net.ifnames=0

原文链接:

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/networking_guide/ch-consistent_network_device_naming

有钱任性,请我吃包辣条
0%