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

图片

图片

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=="?*",ATTR{type}=="1" ,KERNEL=="0000:08:00.1",NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTR{type}=="1" ,KERNEL=="0000:08:00.2",NAME="eth1"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTR{type}=="1" ,KERNEL=="0000:58:00.1",NAME="eth2"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTR{type}=="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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/183310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年中国金融控股公司研究报告

第一章 行业概况 1.1 定义 金融控股公司这一术语最初源自美国,特别是在美国的《金融服务法案》关于银行控股公司组织结构的条文中,首次出现了“金融控股公司”(Financial Holding Company)这一法律术语,尽管法案中并…

Flink SQL DataGen Connector 示例

Flink SQL DataGen Connector 示例 1、概述 使用 Flink SQL DataGen Connector,可以快速地生成符合规则的测试数据,可以在不依赖真实数据的情况下进行开发和测试。 2、使用示例 创建一个名为 “users” 的表,包含 6 个字段:id…

力扣 138. 随机链表的复制

题目描述: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的…

newstarctf2022week2

Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲 连接 MySQL 失败: Access denied for user rootlocalhost 这句话印在了背景,后来再进就没了,我猜测是报错注入 想办法传参 可以看到一个name2,试着传参 发现有回显三个字段…

ESP-IDF-V5.1.1使用websocket

IDF Component Registry (espressif.com) 在windows系统中,在项目目录下使用命令 idf.py add-dependency "espressif/esp_websocket_client^1.1.0"

【手册上新】迅为RK3588开发板多屏显示手册

iTOP-RK3588开发板采用四核Cortex-A76处理器和Cortex-A55架构,芯片内置VOP控制器,最多可以支持7个屏幕显示,支持HDMI、LVDS、MIPI、EDP四种显示接口的多屏同显、异显和异触,可有效提高行业定制的拓展性。 iTOP-RK3588开发板支持以…

Java中访问修饰符

类和类之间的关系有如下几种: 以Hero为例自身:指的是Hero自己同包子类:ADHero这个类是Hero的子类,并且和Hero处于同一个包下不同包子类:Support这个类是Hero的子类,但是在另一个包下同包类: GiantDragon 这…

EasyExcel实现动态表头功能

EasyExcel实现动态表头功能 开发过程中,大部分都会使用到导出报表功能,目前阶段会用得有 poi导出(暂无), easyexcel导出(官方文档,https://easyexcel.opensource.alibaba.com/docs/current/&am…

Linux 实现原理 — NUMA 多核架构中的多线程调度开销与性能优化

前言 NOTE:本文中所指 “线程” 均为可执行调度单元 Kernel Thread。 NUMA 体系结构 NUMA(Non-Uniform Memory Access,非一致性存储器访问)的设计理念是将 CPU 和 Main Memory 进行分区自治(Local NUMA node&#x…

EPLAN-P8软件技术分享文章

EPLAN公司成立于1984年德国。EPLAN最初的产品是基于DOS平台,然后经历了Windows3.1、Windows95、Windows98、Windows2000、Windows Vista等、Windows7、Windows8等平台发展历史。EPLAN是以电气设计为基础的跨专业的设计平台,包括电气设计、流体设计、仪表…

06-MySQL-进阶-视图存储函数存储过程触发器

涉及资料 链接:https://pan.baidu.com/s/1M1oXN_pH3RGADx90ZFbfLQ?pwdCoke 提取码:Coke 一、视图 数据准备 create table student(id int auto_increment comment 主键ID primary key,name varchar(10) null comment 姓名,no varchar(10) null co…

vue3的自定义指令

除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (CustomDirectives)。 1.自定义指令的目的和简单介绍 自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。 一个自定义指令由一个包含类似组件生命周期钩子的对象…

【网络安全 --- web服务器解析漏洞】IIS,Apache,Nginx中间件常见解析漏洞

一,工具及环境准备 以下都是超详细保姆级安装教程,缺什么安装什么即可(提供镜像工具资源) 1-1 VMware 16.0 安装 【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客文章浏览阅读20…

Modbus入门

Modbus入门 ModbusModbus模拟工具模拟工具使用配置Slave配置Poll C#使用ModBus通讯 Modbus modbus使用范围广泛,广泛应用于各类仪表,PLC等。它属于应用层协议,底层硬件基于485/以太网。 Modbus的存储区有:输入线圈(布尔…

有什么软件可以管控员工的电脑桌面

信息化的快速发展,员工在工作中使用电脑的情况越来越普遍。然而,员工在使用电脑时可能会出现工作效率低下、滥用公司资源等问题,因此对员工电脑进行监测和管理显得尤为重要。 1、域之盾软件 它是一款功能强大的电脑监控软件,可以…

分享98个节日庆典PPT,总有一款适合您

分享98个节日庆典PPT,总有一款适合您 PPT下载链接:https://pan.baidu.com/s/1gNj_uRLz9a5uTG97ezma7Q?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识付…

【Solidity】Remix在线环境及钱包申请

好久没有学习区块链方面的知识了,目前通过自学大致掌握了Fabric联盟链的搭建,链码编写、部署,api调用,可以独立开发出一些基于fabric的应用,感觉开发出去中心化的应用还是很有意思的,因为他与之前开发的ssm…

mysql主从架构

mysql主从架构是一套非常基础的高可用架构,主要依赖复制技术来实现。 1.复制原理 mysql复制功能主要使用三个线程实现: 1.Binary log dump thread(二进制日志转储线程):当副本连接时发送二进制日志 2.Replication I/O receiver …

Docker与微服务实战——基础篇

Docker与微服务实战——基础篇 第一章 Docker 简介1.1 docker 理念1.2 容器与虚拟机比较 第二章 Docker 安装2.1 前提说明2.2 Docker的基本组成2.2.1 镜像(image)2.2.2 容器(container)2.2.3 仓库(repository&#xff…