1. 程式人生 > >Centos 7中的網卡一致性命名規則

Centos 7中的網卡一致性命名規則

ron dell服務器 guide 技術 grub -i udev gid sysconfig

一致性網絡設備命名,即Consistent Network Device Naming

一、為什麽需要這個

服務器通常有多塊網卡,有板載集成的,同時也有插在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熱插拔插槽的索引號,則使用這個索引號命名,例如: ens1,如不能則嘗試Scheme 3

Scheme 3:如果能拿到設備所連接的物理位置信息,則使用這個信息命名,例如: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

60-net.rules

使用/lib/udev/rename_device這個程序,去查詢/etc/sysconfig/network-scripts/下所有以ifcfg-開頭的文件

如果在ifcfg-xx中匹配到HWADDR=xx:xx:xx:xx:xx:xx參數的網卡接口

則選取DEVICE=yyyy中設置的名字作為網卡名稱。

71-biosdevname.rules

如果系統中安裝了biosdevname,且內核參數未指定biosdevname=0,且上一步沒有重命名網卡,則按照biosdevname的命名規範,從BIOS中取相關信息來命名網卡。

主要是取SMBIOS中的type 9 (System Slot) 和 type 41 (Onboard Devices Extended Information)

不過要求SMBIOS的版本要高於2.6,且系統中要安裝biosdevname程序。

75-net-description.rules

udev通過檢查網卡信息,填寫如下這些udev的屬性值

ID_NET_NAME_ONBOARD

ID_NET_NAME_SLOT

ID_NET_NAME_PATH

ID_NET_NAME_MAC

80-net-name-slot.rules

如果在60-net.rules ,71-biosdevname.rules這兩條規則中沒有重命名網卡,且內核未指定net.ifnames=0參數

則udev依次嘗試使用以下屬性值來命名網卡,如果這些屬性值都沒有,則網卡不會被重命名。

ID_NET_NAME_ONBOARD

ID_NET_NAME_SLOT

ID_NET_NAME_PATH

上邊的71-biosdevname.rules 是實際執行biosdevname的policy

75-net-description.rules和80-net-name-slot.rules實際執行Scheme 1,2,3

根據上述的過程,可見網卡命名受 biosdevname和net.ifnames這兩個內核參數影響。

這兩個參數都可以在grub配置中提供。

biosdevname=0是系統默認值(dell服務器默認是1),net.ifnames=1是系統默認值:

#vi /boot/grub/grub.conf

kernel /boot/vmlinuz biosdevname=1

initrd /boot/initrd.img

第二節所說的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 傻傻分不清)

參考文檔:

http://benjr.tw/93340

https://docs.google.com/viewer?url=http://domsch.com/linux/lpc2010/lpc2010-network-device-naming.pdf

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/

http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

http://blog.chinaunix.net/uid-14735472-id-4195429.html

Centos 7中的網卡一致性命名規則