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地址來命名,這個方法一般不使用。

 

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

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 傻傻分不清)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM