当前位置: 首页 > article >正文

Linux网卡命名规则

Linux网卡命名规则 

网卡命名

一、为什么需要这个
      服务器通常有多块网卡,有板载集成的,同时也有插在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热插拔插槽(注:pci槽位号)的索引号,则使用这个索引号命名,例如: ens1,如不能则尝试Scheme 3

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

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

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

三、biosdevnamenet.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

1)60-net.rules 

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

2)71-biosdevname.rules

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

      主要是取SMBIOS中的type 9 (System Slot) 和 type 41 (Onboard Devices Extended Information)不过要求SMBIOS的版本要高于2.6,且系统中要安装biosdevname程序。

3)75-net-description.rules

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

      ID_NET_NAME_ONBOARD

      ID_NET_NAME_SLOT

      ID_NET_NAME_PATH

      ID_NET_NAME_MAC 

4)80-net-name-slot.rules

      如果在60-net.rules ,71-biosdevname.rules这两条规则中没有重命名网卡,且内核指定net.ifnames=1参数,则udev依次尝试使用以下属性值来命名网卡,如果这些属性值都没有,则网卡不会被重命名。

      ID_NET_NAME_ONBOARD

      ID_NET_NAME_SLOT

      ID_NET_NAME_PATH

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

      75-net-description.rules和80-net-name-slot.rules实际执行上面策略的1,2,3。

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

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

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

修改默认参数:如回归默认命名方式:

1.编辑内核参数
      在GRUB_CMDLINE_LINUX中加入net.ifnames=0即可

      [root@centos7 ~]$vim /etc/default/grub

      GRUB_CMDLINE_LINUX="crashkernel=auto net.ifnames=0 rhgb quiet"

2.为grub2生成配置文件
      编辑完grub配置文件以后不会立即生效,需要生成配置文件。

      [root@centos7 ~]$grub2-mkconfig -o /etc/grub2.cfg

      第二节所说的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 傻傻分不清)

修改网卡名优先级

/lib/sysytemd/network/99-default.link


http://www.kler.cn/a/160494.html

相关文章:

  • 传奇996_19——常用函数
  • Excel筛选的操作教程
  • 如何在python中模拟重载初始化函数?
  • #include<string>和#include<string.h>有什么区别
  • 量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • Spring Boot学习(三十三):集成kafka
  • 让关节远离疼痛,重拾健康活力
  • Java架构师系统架构设计原则应用
  • 13款趣味性不错(炫酷)的前端动画特效及源码(预览获取)分享(附源码)
  • 解决Error:You‘re using an RSA key with SHA-1, which is no longer allowed
  • 多关键字排序(java实训)
  • HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)
  • 机器学习---pySpark案例
  • 深入理解Vue.js中的this:解析this关键字及其使用场景
  • uniapp实战 —— 分类导航【详解】
  • 设置webstorm和idea符合Alibaba规范
  • 【Docker】从零开始:17.Dockerfile基本概念
  • 指定分隔符对字符串进行分割 numpy.char.split()
  • 自然语言处理(NLP)技术-AI生成版
  • Flinksql bug :Illegal mixing of types in CASE or COALESCE statement
  • 按天批量创建间隔分区表(DM8:达梦数据库)
  • 【PTA-C语言】编程练习4 - 数组Ⅰ
  • HarmonyOS4.0从零开始的开发教程08构建列表页面
  • 17、XSS——session攻击
  • 【动态规划】LeetCode-面试题 17.16. 按摩师