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

一、为什么需要这个

服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。

Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。

为解决这类问题,dell开发了biosdevname方案。

systemd v197版本中将dell的方案作了进一步的一般化拓展。

目前的Centos既支持dell的biosdevname,也支持systemd的方案。

二、Centos7中的命名策略

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

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

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

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

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

三、biosdevname和net.ifnames两种命名规范

net.ifnames的命名规范为:   设备类型+设备位置+数字

设备类型:

en 表示Ethernet

wl 表示WLAN

ww 表示无线广域网WWAN

设备位置:


实际的例子:

eno1 板载网卡

enp0s2  pci网卡

ens33   pci网卡

wlp3s0  PCI无线网卡

wwp0s29f7u2i2   4G modem

wlp0s2f1u4u1   连接在USB Hub上的无线网卡

enx78e7d1ea46da pci网卡

----------------------------------------

biosdevname的命名规范为

实际的例子:

em1 板载网卡

p3p4 pci网卡

p3p4_1 虚拟网卡

四、systemd中的实际执行顺序

按照如下顺序执行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

60-net.rules

使用/lib/udev/rename_device这个程序,去查询/etc/sysconfig/network-scripts/下所有以ifcfg-开头的文件

如果在ifcfg-xx中匹配到HWADDR=xx:xx:xx:xx:xx:xx参数的网卡接口

则选取DEVICE=yyyy中设置的名字作为网卡名称。

71-biosdevname.rules

如果系统中安装了biosdevname,且内核参数未指定biosdevname=0,且上一步没有重命名网卡,则按照biosdevname的命名规范,从BIOS中取相关信息来命名网卡。

主要是取SMBIOS中的type 9 (System Slot) 和 type 41 (Onboard Devices Extended Information)

不过要求SMBIOS的版本要高于2.6,且系统中要安装biosdevname程序。

75-net-description.rules

udev通过检查网卡信息,填写如下这些udev的属性值

ID_NET_NAME_ONBOARD

ID_NET_NAME_SLOT

ID_NET_NAME_PATH

ID_NET_NAME_MAC

80-net-name-slot.rules

如果在60-net.rules ,71-biosdevname.rules这两条规则中没有重命名网卡,且内核未指定net.ifnames=0参数

则udev依次尝试使用以下属性值来命名网卡,如果这些属性值都没有,则网卡不会被重命名。

ID_NET_NAME_ONBOARD

ID_NET_NAME_SLOT

ID_NET_NAME_PATH

上边的71-biosdevname.rules 是实际执行biosdevname的policy

75-net-description.rules和80-net-name-slot.rules实际执行Scheme 1,2,3

根据上述的过程,可见网卡命名受 biosdevname和net.ifnames这两个内核参数影响。

这两个参数都可以在grub配置中提供。

biosdevname=0是系统默认值(dell服务器默认是1),net.ifnames=1是系统默认值:

#vi /boot/grub/grub.conf

kernel /boot/vmlinuz biosdevname=1

initrd /boot/initrd.img

第二节所说的Scheme的策略顺序是系统默认的。

如系统BIOS符合要求,且系统中安装了biosdevname,且biosdevname=1启用,则biosdevname优先;

如果BIOS不符合biosdevname要求或biosdevname=0,则仍然是systemd的规则优先。

如果用户自己定义了udev rule来修改内核设备名字,则用户规则优先。

内核参数组合使用的时候,其结果如下:

默认内核参数(biosdevname=0,net.ifnames=1):  网卡名 "enp5s2"

biosdevname=1,net.ifnames=0:网卡名 "em1"

biosdevname=0,net.ifnames=0:网卡名 "eth0" (最传统的方式,eth0 eth1 傻傻分不清)

 

参考文档:

http://benjr.tw/93340

https://docs.google.com/viewer?url=http://domsch.com/linux/lpc2010/lpc2010-network-device-naming.pdf

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/

http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

http://blog.chinaunix.net/uid-14735472-id-4195429.html

Centos 7中的网卡一致性命名规则的更多相关文章

  1. centos7中的网卡一致性命名规则、网卡重命名方法

    一致性网络设备命名(Consistent Network Device Naming) 背景介绍: 在centos5的时候,我们习惯了eth0这样的网络设备命名,在centos6发现网络设备变成了em ...

  2. 详解 Python 中的下划线命名规则

    在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...

  3. C#中的变量及命名规则

    变量: 1.作用 :可以让我们在计算机中存储数据 2.语法:变量类型    变量名=赋值: 3.常用的数据类型:  int   整数类型  取值范围:最大2147483647;最小-214748364 ...

  4. AMD规范中模块id的命名规则

    AMD 即 Asynchronous Module Definition, 中文是“ 异步模块定义”的意思. AMD 规范制定了定义模块的规则,这样模块和模块的依赖可以被异步加载. AMD 规范只定义 ...

  5. 将centos系统中的网卡em1还原为eth0

    1.修改系统grub 操作:vi /boot/grub/grub.conf 增加一个 biosdevname=0 的启动参数 示例: [root@xingfujie ~]# cat /boot/gru ...

  6. 基础java中的package的命名规则和import的使用

    包的命名一般用公司域名但是注意域名后辍要放前面如下 package com.cnblogs.i.Cat//对应地址是com/cnblos/i/cat.class也就是Cat.class的地址 如果想将 ...

  7. CSS中id与class命名规则及编码最佳习惯

    一.用class_name方式写类名. 以前喜欢用class-name写,不过好像两样也没什么差别.但我比较反对用className写类名,因为始终对浏览器大小写敏感的问题抱有怀疑态度.但是id我会写 ...

  8. CentOS7网卡的命名规则

    一.前两个字符的含义 en 以太网 Ethernet wl 无线局域网 WLAN ww 无线广域网 WWAN 二.第三个字符的含义 o on-board device index number s h ...

  9. Centos 7中,防火墙配置端口规则

    注意:firewalld服务有两份规则策略配置记录,配置永久生效的策略记录时,需要执行"reload"参数后才能立即生效: Permanent:永久生效的 RunTime:现在正在 ...

随机推荐

  1. AE开发的一个想法

    基于字典进行GIS图形进行编辑. 图层信息 大类别 字典项(属性字段) 居民点 控制点 GPS控制点 线状道路 铁路 省道 国道 一般公路 名称 长度 等级 备注 线状水系 面状道路 面状水系 湖泊 ...

  2. linux/Mac使用du查看目录占用的磁盘大小

    [1]du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为: du -sh [2]若要查看一个目录下每个文件和文件夹的磁盘占用空间,使用如下命令: du -ah --max-depth=1 ...

  3. WHCTF2017线上小记

    第四届XCTF开始,首战因素,加上团队刚加入了两个新人的原因,还是决定一块参与一下.水了3题.2个RE和1个MISC,照顾新人,写的比较啰嗦. [MISC] PY-PY-PY 下载题目之后是一个pyc ...

  4. Python中被双下划线包围的魔法方法

    基本的魔法方法 __new__(cls[, ...]) 用来创建对象 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __i ...

  5. CSS样式有哪些常用的属性?

    一般的一个DIV的CSS设置属性有:margin,padding,width,height,font-size,text-align,background,float,border CSS样式有哪些常 ...

  6. fedora修改主目录文件名为英文

           在gnome-terminal里面能够显示中文的,但是在文本终端里面中文都是不能显示的,是一个小小的正方形.因此可以只把主目录文件名换成英文的,方便文本终端命令输入,而其他的一些地方还是 ...

  7. 企业级服务元年:iClap高效解决手游更新迭代问题

    2006年至今,手游市场经历了不少变革,从WAP站到2009年智能手机时代来临,2012大量资本涌入国内手游行业,到2014年手游市场趋于成熟,细分市场成为追逐热门,在2015年优胜劣汰的资本寒冬浪潮 ...

  8. 线程、进程、daemon、GIL锁、线程锁、递归锁、信号量、计时器、事件、队列、多进程

    # 本文代码基于Python3 什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...

  9. 裸眼3D全攻略3:拍摄3D—瞳距、镜距、视角偏转与空间感

    http://sd89.blog.163.com/blog/static/356041322014112532958728/ 3D图片的拍摄,与平面有着全新的不同要求,那就是空间感的表现. 简单来说, ...

  10. JavaScript 预编译(变量提升和函数提升的原理)

    本文部分内容转自https://www.cnblogs.com/CBDoctor/p/3745246.html 1.变量提升 console.log(global); // undefined var ...