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

2021-08-09 05:29:09 字數 3330 閱讀 8392

原文

一致性網路裝置命名,即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 傻傻分不清)

參考文件:

保證一致性嗎 Kafka的一致性保證

魚和熊掌不可兼得。系統設計需要根據具體的應用場景做出權衡。系統設計者可以通過配置kafka,來得到不同程度的需求滿足。每個kafka主題 topic 都分為多個分割槽 partitions 每個分割槽可以具有多個副本 replica 其中乙個副本是主分割槽 leader 所有讀寫請求都由主分割槽提供...

同步非同步中的一致性

共識問題 可稱作協作,所有正確的程序對提議的值達成一致。分布式系統中,節點之間通過通訊,對請求達成一致的定序。問題定義 程序pi處於未決狀態 undecideed 提議集合d中的某個值vi。程序之間相互通訊,交換各自的提議。每個程序設定自己的決定變數 decision variable 進入決定狀態...

HBase的一致性

hbase是乙個強一致性資料庫,不是 最終一致性 資料庫,官網給出的介紹 strongly consistent reads writes hbase is not an eventually consistent datastore.this makes it very suitable for ...