Centos7以後版本網卡命名規則

一、設備命名標準
參考:
官方文檔第8章:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/networking_guide/ch-consistent_network_device_naming#sec-Naming_Schemes_Hierarchy
部分信息參考博文:感謝!
Noway11:https://www.cnblogs.com/zyd112/p/8143464.html
王偉傑:https://www.jianshu.com/p/b66981dbb389

Centos7以前版本的Centost系統對網卡命令採用了傳統的命令標準,如eth0,eth1,個人是理解eth標識了網卡的鏈路層封裝類型,後面的數字就是網卡編號了,但這個編號可不是一成不變的,如果服務器增加或刪除新硬件就可能會發生變化,爲運維工作多少帶來了一些麻煩,爲了解決這個問題Centos7以後版本引入了新的網絡設備命名規範:一致網絡設備命名(CONSISTENT NETWORK DEVICE NAMING),Centos7以後支持biosdevname和net.ifnames兩種命名規範。

1.net.ifnames命名規範爲:設備類型+設備位置+端口號

設備類型:en 代表以太網,wl 代表無線局域網(WLAN),ww 代表無線廣域網(WWAN)。
設備位置:集成設備的設備索引編號 ,或擴展卡所在總線槽位編號
端口號:板載集成設備索引編號或擴展卡上的物理端口編號

設備名稱類型

格式 說明
eno1 板載設備索引號
ens33 熱插拔插槽索引號

舉例:

名稱 設備類型 說明
eno1 板載網卡 板載1號網卡
enp0s2 pci網卡 PCI擴展卡的2號端口
ens33 pci網卡 熱插拔插槽3號PCI-E插槽的3號端口
wlp3s0 PCI無線網卡 第3號PCI擴展卡的0號端口

2.biosdevname命名規範

Centos系統需要安裝biosdevname程序包纔可以使用biosdevname命名規範,biosdevname程序讀取BIOS信息中的type 9(系統插槽)和 type 41(板載設備擴展信息)兩個字段信息來命名網卡。(要求SMBIOS的版本要高於2.6)

設備 舊名稱 新名稱
板載內置網卡 eth[0123…] em[1234…] em1
PCI擴展卡網絡接口 eth[0123…] p【槽位號】p【端口號】 p3p4
子接口虛擬功能 eth[0123…] p【槽位號】p【端口號】_【子接口號】 p3p4_1

二、系統默認的網卡命名規則

官方文檔命名規則描如下:
默認情況下,systemd 會使用以下策略,採用支持的命名方案爲接口命名:

方案 1:如果固件或 BIOS 信息適用且可用,則使用整合了爲板載設備提供索引號的固件或 BIOS 的名稱(例如:eno1),否則請使用方案 2。(針對的是板載集成網卡命名)

方案 2:如果固件或 BIOS 信息適用且可用,則使用整合了爲 PCI 快速熱插拔插槽提供索引號的固件或 BIOS 名稱(例如 ens1),否則請使用方案 3。(針對的是PCI-E擴展網卡針命名標準)

方案 3:如果硬件連接器物理位置信息可用,則使用整合了該信息的名稱(例如:enp2s0),否則請使用方案 5。

方案 4:默認不使用整合接口 MAC 地址的名稱(例如:enx78e7d1ea46da),但用戶可選擇使用此方案。(根據MAC地址命名網卡)

方案 5:傳統的不可預測的內核命名方案,在其他方法均失敗後使用(例如: eth0)(以上命令信息都無法獲取時則採用傳統的命令規則)

這個策略(如上所述)是默認策略。如果該系統已啓用 biosdevname,則會使用該方案。注:啓用 biosdevname 需要添加 biosdevname=1 作爲命令行參數(Dell 系統除外),此時只要安裝 biosdevname,就會默認使用該方案。如果用戶已添加 udev 規則,該規則會更高內核設備名稱,則會優先使用這些規則

三、設備重命名策略

關於設備重命名官方的文檔做了如下闡述:
1./usr/lib/udev/rules.d/60-net.rules 文件中的規則會讓 udev 幫助工具 /lib/udev/rename_device 查看所有 /etc/sysconfig/network-scripts/ifcfg-suffix 文件。如果發現包含 HWADDR 條目的 ifcfg 文件與某個接口的 MAC 地址匹配,它會將該接口重命名爲 ifcfg 文件中由 DEVICE 指令給出的名稱。

2./usr/lib/udev/rules.d/71-biosdevname.rules 中的規則讓 biosdevname 根據其命名策略重命名該接口,即在上一步中沒有重命名該接口、已安裝 biosdevname、且在 boot 命令行中將 biosdevname=0 作爲內核命令給出。

3./lib/udev/rules.d/75-net-description.rules 中的規則讓 udev 通過檢查網絡接口設備,填寫內部 udev 設備屬性值 ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。注:有些設備屬性可能處於未定義狀態。

4./usr/lib/udev/rules.d/80-net-name-slot.rules 中的規則讓 udev 重命名該接口,優先順序如下:ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。並提供如下信息:沒有在步驟 1 或 2 中重命名該接口,同時未給出內核參數 net.ifnames=0。如果一個參數未設定,則會按列表的順序設定下一個。如果沒有設定任何參數,則不會重命名該接口。

從官方的闡述來看1,3,4都與系統systemd udev命名規則有關,2與biosdevname有關,個人理解四個文件的用途如下:

1./usr/lib/udev/rules.d/60-net.rules (rename_device程序基於自定義配置文件命名)

如果在目錄/etc/sysconfig/network-scripts/中有以ifcfg-開頭的文件,並且其中包含了指定網卡的MAC,則以ifcfg文件中的DEVICE字段給寫的名稱命名。
2./usr/lib/udev/rules.d/71-biosdevname.rules(biosdevname基於BIOS信息自動命名)

如果ifcfg開頭的文件中找不到對應的配置,則看系統是否安裝了biosdevname程序包,並且系統未設備參數biosdevname=0,則按biosdevname命名標準爲網卡命名。

3./lib/udev/rules.d/75-net-description.rules(systemd-udev基於systemd-udev基於網卡信息命名)
如果1,2兩條規則都沒有命中則查看網卡信息,基於網卡信息指定的字段命名。
4./usr/lib/udev/rules.d/80-net-name-slot.rules(systemd-udev基於systemd-udev基於BIOS信息命名)
網卡信息都沒有指定的字段,則按BIOS獲取的板載槽位信息命名。

總結:自定義配置的優先級、其次是biosdevname、最後是systemd-udev自動配置

四、恢復網卡傳統命名標準

從以上命名策略與命名規則來看,響應網卡命名的應該就是受biosdevname、net.ifnames兩個參數影響,官方也給出兩個參數的默認值:iosdevname=0是系統默認值(dell服務器默認是1),net.ifnames=1是系統默認值
如果想恢復以前的傳統命名規範則只需要在grub文件中將兩個參數設置爲0即可,具體操作過程如下:

1.編輯/etc/sysconfig/grub文件,在GRUB_CMDLINE_LINUX字段最後添加net.ifnames=0 biosdevname=0

2.重新生成配置文件grub配置文件,執行如下命名

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

3.手動編輯/etc/sysconfig/network-scripts/目錄下的ifcf-開頭的文件,注意:HWADDR字段要與待命名的網卡MAC地址對應,或者UUID字段與網卡的UUID對應也可以。

4、重啓系統。

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