CentOS/RHEL7环境下更改网卡名称为CentOS6的传统命名规则-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

图片

图片

CentOS/RHEL7网卡命名规则介绍

图片

图片

传统的Linux服务器网卡的名称命名方式是从eth0,eth1,eth2....这种方式命名的但是这个编号往往不一定准确对应网卡接口的物理顺序常规模式下我们使用的服务器设备可能只有一张网卡若网卡较多的情况下可能存在网卡乱序的问题。

从CentOS/RHEL7 起可预见的命名规则变成了默认通过这一规则接口名称被自动基于固件拓补结构和位置信息来确定。即使添加或者移除网络设备接口名称仍然可以保持固定而无需重新枚举换掉的硬件也可以做到无缝替换。

目前新的命名规则有两种方式Biosdevname & net.ifnames

默认情况下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 。

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

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

biosdevname 命名惯例

图片

图片

系统要求

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

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

yum install biosdevname

启用和禁用该功能

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

biosdevname=0

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

biosdevname=1

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

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

控制网络设备名称选择

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

根据网络接口设备识别

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

通过打开或关闭 biosdevname

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

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

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

禁用一致网络设备命名

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

1、通过屏蔽默认策略中的 udev 规则文件禁止分配固定名称以便重新使用不可预期的内核名称。可为 /dev/null 生成一个符号链接完成“屏蔽”。请作为 root 用户运行以下命令

ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules

2、创建自己的手动命名方案。例如将接口命名为 “internet0”、“dmz0” 或 “lan0”。要创建自己的 udev 规则文件并为那些设备设置 NAME 属性。确定在使用默认策略文件前使用该文件。例如将其命名为 /etc/udev/rules.d/70-my-net-names.rules。

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

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

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

在 GRUB 2 菜单的内核命令行中添加以下指令

net.ifnames=0

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

grub2-mkconfig -o /boot/grub2/grub.cfg

PS以上内容引用Redhat官方文章并有做部分修改

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

若要使用旧的方式去命名网卡该如何处理

图片

图片

以上介绍了关于CentOS/RHEL7命名规则但在某些应用场景下客户还是需要在CentOS/RHEL7的系统下采用CentOS6的命名规则但这种情况下CentOS/RHEL7不能很好的支持大概率会产生乱序问题

一般做法如下

我们需要手动修改grub文件增加 net.ifnames=0 biosdevname=0

GRUB_CMDLINE_LINUX="CRASHKERNEL=auto net.ifnames=0 biosdevname=0 rhgb quiet"

再执行

grub2-mkconfig -o /boot/grub2/grub.cfg

重启系统

然后添加udev规则

在”/etc/udev/rules.d“目录中创建一个网卡规则”70-persistent-net.rules“,并写入下面的语句:

SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTRtype=="1" ,KERNEL=="0000:08:00.1",NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTRtype=="1" ,KERNEL=="0000:08:00.2",NAME="eth1"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTRtype=="1" ,KERNEL=="0000:58:00.1",NAME="eth2"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTRtype=="1" ,KERNEL=="0000:58:00.2",NAME="eth3"

busid的获取方式为其他网卡同理

ethtool -i eth0
bus-info:0000:58:00.0

但此时网卡依然乱序

图片

图片

我的某客户环境下有4个网口(两个网卡一个为intel x722,一个为博通千兆网卡)rules中无法使用eth0-eth3这几个命名(无效)目前猜测是由于系统有某些配置文件优先级高于70-persistent-net.rules(eth4之后的任何命名均不存在问题)。

从Redhat官方的解释来看CentOS/RHEL7已经不支持这种命名方式并不给与相关技术支持。

我们采取折中方法根据客户实际机器网卡配置不同型号为切入口调整驱动加载顺序来解决客户的问题

GRUB_CMDLINE_LINUX="CRASHKERNEL=auto net.ifnames=0 biosdevname=0 rdloaddriver=tg3 rdloaddriver=i40e rhgb quiet"

图片

图片

综上若客户采用CentOS/RHEL7以上的系统我们强烈建议不采用旧的方法进行网卡命名若一定要采用该方法则建议使用不同品牌网卡通过调整网卡驱动加载顺序的方式规避问题。

文章转载联想TSE技术文档

更多技术文档请查阅365文档icon-default.png?t=N7T8https://www.365doc.com.cn

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: centos