我有多個運行 CentOS 7 且帶有四個板載 NIC 的相同設備。為了保持與執行 RHEL6 的舊版裝置(即ethX
)類似的感覺,我想使用 RHEL6 使用的網路命名方案。我還希望最大限度地減少創建用於每個設備的通用系統磁碟後所需的更改數量。
如果我了解 CentOS 7 中的命名方案,則命名方案根據硬體位置是一致的,因此如果硬體相同,我將為裝置的每個實例使用相同的網路介面名稱。
由於客戶需求,我需要使設備的網路介面在 CentOS 7 和 RHEL6 版本上具有相同的名稱。
一種方法是擴展內核命令行,net.ifnames=0
如下所述這裡然後創建我自己的ifcfg-ethX
文件。然而,據我所知,這樣做需要手動修改設定檔。由於遺留的順序是固定的但任意的,這使得情況變得更加複雜,所以我必須為每個系統修改這些檔案。 :-/
我的一個想法是使用 CentOS 7 命名方案,然後為每個命名方案添加一個別名,以便可以根據硬體位置應用任意命名方案。是否有可能做到這一點?
關於如何為同一裝置和 IP 位址取得兩個名稱還有其他想法嗎?
注意:我不是問如何將多個 IP 位址新增到同一設備,這相當簡單。
編輯: 我確實需要重命名它,但想以程式設計方式執行此操作。
答案1
名稱可以同時是「任意」和「基於硬體位置」嗎?這些話互相矛盾。
這些
eth#
名稱是由核心本身根據每次啟動時的檢測順序分配的 - 換句話說,它們是“先來先服務”,與硬體位置無關。較舊的 udev 版本用於自動產生文件
/etc/udev/rules.d
將這些分配綁定到卡片的 MAC 位址。您也許可以將該檔案複製到新系統。您也可以編寫自訂 udev 規則來
NAME=
根據位址或 PCI 位置設定參數。 (請注意,將來 udev 可能會拒絕將介面重命名為eth*
,如果還沒有的話。即使允許,這種重命名也非常脆弱,如果以不同的順序發現設備,則可能會失敗。)雖然據我所知,RHEL 6 使用生物設備名稱用於產生基於物理的介面名稱(核心交換器
biosdevname=0
)。 RHEL 7 使用 systemd-udevd 的內建 net_id 來實現此目的(核心開關net.ifnames=0
)。為了得到
p1p2
樣式名稱,您可以yum install biosdevname
,然後透過內核命令列啟用它(biosdevname=1 net.ifnames=0
)。請參閱紅帽文檔。
網路介面不能有別名。