linux网卡命名规则与修改方法

news2024/11/26 5:45:09

一.前言:

       在早期的的操作系统中例如fedora13或者ubuntu15之前网卡命名的方式为eth0,eth1,eth2,属于biosdevname 命名规范。当然这是针对intel网卡的命名规则,对于realtek类型的网卡会命名为ens33。但是这个编号往往不一定准确对应网卡接口的物理顺序,为了能够方便定位和区分网络设备,目前linux的主流操作系统采用一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING)规范。

二.一致网络设备命名规则(CONSISTENT NETWORK DEVICE NAMING)

        命名规范为:设备类型 + 设备位置

1. 设备类型

        en 代表以太网

        wl 代表无线局域网(WLAN)

        ww 代表无线广域网(WWANs)

2. 设备位置

格式

含义

o<on-board_index_number>

主板bios内置的网卡

s<hot_plug_slot_index_number>[f<function>][d<device_id>]

主板bios内置的PCI-E网卡

x<MAC>

MAC 地址

p<bus>s<slot>[f<function>][d<device_id>]

PCI-E独立网卡

[P<domain_number>]p<bus>s<slot>[f<function>][u<usb_port>][…][c<config>][i<interface>]

USB网卡

        例如:       

        eno1 板载1号网卡

        enp0s2 以太网0号PCI扩展卡的2号端口

        ens33 由主板 BIOS 内置的 PCI-E 接口的网卡

        wlp1s0 无线第1号PCI扩展卡的0号端口

3.优势

       (1) 设备名称是完全可预测的。

       (2) 即使添加或删除硬件,设备名称也保持固定,因为不会发生重新枚举。

       (3) 有缺陷的硬件可以无缝更换。

三.系统默认命名规则

 1. systemd rename流程

        以centos7为例,系统默认用于网卡设备重命名的服务是systemd-udevd,我们可以使用systemctl status systemd-udevd来查看目前该服务的状态

 

         在centos7中, systemd命名网卡的规则是根据一下6个配置文件来的

        /lib/udev/rules.d/60-net.rules
        /lib/udev/rules.d/71-biosdevname.rules
        /lib/udev/rules.d/75-net-description.rules
        /lib/udev/rules.d/80-net-name-slot.rules
        /lib/udev/rules.d/80-net-setup-link.rules
        /lib/udev/rules.d/99-systemd.rules

        (1) 第一步: /lib/udev/rules.d/60-net.rules

        

        使用/lib/udev/rename_device这个程序,首先查询/etc/sysconfig/network-scripts/下所有以ifcfg-开头的文件
        如果在ifcfg-xx中匹配到HWADDR=xx:xx:xx:xx:xx:xx参数的网卡接口
则选取DEVICE=yyyy中设置的名字作为网卡名称。

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?", NAME="$result"


        在不修改 udev 规则的条件下,/etc/sysconfig/network-scripts/的 ifcfg-* 文件的优先最高。在ifcfg-*文件中将DEVICE 和 mac 绑定后重命名网卡名称和避免网卡乱序。

        (2)第二步:/lib/udev/rules.d/71-biosdevname.rules

        如果系统中安装了biosdevname,且内核参数未指定biosdevname=0,且上一步没有重命名网卡,则按照biosdevname的命名规范,从BIOS中取相关信息来命名网卡。
        主要是取SMBIOS中的type 9 (System Slot) 和 type 41 (OnboardDevices Extended Information)

        (3)第三步: /lib/udev/rules.d/75-net-description.rules

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


        可以通过udevadm test-builtin net_id /sys/class/net/xxx 网络接口比如ens33来查看相关属性。

 

         (4)第四步: /lib/udev/rules.d/80-net-name-slot.rules

 

        如果在60-net.rules ,71-biosdevname.rules这两条规则中没有重命名网卡,且内核未指定net.ifnames=0参数,udev依次尝试来自udev规则文件75-net-description.rules属性值来命名网卡,
如果这些属性值都没有,则网卡不会被重命名,沿用内核给定的ethx来命名

   (5)第五步 /lib/udev/rules.d/80-net-setup-link.rules
     用内建的的path_id 和net_setup_link来查询 键值ID_NET_NAME,并赋给设备名字
NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}"

 

 (6)第六步  /lib/udev/rules.d/99-systemd.rules

 用sysctl 改变内核的一些默认参数

 /lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/name --prefix=/net/ipv6/conf/name

所以针对60-net.rules, 可以添加类似如下规则文件去固定命名。

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="08:00:27:84:e3:82", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth", NAME="eth0"
/# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="08:00:27:f0:c8:7f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth", NAME="eth2"
/# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="08:00:01:63:bd:f1", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth", NAME="eth1"

        也可以修改/etc/sysconfig/network-scripts/下的 ifcfg-* 文件,在ifcfg-*文件中将DEVICE 和 mac 绑定,固定网卡名称,其中device条目即为设备名字,如DEVICE=eno2

        强调:这个step顺序是在我们没有自定义自己的rules的前提下,如果用户自定义了自己的rules,则用户自定义为优先级最高;

2.scheme次序

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

        Scheme 1(方案 1): 如果从BIOS中能够取到可用的板载网卡的索引号,则使用这个索引号命名,例如: eno1,如不能则尝试Scheme 2

        Scheme 2(方案 2): 如果从BIOS中能够取到可以用的网卡所在的PCI-E热插拔插槽的索引号,则使用这个索引号命名,例如: ens1,如不能则尝试Scheme 3

        Scheme 3(方案 3): 如果能拿到设备所连接的物理位置信息,则使用这个信息命名,例如:enp2s0,如不能则尝试Scheme 5

        Scheme 4(方案 4): 使用网卡的MAC地址来命名,这个方法一般不使用。enx78e7d1ea46da

        Scheme 5(方案 5):传统的kernel命名方法,例如: eth0,这种命名方法的结果不可预知的,即可能第二块网卡对应eth0,第一块网卡对应eth1。      

四.修改为biosdevname命名规则

    1. 修改启动参数   

        (1)编辑/etc/default/grub
        root@ubuntu:~# vi /etc/default/grub

        找到GRUB_CMDLINE_LINUX="" 

        改为GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

        (2)重新生成GRUB的启动菜单配置文件(/boot/grub/grub.cfg)
        root@ubuntu:~# update-grub

        (3)重启系统后,网卡名称变成eth0和wlan0

        2. 修改网卡配置文件

        原来网卡配置文件名称为ifcfg-ens33,这里需要修改为eth0的格式,并适当调整网卡配置文件。 

        mv /etc/sysconfig/network-scripts/ifcfg-ens12 /etc/sysconfig/network-scripts/ifcfg-eth0        #修改ifcfg-eth0文件如下内容(其它内容不变),NAME=eth0 DEVICE=eth0

        systemctl restart network.service #重启网络服务

        3.  创建70-persistent-net.rules

        直接在/etc/udev/rules.d/中创建或修改70-persistent-net.rules文件,加上或修改信息为:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME=="eth0"

 五.ubuntu18修改网卡名称

      上面讲过的都是在centos7中,在ubuntu18中,则简单很多,没有看到/lib/udev/rules.d/60-net.rules, /lib/udev/rules.d/71-biosdevname.rules,/lib/udev/rules.d/75-net-description.rules这些文件

        ubuntu18识别网卡,名称默认会根据 /lib/udev/rules.d/目录下的80-net-setup-link.rules文件定义的规则来。如果你要更改规则,需要先将文件80-net-setup-link.rules从/lib/udev/rules.d目录复制到/etc/udev/rules.d目录。因为/etc/udev/rules.d目录下规则的优先级高于/lib/udev/rules.d目录,识别网卡并命名时,会优先从/etc/udev/rules.d目录下寻找规则文件。将ID_NET_NAME改成ID_NET_SLOT即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库运维——MySQL主从复制

1.理解MySQL主从复制原理。 2.完成MySQL主从复制。 一、MySQL主从复制原理 MySQL主从复制是指将一个MySQL数据库服务器&#xff08;称为主服务器&#xff09;上的数据复制到其他MySQL数据库服务器&#xff08;称为从服务器&#xff09;的过程。它的原理如下&#xff1a; 主服…

如何利用OpenAI的函数调用特性

如何利用OpenAI的函数调用特性 函数调用能实现哪些功能&#xff1f; 简单来说&#xff0c;函数调用功能可以助你在请求方法时构建结构化的数据。因为生成模型的特性&#xff0c;它产生的数据往往是无结构的&#xff0c;即使在提示(prompt)中指定了输出格式&#xff0c;但实际…

3-Linux实操

Linux实践操作 开关机、重启、用户登陆注销关机&重启用户登陆和注销 用户管理添加用户修改用户密码删除用户查询用户信息切换用户查看当前用户用户组的添加和删除用户和组相关文件 实用指令指定运行级别init 命令帮助指令文件目录类时间日期类搜索查找类&#x1f50d;压缩和…

新能源汽车直流充电桩和交流充电桩的区别

直流充电桩和交流充电桩的区别 你是否曾经想过&#xff0c;为什么有的电动汽车可以在半小时内充满电&#xff0c;而有的却需要几个小时?其实&#xff0c;这都取决于它们所使用的充电桩的不同。那么&#xff0c;直流充电桩和交流充电桩到底有哪些区别呢? 首先&#xff0c;工作…

网络变压器配套使用的网口连接器的选型注意事项及选购关注要点

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;采购人员在网口连接器选型中如何选用到合适的产品&#xff0c;选用时要注意到哪些事项&#xff0c;这节将结合网口连接器实物和大家一起探讨&#xff0c;希望对大家有些帮助。 我们可以通过对下面五个方面的详细了解…

网工内推 | 售前、售后工程师,IE认证优先

01 广州佳杰科技有限公司 招聘岗位&#xff1a;IT售前工程师 职责描述&#xff1a; 1、负责所在区域 IT 产品的售前技术支持工作,包括客户交流、方案编写、配置报价、投标应标、测试、赋能等; 2、与厂商相关人员建立和保持良好的关系,相互配合,提高项目成功率和厂商满意度; 3、…

每日一题——链表中倒数最后k个结点

题目 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤n≤$105&#xff0c;0≤ai≤109&#xff0c;0≤k≤109 要求&#xff1a;…

MongoDB索引结构,到底是B-Tree还是B+Tree,请看这里!!

起因 网上关于MongoDB的索引结构到底是b树&#xff0c;还是b树的争论有很多&#xff0c;无法统一结论。 由来 MongoDB从3.2版本开始默认采用了WiredTiger存储引擎&#xff0c;网上很多说法是此引擎是BTree的索引结构&#xff0c;甚至有图有真相。但是认为MongoDB一直是B-Tre…

Docker compose(容器编排)

Docker compose&#xff08;容器编排&#xff09; 一、安装Docker compose 1.安装Docker compose Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品&#xff0c;因此需要安装 Docker 之后在单独安装 Docker Compose#下载 curl -L https://github.com/docker/co…

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位&#xff0c;通过元素的定位我们可以去更好的将盒子放到我们想要的位置&#xff0c;下面就一起来看看吧&#xff01; 定位 定位posi…

HR SaaS厂商,进入决赛圈

在愈发需要降本增效的节点&#xff0c;数字化的价值也更在被越来越多的企业重新审视&#xff0c;这种重视不再是之前或有或无的可选项&#xff0c;而是基于真正人效比维度的必选项 作者|斗斗 编辑|皮爷 出品|产业家 SaaS行业&#xff0c;正在发生一些微妙的变化。 以HR …

如何提高小程序UV?实用策略助你增加用户规模和活跃度

摘要&#xff1a;小程序的UV&#xff08;Unique Visitors&#xff09;是衡量用户规模和活跃度的重要指标&#xff0c;对于开发者和运营者来说具有重要意义。本文将分享一些实用策略&#xff0c;帮助你提高小程序的UV&#xff0c;增加用户规模和活跃度。从优化推广渠道、提升用户…

css实现鼠标滑动左下角弹框带动画效果

代码 <div classNamekuang></div> css代码 .kuang {height: 500px;width: 400px;// background-color: #fff;position: absolute;z-index: 10;bottom: 0;transform: translateX(-390px)}.kuang:hover {animation: myanimation 3s linear 1;animation-fill-mode:f…

LT9211C 是一款MIPI/RGB/2PORT LVDS互转的芯片

LT9211C 1.描述&#xff1a; Lontium LT9211C是一个高性能转换器&#xff0c;可以在MIPI DSI/CSI-2/双端口LVDS和TTL之间相互转换&#xff0c;除了24位TTL到24位TTL&#xff0c;并且不推荐同步和DE的2端口10位LVDS和24位TTL之间的转换。LT9211C反序列化输入的MIPI/LVDS/TTL视…

认识雪花id

首先,个人理解,雪花id不是全球的,它只能保证一个分布式服务的范围内的ID是不重复的. 一.SnowFlake 雪花算法 SnowFlake 中文意思为雪花&#xff0c;故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。 雪花算法的原理…

项目经理好,还是产品经理好?

我首先介绍一下产品经理和项目经理的区别&#xff0c;然后再说一下产品经理和项目经理的薪资差距&#xff0c;然后你自己决定做产品经理还是项目经理。 1、产品经理和项目经理的区别&#xff1a; 产品经理和项目经理的不同之处在于&#xff0c;产品经理注重思考&#xff0c;关…

操作系统18:磁盘I/O速度、磁盘可靠性、数据一致性

目录 1、提高磁盘I/O速度的途径 &#xff08;1&#xff09;磁盘高速缓存(Disk Cache) 1.1 - 数据交付(Data Delivery)方式 1.2 - 置换算法 1.3 - 周期性地写回磁盘 &#xff08;2&#xff09;提高磁盘I/O速度的其它方法 2.1 - 提前读 2.2 - 延迟写 2.3 - 优化物理块的…

存储简单了解

存储目前常用的有磁盘&#xff08;磁性存储器&#xff09;和固态硬盘&#xff08;半导体存储器&#xff09; 磁盘由盘片&#xff0c;磁头和移动磁头的机械装置组成。磁盘从空间结构上分为扇区和磁道&#xff0c;每个扇区存储大小一致。 固态硬盘由多个闪存芯片组成&#xff0c;…

性能测试怎么做?一文从5个方面带你做性能测试

大家好&#xff0c;今天小濠从5个方面来介绍性能测试 一、什么是性能测试 二、性能测试的目的 三、如何做性能测试 四、性能测试关注的指标 五、性能结果分析 一、什么是性能测试 是不断的通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡。 我们可以认为性能测试是…

ARM day8 key1/2/3led

key_led.h #ifndef _KEY_H_ #define _KEY_H_#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//EXTI编号 typedef enum {EXTI0,EXTI1,EXTI2,EXTI3,EXTI4,EXTI5,…