めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

RHEL7のNICのネーミングルール

何の話かというと

RHEL7では、NICのネーミングルールが変わっています。RHEL6では、DELL製のハードウェアの場合だけネーミングルールが変わるという謎のudevルール(biosdevname)がありましたが、RHEL7では、さらにまた仕組みが変わって、systemdがNICのネーミングを行うようになりました。

まとめると次のようになります。

バージョン ハードウェア ネーミングルール
RHEL5 すべて 古典的な「eth0」「eth1」など
RHEL6 一般のマシン 古典的な「eth0」「eth1」など
RHEL6 DELL製のハードウェア biosdevnameによる「em1」「em2」「p1p1」など
RHEL7 一般のマシン Predictable Network Interface Names
RHEL7 DELL製のハードウェア biosdevnameによる「em1」「em2」「p1p1」など

※もともと、biosdevnameはDELL社が開発したもので、DELL製のハードウェアが特別扱いになっているのは、DELL社からのリクエストによるものです。biosdevnameの詳細については、下記の資料を参考にしてください。

RHEL 6 SP1が、デル製システム上でネットワークデバイスの進化した命名規則を実現
Consistent Network Device Naming in Linux [PDF]

Predictable Network Interface Namesの命名ルール

RHEL7からの新しい命名ルールは、「Predictable Network Interface Names」と呼ばれます。詳細は、冒頭の参考資料に詳しく書かれていますが、ざっくりまとめると次のようになります。

まず、頭の2文字からNICの種類が分かります。

種類 頭の2文字
イーサネット en
ワイヤレス wl

次に、Firmware/BIOSがNICの(固定的な)論理番号を提供する場合は、その番号に基づいて「eno1」「ens1」などとなります。この時の3文字目は、オンボードかPCI Expressかを表します。

種類 3文字目
オンボード o
PCI Express s

Firmware/BIOSがNICの(固定的な)論理番号を提供していない場合は、PCI(もしくはUSB)の物理的なロケーション(バスとスロットの番号)に基づいて、「enp1s1」などとなります。3文字目以降が「ps」というルールです。

ロケーション情報が取得できない場合は、古典的な「eth0」などが割り当てられます。

より詳細なルールについては、ソースコードを参照下さい。また、強制的に古典的ルールに戻す方法は、下記のBlogに記載があります。

systemd-udevdによるNIC命名とbiosdevnameがまざって混乱する件

仮想マシンをクローンした時の処理

Linux KVMの仮想マシンでは、NICのデバイス名は古典的な「eth0」になります。RHEL6では、仮想マシンをクローンするなどして、NICのMACアドレスが変わった場合、デバイス名が変わるので、「/etc/udev/rules.d/70-persistent-net.rules」を修正する必要がありました。RHEL7の場合は、デバイス名とMACアドレスの紐づけは無くなっているため、MACアドレスが変わってもNICのデバイス名は変更されません。

ただし、RHEL7では、IPアドレスの設定は、NetworkManagerで行われており、設定ファイル「/etc/sysconifg/network-scripts/ifcfg-eth0」の中に、MACアドレスを表すHWADDRのエントリーが記載されています。したがって、HWADDRを新しいMACアドレスに修正する必要があります。(HWADDRのエントリーを削除してもうまくいくようですが、NetworkManagerでは、nmcliコマンドによる管理が推奨されるので、設定ファイル内のエントリーは不用意に削除しないほうがよいかも知れません。)