講乾貨----centos7 網卡命名規則詳解

從centos7開始,系統默認的網卡命名有已經不是我們熟悉的ethX方式了,細心的同學會留意到一些比如ens enp等開頭的網卡名稱,簡單瞭解,可以解釋爲centos7開始,網卡命名會根據網卡的硬件信息,插槽位置等有關;

而網上也有爲那些依然想使用ethX方式命名的提供了策略。比如在內核啓動參數裏增加biosdevname=0 net.ifnames=0;

但是這裏忽略了 一個問題,那就是爲什麼centos7不再使用以前的ethX方式?根本是因爲之前ethX方式是不確定的,每次啓動可能都不同(如果沒有用戶自定義網卡名稱的前提下);

所以大家提供的這種辦法其實是不好的;

解釋完上面內容之後,咱們來看下到底網卡名稱是如何命名的。

核心流程:明確一點是,linux內核啓動過程中,會默認給網卡以ethX方式隨機命名,然後再通過systemd去rename成其他名稱。關鍵字,rename!

一、如何rename?

   默認rename流程:

   step1 依據/usr/lib/udev/rules.d/60-net.rules, 查看是否有ifcfg-xx配置文件(路徑在/etc/sysconfig/network-scripts/),是否有定義了指定MAC地址的配置文件(ifcfg-xx ,xx必須和配置文件的內容DEVICE一致),如果有,則命名改網卡;

    step2 依據/usr/lib/udev/rules.d/71-biosdevname.rules,如果biosdevname使能了(安裝了biosdevname這個包,且內核啓動參數顯式設置爲1),且網卡沒有在step1中定義,則按照biosdevname命名規則rename網卡;(注意,如果沒有安裝biosdevname這個包,就沒有這個文件)

    step3, 依據/lib/udev/rules.d/75-net-description.rules,將udev工具會根據device屬性將填寫網卡的屬性命名,可能一個網卡會有多個維度的名稱哦;

    step4,udev 根據step3中的賦值,按照指定的scheme規則,去給在step1 step2中沒有命名的網卡命名;

    強調:這個step順序是在我們沒有自定義自己的rules的前提下,如果用戶自定義了自己的rules,則用戶自定義爲優先級最高;

二、scheme次序

   上面step4中提到按照指定的scheme規則,這個規則是什麼呢?

   首先說step3中,提到按照網卡的不同屬性命名,系統識別網卡有好幾種維度:  

   比如 BIOS provided index numbers for on-board devices (example: eno1),

   比如:BIOS provided PCI Express hotplug slot index numbers (example: ens1

   比如:physical location of the connector of the hardware (example: enp2s0), 

   比如:mac地址

   同一個網卡通常同時具有多個維度的名稱,systemd在選取的時候,按照有先後次序,使用先命中的;

   順序可以簡單理解爲(eno1-ens1-enp1)

   

   eth2這個網卡,scheme名稱有3個,如果systemd自選,會使用哪個?ens5f0.(那這個爲什麼是/sys/class/net/eth2 而不是/sys/class/net/ens5f0 ,那是因爲自定義的緣故;)

三、用戶自定義網卡名稱

  1、在用戶沒有自定義rules文件前提下,step1中的網卡命名方式也可認爲是 一種用戶自定義的網卡命名,即在/etc/sysconfig/network-scripts/ifcfg-xx 文件,xx就是這個網卡名稱,文件內容中體現MAC_ADDRESS、NAME,這種情況下,則會按照配置文件中指定的名稱來命名網卡;

    2、如果用戶自定義了rules文件,放在/etc/udev/rules.d/目錄下,則這個優先級是最高的;比1中ifcfg-xx方式優先級更高,但是如果兩者不一致,則在重啓network服務時,會依據ifcfg-xx,所以用戶不應該同時採用裏兩種方式給同一個網卡命不同的名稱;

四、內核啓動參數biosdevnane、net.ifnames

     默認就是內核啓動參數沒有biosdevname 也沒有net.ifnames 參數(其實默認是net.ifnames=1,biosdevname=0)這種情況下就按照一 中進行網卡命名;eno-ens-enp的方式逐個匹配。但是如果使能了biosdevname.則會使用biosdevname的命名 step1沒有命名的網卡;

bios命名規則:

要麼是em開頭,要麼是p開頭;

怎麼樣使能biosdevname呢?2個條件,安裝biosdevname包,且在內核啓動參數中明確 biosdevname=1. 否則使能不了;

但是不管怎麼樣,如果用戶自定義了udev rules,則用戶自定義的rules優先!

這是總述,但凡用戶自定義rules,優先級最高;

 內核啓動參數net.ifname,

 如果在啓動參數中增加net.ifname=0,這個文件會在/lib/udev/rule.d/80-net-name-slot.rules體現使用價值,則告訴系統不用scheme的方式來命名,這個時候,會恢復ethx這種不確定性的命名方式;

五、 不要用ethX去命名 

    內核在boot 過程是默認使用ethX方式來命名的,每次啓動的時候都不確定,啓動會後再通過udev等方式去rename,

參考文檔:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-troubleshooting_network_device_naming

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章