現在位置: ホーム / Red Hat Ch. / Red Hat Blog / VMware環境上でのRed Hat Enterprise Linux 7.2以前から7.3へアップデート時の注意点と、その解説

VMware環境上でのRed Hat Enterprise Linux 7.2以前から7.3へアップデート時の注意点と、その解説

2016年11月3日にリリースされたRHEL 7.3ではアップデートに関連した比較的大きな問題がありました。本記事では問題の概要と背景をご紹介します。

レッドハットの森若です。2016年11月3日にリリースされたRHEL 7.3ではアップデートに関連した比較的大きな問題がありました。概要は以下のようなものです。

--------------------------------------------------------------------------------

問題:
VMware環境上で動作している Red Hat Enterprise Linux 7.2以前の環境を、7.3へアップデートするとインタフェース名が変わり、再起動時にネットワークのセットアップに失敗する場合があります。

解決策1:
RHEL 7.3に更新したあと再起動せずに、systemdパッケージを systemd-219-30.el7_3.6 以降のバージョンへ更新します。「RHEL 7.3に更新したあと再起動して問題が発生した」事後には、systemdパッケージのアップデートは効果がありません。

解決策2:
既に問題が発生した場合、ネットワーク設定を変更する必要があります。詳しい手順はナレッジベース内「RHEL 7.3 にアップデートした後にインターフェイス名が変更になり、ネットワークが起動しない」
https://access.redhat.com/ja/solutions/2756581 をご確認ください。

※ ISOイメージによる更新の場合には現在でもこの問題が発生します。

--------------------------------------------------------------------------------

さて今回はこの問題の背景を見ていきます。

systemdによる予測可能なNetwork Interfaceの命名

systemdはハードウェアの接続情報を元に一貫したNetwork Interfaceへの命名を行っています。たとえば「eno1」のような名前がつき、Ethernet(en)のオンボード(o)で1ポート目(1)のような名前がつきます。このような構成情報はファームウェアから提供されており、dmidecodeコマンドでも確認することができます。

Handle 0x001E, DMI type 41, 11 bytes
Onboard Device
    
    Reference Designation:  Onboard LAN
    
    Type: Ethernet
   
    Status: Enabled
   
    Type Instance: 1
   
    Bus Address: 0000:00:19.0

VMware環境でのインスタンス番号

この番号について、VMware環境のファームウェアは異常に大きなインスタンス番号を報告します。1600万番前後の数になります。RHELの7.0から7.2までは、この番号を素直に利用した eno16780032 のようなNetwork Interface名を命名していました。

LinuxでのNetwork Interface名前長制限

ところがこの命名には、単純に長くて入力が面倒という以上の問題があります。Linuxには「Network Interfaceの名前は15文字まで」という制限があります。eno+数字8桁で11文字利用しているので、残りは4文字しか利用できません。たとえばこの時VLAN tag ID として1000を利用するためのインタフェースを作成しようとすると、”eno16780032.1000” のようになってほしいところですが、”eno16780032.100”となってVLAN tag IDとして100や1005を使うインタフェースと名前が衝突してしまいます。

systemdが採用したワークアラウンド

RHEL 7.3のsystemdでは、この問題に対するワークアラウンドとして、オンボードのNICで16384番より大きい番号が与えられた場合はスロット番号またはバス番号を元にした名前を付与するよう変更されました。

udevadmでNetwork Interfaceの情報を見てみると、ID_NET_NAME_ ではじまるエントリが複数あることがわかります。

# udevadm info /sys/class/net/eno16780032
P:/devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eno16780032
E:DEVPATH=/devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eno16780032
E:ID_BUS=pci
E:ID_MODEL_FROM_DATABASE=VMXNET3 Ethernet Controller
E:ID_MODEL_ID=0x07b0
E:ID_NET_DRIVER=vmxnet3
E:ID_NET_LABEL_ONBOARD=enEthernet0
E:ID_NET_NAME_MAC=enx005056a570ba
E:ID_NET_NAME_ONBOARD=eno16780032
E:ID_NET_NAME_PATH=enp11s0
E:ID_NET_NAME_SLOT=ens192
E:ID_OUI_FROM_DATABASE=VMware, Inc.
E:ID_PATH=pci-0000:0b:00.0
E:ID_PATH_TAG=pci-0000_0b_00_0
E:ID_PCI_CLASS_FROM_DATABASE=Network controller
E:ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E:ID_VENDOR_FROM_DATABASE=VMware
E:ID_VENDOR_ID=0x15ad
E:IFINDEX=2
E:INTERFACE=eno16780032
E:SUBSYSTEM=net
E:SYSTEMD_ALIAS=/sys/subsystem/net/devices/eno16780032
E:TAGS=:systemd:
E:USEC_INITIALIZED=28864

NetworkManagerのconnection識別方式

NetworkManagerでネットワークを初期化する際には、設定にNetwork Interface名とMACアドレスが含まれていると、MACアドレスにあわせて指定された名前にリネームして初期化を行います。しかしMACアドレスが含まれない場合はNetwork Interface名が一致しなければ初期化がおこなわれません。

このため、NetworkManagerによる設定を利用しており、RHEL 7.0から7.2まででNetwork Interfaceを設定したのち、MACアドレスの設定を含まないよう設定し、7.3へアップグレードして設定を修正せずに再起動すると初期化に失敗します。

systemd-219-30.el7_3.6で導入されたワークアラウンド

この問題は出荷翌日の11月4日に発見され、ワークアラウンドを含んだ systemd-219-30.el7_3.6 が11月9日に出荷されました。この中で利用されているワークアラウンドは、systemdパッケージ更新時に以下のような内容のスクリプトを実行することにより対応しています。

もしこの問題の影響をうける(enoではじまり16378より大きな数で終わる名前の)インタフェースがある場合、udevのルールに「現在のMACアドレスを持つ場合に現在と同じインタフェース名に名前をつけかえる」というエントリを追加します。

これにより、影響をうけるアップデートの場合にのみインタフェースの名前を維持する対策が行われます。注意点として、この状態の仮想マシンをクローンするなどでMACアドレスが変更されるとインタフェース名が新しいポリシーによるものに変わります。

お問い合わせ

問い合わせボタン

RHEL サポート

最近の更新
AnsibleとRed Hat Identity Managementを併用すると便利 2017年02月28日
Red Hat Satellite 6でerrataを適用してみる 2016年11月28日
VMware環境上でのRed Hat Enterprise Linux 7.2以前から7.3へアップデート時の注意点と、その解説 2016年11月24日
RHEL4の延長サポートおよびRHEL5の通常サポート終了 2016年10月17日
Red Hat Enterprise Linuxの互換性維持 2016年08月31日
RED HAT FORUM 2016 Tokyo The power of participation -アイデアとテクノロジーが生むオープンイノベーションの破壊力- 2016年08月12日
Red Hat Network ClassicからRed Hat Subscription Managementへ移行のおねがい 2016年07月27日
ABRTで障害時の情報収集とレポートを自動化しよう 2016年06月03日
Red Hat Enterprise Linux 7、使ってますか? 2016年04月27日
Red Hat Developer Programに参加して開発者用サブスクリプションを入手しよう 2016年04月01日
Relax and Recoverでのシステム回復 2016年03月08日
Red Hat Insightsとは 2015年11月13日
Red Hat Enterprise Linuxを仮想化環境で動作させる時の注意点 2015年10月05日
RHEL7でpingをreniceしようとすると失敗する話 2015年08月31日
Red Hat Satellite使いはじめガイド 2015年08月20日
ELS? EUS? RHELの延長サポート製品について知ろう 2015年08月13日
Performance Co-Pilotでパフォーマンス測定を簡単にしよう 2015年08月06日
Red Hat Enterprise Linuxでの独自コンテナイメージの作成 2015年07月29日
RHELセキュリティ情報の入手と対応 2015年07月23日
systemd-journaldを活用しよう 2015年07月16日