伺服器通常有多塊網絡卡,有板載整合的,同時也有插在pcie插槽的。linux系統的命名原來是eth0,eth1這樣的形式,但是這個編號往往不一定準確對應網絡卡介面的物理順序。
為解決這類問題,dell開發了biosdevname方案。
systemd v197版本中將dell的方案作了進一步的一般化拓展。
目前的centos既支援dell的biosdevname,也支援systemd的方案。
scheme 1: 如果從bios中能夠取到可用的,板載網絡卡的索引號,則使用這個索引號命名,例如: eno1,如不能則嘗試scheme 2
scheme 2: 如果從bios中能夠取到可以用的,網絡卡所在的pci-e熱插拔插槽(注:pci槽位號)的索引號,則使用這個索引號命名,例如: ens1,如不能則嘗試scheme 3
scheme 3:如果能拿到裝置所連線的物理位置(pci匯流排號+槽位號?)資訊,則使用這個資訊命名,例如:enp2s0,如不能則嘗試scheme 5
scheme 5:傳統的kernel命名方法,例如: eth0,這種命名方法的結果不可預知的,即可能第二塊網絡卡對應eth0,第一塊網絡卡對應eth1。
scheme 4 使用網絡卡的mac位址來命名,這個方法一般不使用。
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 虛擬網絡卡
按照如下順序執行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
1)60-net.rules
使用/lib/udev/rename_device這個程式,去查詢/etc/sysconfig/network-scripts/下所有以ifcfg-開頭的檔案,如果在ifcfg-xx中匹配到hwaddr=xx:xx:xx:xx:xx:xx引數的網絡卡介面則選取device=yyyy中設定的名字作為網絡卡名稱。
2)71-biosdevname.rules
如果系統中安裝了biosdevname,且核心引數指定biosdevname=1,且上一步沒有重新命名網絡卡,則按照biosdevname的命名規範,從bios中取相關資訊來命名網絡卡。
主要是取smbios中的type 9 (system slot) 和 type 41 (onboard devices extended information)不過要求smbios的版本要高於2.6,且系統中要安裝biosdevname程式。
3)75-net-description.rules
udev通過檢查網絡卡資訊,填寫如下這些udev的屬性值
id_net_name_onboard
id_net_name_slot
id_net_name_path
id_net_name_mac
4)80-net-name-slot.rules
如果在60-net.rules ,71-biosdevname.rules這兩條規則中沒有重新命名網絡卡,且核心指定net.ifnames=1引數,則udev依次嘗試使用以下屬性值來命名網絡卡,如果這些屬性值都沒有,則網絡卡不會被重新命名。
id_net_name_onboard
id_net_name_slot
id_net_name_path
上邊的71-biosdevname.rules 是實際執行biosdevname的策略
75-net-description.rules和80-net-name-slot.rules實際執行上面策略的1,2,3。
根據上述的過程,可見網絡卡命名受 biosdevname和net.ifnames這兩個核心引數影響。
這兩個引數都可以在grub配置中提供。
biosdevname=0是系統預設值(dell伺服器預設是1),net.ifnames=1是系統預設值:
修改預設引數:如回歸預設命名方式:
1)編輯核心引數
在grub_cmdline_linux中加入
net.ifnames=0即可
[root
@centos
7 ~]$vim
/etc/default
/grub
grub_cmdline_linux=
"crashkernel=auto net.ifnames=0 rhgb quiet"
2)為grub2生成配置檔案
編輯完grub配置檔案以後不會立即生效,需要生成配置檔案。
[root@centos7 ~]$grub2-mkconfig -o /etc/grub2.cfg
第二節所說的scheme的策略順序是系統預設的。
總結:1)如系統bios符合要求,且系統中安裝了biosdevname,且biosdevname=1啟用,則biosdevname優先;
2)如果bios不符合biosdevname要求或biosdevname=0,則仍然是systemd的規則優先。
3)如果使用者自己定義了udev rule來修改核心裝置名字,則使用者規則優先。
核心引數組合使用的時候,其結果如下:
預設核心引數(biosdevname=0,net.ifnames=1): 網絡卡名 "enp5s2"
biosdevname=1,net.ifnames=0:網絡卡名 "em1"
biosdevname=0,net.ifnames=0:網絡卡名 "eth0" (最傳統的方式,eth0 eth1 )
網絡卡命名規則(linux)
網絡卡命名規則 scheme 1 如果從bios中能夠取到可用的,板載網絡卡的索引號,則使用這個索引號命名,例如 eno1,如不能則嘗試scheme 2 scheme 2 如果從bios中能夠取到可以用的,網絡卡所在的pci e熱插拔插槽 注 pci槽位號 的索引號,則使用這個索引號命名,例如 en...
修改網絡卡命名規則的筆記
先修改啟動檔案 etc sysconfig grub cmdline linux 行尾加 net.ifnames 0 biosdevname 0 刷一下 grub2 mkconfig o boot grub grub.cfg 將現在已經有啟始那個更名mv ifcfg ens33 ifcfg eth0...
Linux裝置命名規則
linux中ide硬碟,驅動識別符號為 hdx 其中hd表示裝置型別為ide硬碟,x為盤號,表示第幾塊硬碟 a為基本盤,b為基本從屬盤,c為輔助主盤,d為輔助從屬盤 代表分割槽,前4個分割槽用數字1到4表示,它們是主分割槽或擴充套件分割槽,從5開始就是邏輯分割槽 擴充套件分割槽不能直接使用,需切割出...