次の方法で共有


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

Azure は Hyper-V ハイパーバイザーで実行され、Linux システムでは特定の Hyper-V カーネル モジュールを Azure で実行する必要があります。 これらのカーネル モジュールは、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 のシリアル コンソール ログを表示します。 エラーのサンプル出力は、以下の対応するセクションに表示されます。

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

シナリオ 1: ネットワーク Hyper-V ドライバーが無効になっておりシナリオ 2: NIC の mac アドレスが変更されているか、一致しない場合のトラブルシューティングを行うには、Linux VM のシリアル コンソール アクセスが必要です。

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

シナリオ 3 のトラブルシューティング: その他の Hyper-V ドライバーが無効になっている場合、問題を解決するためのオプションはオフラインの方法のみです。

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

ネットワーク サービスは使用できないため、仮想マシンへの Secure Shell Protocol (SSH) はできませんが、Azure portalからシリアル コンソール経由でサインインすることはできます。 シリアル コンソールまたは最新のシリアル ログで、次の種類のエラーがAzure portalの [ブート診断] ウィンドウに表示されます。

 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
      

      注:

      • ドライバーを無効にするエントリは、Microsoft ではなく Linux オペレーティング システムによって定義されます。
      • を、hv_netvsc ドライバーが無効になっている対応するファイル名に置き換えます disable.conf
  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 を使用して、影響を受ける OS ディスクの内容にレスキュー VM からアクセスします。

  2. chroot の手順に従って、レスキュー VM 内のアタッチされた OS ディスクのファイル システムに chroot とをマウントします

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

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

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

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

ネットワーク インターフェイス カードの MAC アドレスが変更された場合、または OS 構成内で一致しない場合は、ネットワーク サービスが使用できないため、VM に SSH 接続できません。 Azure portalからシリアル コンソール経由でサインインすることはできます。 シナリオ 1: ネットワーク 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 アドレスの不一致を修正する」 の手順 4 から 7 に従って、ネットワークの変更を行うか 、obj.pkl ファイルをクリアします。
  4. 変更が適用されたら、 コマンドを使用して、元の az vm repair restore VM と OS ディスクの自動スワップを実行し、システムを再起動します。

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

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

 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 の指示に従って、接続されている OS ディスクのファイル システムをレスキュー VM に正しくマウントして 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 オペレーティング システムによって定義されます。
    • を、Hyper-V ドライバーが無効になっている対応するファイル名に置き換えます disable.conf
  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 フィードバック コミュニティに製品フィードバックを送信することもできます。