Hyper-V ドライバーに関連するエラーによる Linux 仮想マシンの起動とネットワークの問題のトラブルシューティング

適用対象: ✔️ Linux VM

Azure は Hyper-V ハイパーバイザーで実行され、Linux システムでは、Azure で実行するために特定の Hyper-V カーネル モジュールが必要です。 これらのカーネル モジュールは、Hyper-V と Azure の Linux Integration Services (LIS) ドライバーにバンドルされています。 Microsoft は、アップストリームの Linux カーネルに直接提供します。

この記事では、1 つ以上の無効な Hyper-V ドライバーが Linux 仮想マシン (VM) の起動とネットワークの問題につながる可能性がある複数の条件について説明します。

前提条件

コンソールが有効になっており、Linux VM で機能していることを確認します。

不足している Hyper-V ドライバーの問題を特定する方法

Hyper-V ドライバーが不足しているために VM の起動に失敗したかどうかを確認するには、 Azure CLI または Azure portal を使用して、ブート診断ウィンドウまたはシリアル コンソール ウィンドウで VM のシリアル コンソール ログを表示します。 エラーのサンプル出力は、以下の対応するセクションに表示されます。

トラブルシューティングを行う前に

Scenario 1: Network Hyper-V ドライバーが無効になっているScenario 2: NIC mac アドレスが変更されたか、一致しないをトラブルシューティングするには、Linux VM のコンソールアクセスが必要です。

シリアル コンソールにアクセスできない場合は、 オフラインアプローチに従って 問題のある OS ディスクの内容に復旧仮想マシンからアクセスします。 オフライン アプローチには、Azure CLI または Azure Cloud Shell へのアクセスが必要です。

Scenario 3: その他の Hyper-V ドライバーが無効になっているのトラブルシューティングを行うには、オフラインアプローチのみが問題を解決するオプションです。

シナリオ 1: ネットワーク Hyper-V ドライバーが無効になっている

ネットワーク サービスは使用できないため、仮想マシンに対して Secure Shell Protocol (SSH) を使用することはできませんが、Azure portal から serial コンソール 経由でサインインすることはできます。 Azure portal の Boot Diagnostics ペインに、シリアル コンソールまたは最新のシリアル ログに次の種類のエラーが表示されます。

 cloud-init[807]: Cloud-init v. 19.4 running 'init-local' at Tue, xx Aug 20XX 20:41:53 +0000. Up 5.83 seconds.
 cloud-init[807]: 20XX-08-XX 20:41:54,231 - stages.py[WARNING]: Failed to rename devices: [nic not present] Cannot rename mac=xx:xx:xx:xx:xx:xx to eth0, not available.
[  OK  ] Started Initial cloud-init job (pre-networking).
----
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.

または

 cloud-init[799]: 2022-XX-XX 19:04:06,267 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-XX 19:04:07,269 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-XX 19:04:10,274 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-2XX 19:04:10,277 - azure.py[WARNING]: IMDS network metadata has incomplete configuration: None

解決策 1: シリアル コンソールを使用して Hyper-V ネットワーク ドライバーを有効にする

  1. VM のシリアル コンソールにアクセスします。 ネットワークはダウンしていますが、ログイン プロンプトは引き続き使用できます。

  2. 正しい資格情報を使用して VM にサインインします。

  3. sudo アクセス権を持つルート アカウントまたはユーザー アカウントに切り替えます。

  4. /etc/modprobe.d ディレクトリに移動し、hv_netvsc ドライバーを無効にする行を探します。

    1. 次のコマンドを実行して、hv_netvsc ドライバーと対応する行番号を無効にするファイルを特定します。

      grep -nr "hv_netvsc" /etc/modprobe.d/
      
    2. 対応するファイルを変更し、hv_netvscエントリをコメント アウトまたは削除します。

      ネットワーク ドライバーを無効にするために使用できる構成ファイルの内容を示すスクリーンショット。

      vi /etc/modprobe.d/disable.conf
      

      Note

      • ドライバーを無効にするエントリは、Microsoft ではなく Linux オペレーティング システムによって定義されます。
      • disable.confを、hv_netvsc ドライバーが無効になっている対応するファイル名に置き換えます。
  5. 現在読み込まれているカーネルの初期 RAMdisk イメージをリビルドします。

    • RHEL/SLES ベースのイメージの場合

      # dracut -f -v
      
    • Ubuntu/Debian ベースのイメージの場合

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  6. VM を再起動してください。

必要に応じ、ロールバックを容易にするために、常に元の初期 RAMdisk イメージのバックアップを作成します。

  • RHEL ベースのイメージの場合:

    # cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
    
  • SLES ベースのイメージの場合:

    # cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
    
  • Ubuntu/Debian ベースのイメージの場合:

    # cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
    

解決策 2: Hyper-V ネットワーク ドライバーをオフラインで有効にする

  1. az vm repair を使用して、復旧 VM から影響を受ける OS ディスクの内容にアクセスします。

  2. chroot の手順に従って、復旧 VM の接続された OS ディスクのファイル システムにマウントし、chroot します

  3. 影響を受ける OS ディスクの内容にアクセスしたら、「 ソリューション 1: シリアル コンソールを使用して Hyper-V ネットワーク ドライバーを有効にする ドライバーを再度有効にして、初期 RAMdisk イメージを再構築する」の手順 4 と 5 に従います。

    初期 RAMdisk イメージを再構築する前に、chroot 環境に切り替えます。 イメージの完全なパスを指定する必要があります。

  4. 変更が適用されたら、元の VM で OS ディスクの自動スワップを実行し、 az vm repair restore コマンドを使用してシステムを再起動します。

シナリオ 2: NIC MAC アドレスが変更されたか、一致しない

ネットワーク インターフェイス カードの MAC アドレスが変更された場合、または OS 構成内で一致しない場合は、ネットワーク サービスが使用できないため、VM に SSH 接続できません。 Azure portal から serial コンソール 経由でサインインすることはできます。 Scenario 1: Network Hyper-V ドライバーが無効になっているのようなエラーが表示されます。

Hyper-V ネットワーク ドライバーが有効になっていても問題が解決しない場合は、次のいずれかのソリューションを使用して OS NIC の構成を検証し、問題を解決します。

解決策 1: シリアル コンソールを使用して NIC MAC アドレスの不一致を修正する

  1. VM のシリアル コンソールにアクセスします。 ネットワークはダウンしていますが、ログイン プロンプトは引き続き使用できます。

  2. 正しい資格情報を使用して VM にサインインします。

  3. sudo アクセス権を持つルート アカウントまたはユーザー アカウントに切り替えます。

  4. /etc/cloud/cloud.cfg.d ディレクトリに移動します。

  5. Linux パートナー イメージ 考慮して を使用し、次のファイルを開いて編集します。

    • RHEL ベースの配布用の 91 azure_datasource.cfg
    • debian および Ubuntu ベースのディストリビューション用の 90_dpkg.cfg
  6. apply_network_config パラメーターが false に設定されている場合は、true に設定します。 何も指定しない場合、既定値は true に設定されます。 この設定により、次回の再起動時に新しい MAC アドレスがネットワーク構成に適用されます。

  7. 一般に、NIC MAC アドレスは、NIC が削除または管理者によって追加された場合、または NIC がバックエンドで更新された場合にのみ変更されます。 cloud-init 経由のネットワーク構成が不要で、 apply_network_config パラメーターを false に設定する必要がある場合は、 /var/lib/cloud/instance/obj.pkl ファイルを削除し、システムを再起動します。

    # rm /var/lib/cloud/instance/obj.pkl
    
  8. 変更が適用されたら、システムを再起動します。

解決策 2: NIC MAC アドレスの不一致をオフラインで修正する

  1. az vm repair コマンドを使用して、復旧仮想マシンから影響を受ける OS ディスクの内容にアクセスします。
  2. chroot の手順に従って、接続されている OS ディスクのファイル システムを復旧 VM に正しくマウントして chroot します
  3. 影響を受ける OS ディスクのコピーの内容にアクセスしたら、「 ソリューション 1: シリアル コンソールを使用して NIC MAC アドレスの不一致を修正する ネットワークの変更を行うか、 obj.pkl ファイルをクリアする」の手順 4 から 7 に従います。
  4. 変更が適用されたら、 az vm repair restore コマンドを使用して、元の VM と OS ディスクの自動スワップを実行し、システムを再起動します。

シナリオ 3: その他の Hyper-V ドライバーが無効になっている

他の Hyper-V ドライバーでブートの問題が発生した場合は、ネットワーク サービスが利用できないため、VM に SSH 接続できない可能性があります。 dracut シェルにドロップされます。 この問題は、azure portal から serial コンソール で確認できます。 Azure portal の Boot Diagnostics ペインで、シリアル コンソールまたは最新のシリアル ログに次のエラーが表示されます。

 dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts
 dracut-initqueue[455]: Warning: Could not boot.
         Starting Setup Virtual Console...
[  OK  ] Started Setup Virtual Console.
         Starting Dracut Emergency Shell...
Warning: /dev/mapper/rootvg-rootlv does not exist
Generating "/run/initramfs/rdsosreport.txt"
 
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.
dracut:/#

または

Gave up waiting for root file system device.  Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT!  UUID=143c811b-9b9c-48f3-b0c8-040f6e65f50aa does not exist.  Dropping to a shell!


BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs)

解決策: Hyper-V ドライバーを有効にする

他の Hyper-V ドライバーが無効になっているために VM にアクセスできない場合は、オフラインアプローチを使用してドライバーを再び有効にします。initramfs を読み込めないためです。

  1. az vm repair コマンドを使用して、問題のある OS ディスクの内容に復旧仮想マシンからアクセスします。

  2. chroot の手順に従って、復旧 VM で接続されている OS ディスクのファイル システムに正しくマウントして chroot します

  3. chroot 環境で、 /etc/modprobe.d ディレクトリに移動し、hv_utils、hv_vmbus、hv_storvsc、またはhv_netvsc ドライバーを無効にする可能性のある行を探します。

    1. 次のコマンドを実行して、hv_utils、hv_vmbus、hv_storvsc、またはhv_netvscドライバーを無効にするファイルと、対応する行番号を識別します。

      egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
      
    2. 対応するファイルを変更し、hv_utils、hv_vmbus、hv_storvsc、またはhv_netvscエントリをコメント アウトまたは削除します。 エントリは、最も一般的に次のいずれか (または両方) になります。

      インストール オプションを使用してカーネル モジュール/ドライバーを無効にするために使用できる構成ファイルの内容を示すスクリーンショット。

      カーネル モジュール/ドライバーを無効にするために使用できる構成ファイルの内容を示すスクリーンショット。

      vi /etc/modprobe.d/disable.conf
      

    重要

    • ドライバーを無効にするエントリは、Microsoft ではなく Linux オペレーティング システムによって定義されます。
    • disable.confを、Hyper-V ドライバーが無効になっている対応するファイル名に置き換えます。
  4. 現在読み込まれているカーネルの初期 RAMdisk イメージをリビルドします。

    • RHEL/SLES ベースのイメージの場合

      # dracut -f -v
      
    • Ubuntu/Debian ベースのイメージの場合

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  5. 変更が適用されたら、 az vm repair restore コマンドを使用して、元の VM と OS ディスクの自動スワップを実行し、システムを再起動します。

必要に応じてロールバックを容易にするために、元の初期 RAMdisk イメージのバックアップを常に作成します。

それでも問題が解決しない場合は、「 Azure Linux 仮想マシンの起動に失敗し、dracut 緊急シェルに入る を参照して、dracut の問題を調査してください。

次のステップ

特定のブート エラーが Hyper-V の問題ではない場合は、「 Azure Linux Virtual Machines のブート エラーをトラブルシューティングする 」を参照してください。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。