Linux系統修改網卡名(eth0-3)


一、命名規則策略

規則1:

對於板載設備命名合並固件或 BIOS 提供的索引號,如果來自固件或 BIOS 的信息可讀就命名,比如eno1,這種命名是比較常見的,否則使用規則2。

規則2:

命名合並固件或 BIOS 提供的 PCI-E 熱插拔口索引號,比如 ens1,如果信息可讀就使用,否則使用規則3。

規則3:

命名合並硬件接口的物理位置,比如 enp2s0,可用就命名,失敗直接到方案5。

規則4:

命名合並接口的 MAC 地址,比如 enx78e7d1ea46da,默認不使用,除非用戶選擇使用此方案。

規則5:

使用傳統的方案,如果所有的方案都失敗,使用類似 eth0 這樣的樣式。

二、網卡eth0命名

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

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

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

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

三、核心流程

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

一、如何rename?

默認rename流程:

按照如下順序執行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

   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沒有命名的網卡;

要么是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,
 

四、修改網卡名稱樣式為ethx

如果不習慣使用新的命名規則,可以恢復使用傳統的方式命名,編輯 grub 文件,增加兩個變量,再使用 grub2-mkconfig 重新生成 grub 配置文件即可。

1、編輯 grub 配置文件

vim /etc/sysconfig/grub   # 其實是/etc/default/grub的軟連接

# 為GRUB_CMDLINE_LINUX變量增加2個參數,具體內容如下:GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swapnet.ifnames=0 biosdevname=0rhgb quiet"

2、重新生成 grub 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

然后重新啟動 Linux 操作系統,通過 ip addr 可以看到網卡名稱已經變為 eth0 。

3、修改網卡配置文件

原來網卡配置文件名稱為 ifcfg-ens33,這里需要修改為 ethx 的格式,並適當調整網卡配置文件。

mv /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-eth0# 修改ifcfg-eth0文件如下內容(其它內容不變)

NAME=eth0

DEVICE=eth0

[root@localhost ~]# systemctl restart network.service    # 重啟網絡服務

五、修改網卡名稱樣式為ethx(另一種方式)

直接在/usr/lib/udev/rules.d/60-net.rules配置文件中綁定mac地址與網卡名稱

同時修改/etc/sysconfig/network-scripts/ifcfg-ethX以及配置文件中的兩個參數

NAME = ethX

DEVICE=ethX

 相關鏈接:https://www.jianshu.com/p/6196bab4dc38


免責聲明!

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



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