Linux网卡命名规范

新规范产生的原因

因为网卡存在 板载的 和独立PCIe、USB形式的,且其命名采用原始命名规范(eth0、eth1),不便于区分和维护,于是就开发了新的命名规范

原始命名规范(eth0、eth1)

biosdevname规范(Dell开发的规范)

file

biosdevname命名规范为:   设备类型+设备位置
biosdevname的基本原理:   根据固件、拓扑和位置信息分配固定名称

biosdevname依赖系统的 SMBIOS,系统的BIOS必须为2.6及以上版本
CentOS使用biosdevname方式须安装套件(CentOS默认安装了的)
      yum install biosdevname

实际的例子:
      em1       板载网卡
      p3p4      pci网卡
      p3p4_1    虚拟网卡

net.ifnames规范(systemd v197规范-改进的dell规范)

net.ifnames命名规范为:   设备类型+设备位置+数字
linux kernel 2.6.15之后的版本采用了sysfs代替了devfs (devfs原本存放在/dev目录下,sysfs多了一个/sys目录)
设备类型:
      en   :以太网卡Ethernet
      wl   :无线以太网卡WLAN
      ww   :无线广域网WWAN
设备位置:(USB的还没总结出来)
        o   :板载以太网卡
        p   :独立PCIe网卡
        s   :板载PCIe网卡
        x   :虚拟网卡,这个x后面跟mac address

实际的例子:
      eno1     :板载网卡
      enp0s2   :以太网 0号pcie网卡的2号端口
      ens33    :板载pcie网卡
      wlp3s0   :独立PCIe无线网卡
      wwp0s29f7u2i2       :4G modem
      wlp0s2f1u4u1        :连接在USB Hub上的无线网卡
      enx78e7d1ea46da     :虚拟网卡

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是系统默认值:

CentOS7既支持Dell的biosdevname,也支持systemd的方案

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地址来命名,这个方法一般不使用。

如何CentOS修改默认的网卡命名方式

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来修改内核设备名字,则用户规则优先。

CentOS内核参数组合使用,网卡名显示结果:

      默认内核参数(biosdevname=0,net.ifnames=1):  网卡名 "enp5s2"
      biosdevname=1,net.ifnames=0:网卡名 "em1"
      biosdevname=0,net.ifnames=0:网卡名 "eth0" (最传统的方式,eth0 eth1 傻傻分不清)
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1012.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/3/12作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录