Centos 7中的网卡一致性命名规则

摘要:
然而,这个数字通常不完全对应于网卡接口的物理顺序。

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

一、为什么需要这个

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

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

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

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

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

Centos <wbr>7中的网卡一致性命名规则

二、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

设备位置:

Centos <wbr>7中的网卡一致性命名规则
实际的例子:

eno1 板载网卡

enp0s2  pci网卡

ens33   pci网卡

wlp3s0  PCI无线网卡

wwp0s29f7u2i2   4G modem

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

enx78e7d1ea46da pci网卡

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

biosdevname的命名规范为

Centos <wbr>7中的网卡一致性命名规则

实际的例子:

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中的网卡一致性命名规则》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python+selenium动态抓取网页数据px和rem换算下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java GUI(图形用户界面)

GUI Graphical User Interface(图形用户接口)。 用图形的方式,来显示计算机操作的界面,这样更方便更直观。 CLI Command line User Interface (命令行用户接口) 就是常见的Dos命令行操作。 需要记忆一些常用的命令,操作不直观。 举例:  比如:创建文件夹,或者删除文件夹等 Java为GUI提供的对象...

第一次使用Ubuntu20.04系统-遇坑小记

第一次使用Ubuntu20.04系统-遇坑小记 最近发现Linux系统是程序员前进的必经之路(立志做一名“倔强又装逼的程序员”),所以果断在自己的笔记本上安装了最新的Ubuntu20.04系统,刚开始使用确实不是很习惯(应该还是自己比较菜),尤其是许多命令行的操作方式不是很熟悉、操作系统的一些相关知识也不是很了解,不过用了几天,发现Linux(Ubuntu...

什么是系统封装

什么是系统封装   系统封装,说简单就是把系统制作成镜像的方法刻录到光盘,用在系统安装上面。系统封装,不同于系统的正常安装。最本质的区别在于 系统封装 是将一个完整的系统以拷贝的形式打包,然后用粘贴的形式安装在另外一个系统盘上,而正常安装则是通过 Setup程序进行安装。 举一个不太贴切的例子,你要铺草坪,你可以在那片土地上撒草籽等待草的长成,也可以直...

php 命名空间(要求php5.3以上)

要求php5.3以上 <?phpnamespace test;// 命名空间与目录类似功能,也可定义子命名空间,用分层的方式定义:/*namespace mydirokproject; 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前: */const...

MySQL-查询结果缓存

  众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍。故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率。MySQL数据库也不例外。在这里,笔者将结合自己的工作经验,跟大家探讨一下,MySQL数据库中缓存的管理技巧:如何合理配置MySQL数据库缓存,提高缓存命中率。  合理配置MySQL缓存 提高...

python面试题库——1Python基础篇

第一部分 Python基础篇(80题) 为什么学习Python?             语言本身简洁,优美,功能超级强大,跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做         Python和Java、PHP、C、C#、C++等其他语言的对比?                C语言由于其底层操作特性和历史的积累...