centos7中的網卡名稱相關知識

轉載自https://www.cnblogs.com/zyd112/p/8143464.htmlhtml

一致性網絡設備命名(Consistent Network Device Naming)ios

背景介紹:centos

在centos5的時候,咱們習慣了eth0這樣的網絡設備命名,在centos6發現網絡設備變成了em1這樣的命名。那時咱們在安裝的時候,給啓動參數加上 biosdevname=0,就能夠繼續使用eth0這樣的命名。數組

升級到centos7後,發現原有的參數biosdevname=0不起做用了,網絡設備變成了eno1這樣的名稱。服務器

centos7這種變化的緣由是因爲systemd和udev引入了一種新的網絡設備命名方式:一致網絡設備命名(CONSISTENT NETWORK DEVICE NAMING)。網絡

 

1、爲何須要這個ide

服務器一般有多塊網卡,有板載集成的,同時也有插在PCIe插槽的。
Linux系統的命名原來是eth0,eth1這樣的形式,可是這個編號每每不必定準確對應網卡接口的物理順序。
爲解決這類問題,dell開發了biosdevname方案(systemd v197版本中將dell的方案做了進一步的通常化拓展)。ui

目前的Centos既支持dell的biosdevname,也支持systemd的方案。centos7

image

2、Centos7中的命名策略orm

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地址來命名,這個方法通常不使用。

3、biosdevname和net.ifnames兩種命名規範

net.ifnames命名規範爲:設備類型+設備位置+數字

設備類型:
en 表示Ethernet
wl 表示WLAN
ww 表示無線廣域網WWAN

設備位置:

image


實際的例子:
eno1 板載網卡
enp0s2  pci網卡
ens33   pci網卡
wlp3s0  PCI無線網卡
wwp0s29f7u2i2   4G modem
wlp0s2f1u4u1   鏈接在USB Hub上的無線網卡
enx78e7d1ea46da pci網卡
----------------------------------------

biosdevname的命名規範爲:

image

實際的例子:
em1 板載網卡
p3p4 pci網卡
p3p4_1 虛擬網卡

4、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這兩個內核參數影響。

5、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 傻傻分不清)

 

6、centos7網卡重命名爲ethx格式

若是你但願繼續使用 eth0 這樣的傳統名稱,那麼在安裝啓動(pxe)時加上參數:
net.ifnames=0 biosdevname=0

cobbler profile 修改方法:
cobbler profile edit --name=Centos-7.3-x86_64 --kopts='net.ifnames=0 biosdevname=0'

若是你已經安裝完了,但願改爲eth0這樣的名稱,那麼執行以下操做須要:

1.修改grub2啓動參數,在GRUB_CMDLINE_LINUX的中加上"net.ifnames=0 biosdevname=0"的參數
vi /etc/sysconfig/grub
GRUB_CMDLINE_LINUX=」rd.lvm.lv=vg0/swap vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 net.ifnames=0 biosdevname=0rd.lvm.lv=vg0/usr rhgb quiet」

2.從新加載到啓動中
grub2-mkconfig -o /boot/grub2/grub.cfg

3.從新對網卡配置文件進行命名(網卡文件所有重命名,順便修改配置文件NAME、DEVICE的名稱)
mv /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-eth0

4.reboot重啓生效

參考文檔:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.htmlhttps://bugzilla.redhat.com/show_bug.cgi?id=965718

相關文章
相關標籤/搜索