從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一致),如果有,則命名改網卡;
二、scheme次序
上面step4中提到,按照指定的scheme規則,這個規則是什麼呢?
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沒有命名的網卡;
內核啓動參數net.ifname,
如果在啓動參數中增加net.ifname=0,這個文件會在/lib/udev/rule.d/80-net-name-slot.rules體現使用價值,則告訴系統不用scheme的方式來命名,這個時候,會恢復ethx這種不確定性的命名方式;