一、命名规则策略

规则1:

对于板载设备命名合并固件或 BIOS 提供的索引号,如果来自固件或 BIOS 的信息可读就命名,比如eno1,这种命名是比较常见的,否则使用规则2。

规则2:

命名合并固件或 BIOS 提供的 PCI-E 热插拔口索引号,比如 ens1,如果信息可读就使用,否则使用规则3。

规则3:

命名合并硬件接口的物理位置,比如 enp2s0,可用就命名,失败直接到方案5。

规则4:

命名合并接口的 MAC 地址,比如 enx78e7d1ea46da,默认不使用,除非用户选择使用此方案。

规则5:

使用传统的方案,如果所有的方案都失败,使用类似 eth0 这样的样式。

二、网卡eth0命名

从centos7开始,系统默认的网卡命名有已经不是我们熟悉的ethX方式了,细心的同学会留意到一些比如ens enp等开头的网卡名称,简单了解,可以解释为centos7开始,网卡命名会根据网卡的硬件信息,插槽位置等有关;

而网上也有为那些依然想使用ethX方式命名的提供了策略。比如在内核启动参数里增加biosdevname=0 net.ifnames=0;

但是这里忽略了 一个问题,那就是为什么centos7不再使用以前的ethX方式?根本是因为之前ethX方式是不确定的,每次启动可能都不同(如果没有用户自定义网卡名称的前提下);

所以大家提供的这种办法其实是不好的;

三、核心流程

核心流程:明确一点是,linux内核启动过程中,会默认给网卡以ethX方式随机命名,然后再通过systemd去rename成其他名称。关键字,rename!

一、如何rename?

默认rename流程:

按照如下顺序执行udev的rule

1./usr/lib/udev/rules.d/60-net.rules

2./usr/lib/udev/rules.d/71-biosdevname.rules

3./lib/udev/rules.d/75-net-description.rules

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

step1 依据/usr/lib/udev/rules.d/60-net.rules, 查看是否有ifcfg-xx配置文件(路径在/etc/sysconfig/network-scripts/),是否有定义了指定MAC地址的配置文件(ifcfg-xx ,xx必须和配置文件的内容DEVICE一致),如果有,则命名改网卡;

    step2 依据/usr/lib/udev/rules.d/71-biosdevname.rules,如果biosdevname使能了(安装了biosdevname这个包,且内核启动参数显式设置为1),且网卡没有在step1中定义,则按照biosdevname命名规则rename网卡;(注意,如果没有安装biosdevname这个包,就没有这个文件)
    step3, 依据/lib/udev/rules.d/75-net-description.rules,将udev工具会根据device属性将填写网卡的属性命名,可能一个网卡会有多个维度的名称哦;
    step4,udev 根据step3中的赋值,按照指定的scheme规则,去给在step1 step2中没有命名的网卡命名;
    强调:这个step顺序是在我们没有自定义自己的rules的前提下,如果用户自定义了自己的rules,则用户自定义为优先级最高;

二、scheme次序

上面step4中提到,按照指定的scheme规则,这个规则是什么呢?

   首先说step3中,提到按照网卡的不同属性命名,系统识别网卡有好几种维度:  
   比如 BIOS provided index numbers for on-board devices (example: eno1),
   比如:BIOS provided PCI Express hotplug slot index numbers (example: ens1) 
   比如:physical location of the connector of the hardware (example: enp2s0), 
   比如:mac地址
   同一个网卡通常同时具有多个维度的名称,systemd在选取的时候,按照有先后次序,使用先命中的;
   顺序可以简单理解为(eno1-ens1-enp1)

eth2这个网卡,scheme名称有3个,如果systemd自选,会使用哪个?ens5f0.(那这个为什么是/sys/class/net/eth2 而不是/sys/class/net/ens5f0 ,那是因为自定义的缘故;)

三、用户自定义网卡名称

1、在用户没有自定义rules文件前提下,step1中的网卡命名方式也可认为是 一种用户自定义的网卡命名,即在/etc/sysconfig/network-scripts/ifcfg-xx 文件,xx就是这个网卡名称,文件内容中体现MAC_ADDRESS、NAME,这种情况下,则会按照配置文件中指定的名称来命名网卡;

2、如果用户自定义了rules文件,放在/etc/udev/rules.d/目录下,则这个优先级是最高的;比1中ifcfg-xx方式优先级更高,但是如果两者不一致,则在重启network服务时,会依据ifcfg-xx,所以用户不应该同时采用里两种方式给同一个网卡命不同的名称;

四、内核启动参数biosdevnane、net.ifnames

默认就是内核启动参数没有biosdevname 也没有net.ifnames 参数(其实默认是net.ifnames=1,biosdevname=0)这种情况下就按照一 中进行网卡命名;eno-ens-enp的方式逐个匹配。但是如果使能了biosdevname.则会使用biosdevname的命名 step1没有命名的网卡;

要么是em开头,要么是p开头;
怎么样使能biosdevname呢?2个条件,安装biosdevname包,且在内核启动参数中明确 biosdevname=1. 否则使能不了;
但是不管怎么样,如果用户自定义了udev rules,则用户自定义的rules优先!
这是总述,但凡用户自定义rules,优先级最高;

内核启动参数net.ifname,

如果在启动参数中增加net.ifname=0,这个文件会在/lib/udev/rule.d/80-net-name-slot.rules体现使用价值,则告诉系统不用scheme的方式来命名,这个时候,会恢复ethx这种不确定性的命名方式;

五、 不要用ethX去命名 
    内核在boot 过程是默认使用ethX方式来命名的,每次启动的时候都不确定,启动会后再通过udev等方式去rename,
 

四、修改网卡名称样式为ethx

如果不习惯使用新的命名规则,可以恢复使用传统的方式命名,编辑 grub 文件,增加两个变量,再使用 grub2-mkconfig 重新生成 grub 配置文件即可。

1、编辑 grub 配置文件

vim /etc/sysconfig/grub   # 其实是/etc/default/grub的软连接

# 为GRUB_CMDLINE_LINUX变量增加2个参数,具体内容如下:GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swapnet.ifnames=0 biosdevname=0rhgb quiet"

2、重新生成 grub 配置文件

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

然后重新启动 Linux 操作系统,通过 ip addr 可以看到网卡名称已经变为 eth0 。

3、修改网卡配置文件

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

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

NAME=eth0

DEVICE=eth0

[root@localhost ~]# systemctl restart network.service    # 重启网络服务

五、修改网卡名称样式为ethx(另一种方式)

直接在/usr/lib/udev/rules.d/60-net.rules配置文件中绑定mac地址与网卡名称

同时修改/etc/sysconfig/network-scripts/ifcfg-ethX以及配置文件中的两个参数

NAME = ethX

DEVICE=ethX

相关链接:https://www.jianshu.com/p/6196bab4dc38

Linux系统修改网卡名(eth0-3)的更多相关文章

  1. Centos 7 Linux系统修改网卡名称为ethx

    一.Centos7 系统安装完成后更改网卡名称方法 1.查看Centos7系统默认的网卡配置(eno16777736) [root@server ~]# ifconfig eno16777736: f ...

  2. redhat系列linux系统 修改主机名的正确方法

    ##注:无特别说明,以下称呼的linux系统统一视为redhat系linux redhat系列linux系统 如果想修改主机名 很多人可能都会以为是: $hostname NEW-NAME 或者在 / ...

  3. 【Linux 运维】linux系统修改主机名

    主机名的修改:  1.命名解释: [root@localhost~]# 分别代表: 用户名(root) 主机名(localhost) 当前路径(~,当前用户的home目录) 权限标志位(#代表root ...

  4. shell实现centos7双网卡修改网卡名eth0,eth1,并设置网络

    #!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'` interface2=`ls /sys/class/net| ...

  5. Linux 下修改网卡接口名

    Linux下修改网卡接口名 by:授客 QQ:1033553122 (测试环境:CentOS-6.0-x86_64-bin-DVD1.iso+Vmware) 作用 可以用于解决类似如下Device n ...

  6. CentOS7系统更改网卡名为eth0

    centOS7系统更改网卡名为eth0 1.编辑grub参数 [root@localhost ~]# vim /etc/sysconfig/grub 2.在GRUB_CMDLINE_LINUX行中添加 ...

  7. centos 修改网卡名为eth0

    centos7和centos6的命名规则不同,centos6网卡名由udev控制 网卡名以eth开头然后第一块网卡叫eth0第二块网卡叫eth1,然后centos7的网卡命名规则截然不同 centos ...

  8. centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1

    NAT的静态ip设置并且修改网卡名为eth0 1 cd /etc/sysconfig/network-scripts/ mv eno16777736  ifcfg-eth0 #修改名称 vi eth0 ...

  9. ubuntu18.04修改网卡名称为eth0

    1.修改grub文件 vim /etc/default/grub 查找 GRUB_CMDLINE_LINUX="" 修改为 GRUB_CMDLINE_LINUX="net ...

随机推荐

  1. WEB安全字体(Web Safe Fonts)-网页设计用什么字体兼容性好?

    效果:http://sandbox.runjs.cn/show/qgdljvh4 1 Arial微软公司的网页核心字体之一,最常用的sans serif字体,当字号很小时不容易阅读.但是,大写的“I” ...

  2. redis之安装

    redis之安装 redis redis介绍 redis是一个key-value存储系统,菲关系型数据库.和Memcached类似,他支持存储的value类型相对更多,包括字符串.列表.哈希散列表.集 ...

  3. [设计模式]JDK中的设计模式

    转载自:http://blog.csdn.net/gtuu0123/article/details/6114197 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图. 首先来个总结,具体 ...

  4. Middleware-请求管道的构成

    Middleware-请求管道的构成 在 ASP.NET 中,我们知道,它有一个面向切面的请求管道,有19个主要的事件构成,能够让我们进行灵活的扩展.通常是在 web.config 中通过注册 Htt ...

  5. PHP正则表达式 - 附录(常用正则表达式)

    常用正则表达式附录I 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: "^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1- ...

  6. 使用git和github管理项目代码

    以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git 和Github来托管自己的代码和读书笔记方便了不少,到哪里只要有网就可以把自己的东西拷贝下 ...

  7. JVM的内存划分

    1.栈内存:栈内存主要是用来运行函数的,在函数中定义的所有变量,都会在这个内存开辟空间. 在栈内存中定义的变量,不初始化,是不能直接使用的. 注意:所有的函数都必须在栈内存中运行. 而jvm只会运行处 ...

  8. HDU 3709 Balanced Number (数位DP)

    题意: 找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数. 思路: 一开始以为需要枚举位数,枚举前缀和,枚举后缀和,一旦枚举起来就会M ...

  9. connect() to 192.168.30.71:8082 failed (99: Cannot assign requested address) while connecting to upstream, client: 114.80.182.136, server: localhost, request: "GET /home/senior HTTP/1.1", upstream: "

    connect() to 192.168.30.71:8082 failed (99: Cannot assign requested address) while connecting to ups ...

  10. WebClient UI和Tomcat的启动器

    WebClient UI 我们在WebClient UI的开发工具里点了Test按钮, 会在浏览器以测试模式打开选中的view.这背后发生了什么事?注意浏览器地址栏的bspwd_cmp_test,这是 ...