何の話かというと
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文字目以降が「p
ロケーション情報が取得できない場合は、古典的な「eth0」などが割り当てられます。
より詳細なルールについては、ソースコードを参照下さい。また、強制的に古典的ルールに戻す方法は、下記のBlogに記載があります。
仮想マシンをクローンした時の処理
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コマンドによる管理が推奨されるので、設定ファイル内のエントリーは不用意に削除しないほうがよいかも知れません。)