次の方法で共有


Linux 仮想マシンでの LIS/Hyper-V ドライバーに関する問題のトラブルシューティング

適用対象: ✔️ Linux VM

Azure で Linux 仮想マシン (VM) を実行する場合、適切な VM 操作には、Hyper-V ドライバー (Linux Integration Services (LIS) ドライバーとも呼ばれます) が不可欠です。 これらのドライバーにより、VM は基になる Azure ハイパーバイザーと通信できます。 これらのドライバーが見つからないか、正しく読み込まれていない場合、VM の起動に失敗する可能性があります。 この記事では、Azure Linux VM での LIS/Hyper-V ドライバーの問題の解決策について説明します。

前提条件

現象

次のいずれかのシナリオでは、Hyper-V ドライバーが見つからないか無効になっているため、Linux VM の起動に失敗する可能性があります。

  • Linux VM をオンプレミスから Azure に移行した後。

    VM が別のハイパーバイザー (VMware やカーネル ベースの仮想マシン (KVM) など) から Azure に移行されると、必要な Hyper-V ドライバーの hv_vmbushv_storvschv_netvsc、および hv_utils がインストールされていないか、有効になっていない可能性があり、VM がストレージとネットワーク デバイスを検出できなくなる可能性があります。

  • Hyper-V ドライバーを無効にし、VM を再起動した後。

  • Hyper-V ドライバーが initramfs に含まれていない場合。

さまざまな Linux VM (Red Hat、Oracle、SUSE、または Ubuntu) のシリアル コンソール ログを確認すると、一般的に次の問題が発生します。

現象 説明
dracut/initramfs で VM がスタックする ストレージ ドライバーがないため、VM の起動に失敗し、initramfs シェルまたは緊急モードにドロップします。
起動時のカーネル パニック 重要な Hyper-V モジュールがないため、起動時にシステムがクラッシュします。
ディスクが見つからないエラー ブート プロセスは、 cannot find root deviceunable to mount root filesystemなどのエラーで失敗します。
ネットワーク接続なし VM が起動しても、ネットワーク インターフェイスが検出されず、Secure Shell (SSH) アクセスが妨げられる可能性があります。
Grub ブート エラー Hyper-V ストレージ ドライバーがないため、システムがブートローダーの読み込みに失敗する可能性があります。
ACPI エラーによるスロー ブート HYPER-V のサポートが不足しているために発生する高度な構成と電源インターフェイス (ACPI) 関連の警告で VM の起動に時間がかかる場合があります。
Azure ディスクの接続に失敗する ストレージ ドライバーがないため、Azure マネージド ディスクが正しく認識またはマウントされない場合があります。
Cloud-Init または Waagent のエラー Azure プロビジョニング ツール (cloud-init または waagent) が VM を正しく構成できない場合があります。

ログ エントリの例を次に示します。

  • 出力 1

    [  201.568597] dracut-initqueue[351]: Warning: dracut-initqueue: starting timeout scripts
    [  202.086401] dracut-initqueue[351]: Warning: dracut-initqueue: timeout, still waiting for following initqueue hooks:
    [  202.097772] dracut-initqueue[351]: Warning: /lib/dracut/hooks/initqueue/finished/devexists-\x2fdev\x2fmapper\x2frootvg-rootlv.sh: "if ! grep -q After=remote-fs-pre.target /run/systemd/generator/systemd-cryptsetup@*.service 2>/dev/null; then
    [  202.128885] dracut-initqueue[351]:     [ -e "/dev/mapper/rootvg-rootlv" ]
    [  202.138322] dracut-initqueue[351]: fi"
    [  202.142466] dracut-initqueue[351]: Warning: dracut-initqueue: starting timeout scripts
    [  202.674872] dracut-initqueue[351]: Warning: dracut-initqueue: timeout, still waiting for following initqueue hooks:
    [  202.692200] dracut-initqueue[351]: Warning: /lib/dracut/hooks/initqueue/finished/devexists-\x2fdev\x2fmapper\x2frootvg-rootlv.sh: "if ! grep -q After=remote-fs-pre.target /run/systemd/generator/systemd-cryptsetup@*.service 2>/dev/null; then
    [  202.724308] dracut-initqueue[351]:     [ -e "/dev/mapper/rootvg-rootlv" ]
    [  202.731292] dracut-initqueue[351]: fi"
    [  202.732288] dracut-initqueue[351]: Warning: dracut-initqueue: starting timeout scripts
    [  202.740791] dracut-initqueue[351]: Warning: Could not boot.
             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:/# 
    dracut:/# 
    dracut:/# 
    
  • 出力 2

    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)
    

dracut シェルで cat /proc/partitions を実行してもストレージ デバイスが表示されない場合は、Hyper-V ストレージ ドライバー hv_storvsc が見つからないか、読み込まれていないことを示します。 このドライバーがないと、VM は仮想ディスクを検出できないため、起動エラーが発生します。

dracut:/# cat /proc/partitions 
dracut:/# 
dracut:/# 

原因

LIS/Hyper-V ドライバーが見つからないか、正しく読み込まれていない場合は、次の理由により VM が起動しない可能性があります。

  • ディスクとネットワーク ドライバーが見つからない

    Azure VM は、Hyper-V ストレージとネットワーク ドライバー ( hv_storvschv_netvscなど) に依存しています。 これらのドライバーがないと、VM はオペレーティング システム (OS) ディスクを検出できないため、起動エラーが発生します。

  • 合成デバイスのサポートの欠如

    Azure VM は、Hyper-V ドライバーを必要とする合成デバイス (ストレージやネットワークなど) を使用します。 これらのドライバーがないと、カーネルは重要なコンポーネントを認識しない可能性があります。

  • Hyper-V VMBus 通信エラー

    hv_vmbusなどの重要なコンポーネントは、VM と Azure ハイパーバイザー間の通信を処理します。 このドライバーが見つからない場合、VM を適切に初期化できません。

  • カーネル パニックまたは initramfs プロンプト

    必要なドライバーがないと、ルート ファイルシステムをマウントできないために VM が initramfs シェルにドロップされ、起動エラーが発生する可能性があります。

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

注:

このソリューションは、Hyper-V ドライバーが無効になっているシナリオに適用されます。

  1. VM 修復コマンドを使用して影響を受ける VM の OS ディスクのコピーがアタッチされた修復 VM を作成します。

    注:

    または、Azure portalを使用して手動で復旧 VM を作成することもできます。 詳細については、「Azure portal で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う」を参照してください。

  2. chrootを使用して、修復 VM に OS ファイル システムのコピーをマウントします。

  3. chroot プロセスが完了したら、 /etc/modprobe.d ディレクトリに移動します。

  4. hv_ ドライバーと対応する行番号を無効にするファイルを特定します。

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

    vi /etc/modprobe.d/disable.conf
    

    注:

    • ドライバーを無効にするエントリは、Microsoft ではなく Linux OS によって定義されます。
    • disable.confを、hv_ ドライバーが無効になっている対応するファイル名に置き換えます。

解決策 2: initramfs で不足している Hyper-V ドライバーを再生成する

注:

このソリューションは、オンプレミスから Azure への VM 移行後に Hyper-V ドライバーが initramfs に存在しないシナリオに適用されます。

  1. VM 修復コマンドを使用して影響を受ける VM の OS ディスクのコピーがアタッチされた修復 VM を作成します。

    注:

    または、Azure portalを使用して手動で復旧 VM を作成することもできます。 詳細については、「Azure portal で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う」を参照してください。

  2. chrootを使用して、修復 VM に OS ファイル システムのコピーをマウントします。

  3. chroot プロセスが完了したら、現在のカーネル hv_ ドライバーが見つからないかどうかを確認します。

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

      lsinitrd /boot/initramfs-<kernel-version>.img | grep -i hv_
      
    • SLES ベースのイメージの場合:

      lsinitrd /boot/initrd-<versión-del-kernel> | grep -i hv_
      
    • Ubuntu/Debian ベースのイメージの場合:

      lsinitrd /boot/initrd.img-$(uname -r)  | grep -i hv_
      

    注:

    Hyper-V ストレージ ドライバー hv_storvsc またはその他のドライバーは、カーネル (特に Azure 最適化カーネル) に直接組み込まれる場合があるため、initramfs に表示されない場合があります。 このような場合、システムは起動時に自動的に読み込み、ストレージ機能を確保します。 VM が起動し、ストレージが正しく検出された場合、アクションは必要ありません。

  4. Linux ディストリビューションに応じて、 /etc/dracut.conf または /etc/initramfs-tools/modules ファイルを編集し、次の行をファイルに追加します。

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

      vi /etc/dracut.conf
      
      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    • Ubuntu/Debian ベースのイメージの場合:

      vi /etc/initramfs-tools/modules
      
      hv_vmbus
      hv_netvsc
      hv_storvsc
      
  5. 不足している initramfs を手動で生成する手順に従って、影響を受けるカーネルの初期 RAM ディスク イメージを再構築します

FAQ

接続などのいくつかの問題が発生している場合、システムの新しい起動または再起動後に、ネットワーク ドライバー (hv_netvsc) が期待どおりに動作していることを確認するにはどうすればよいですか?

Hyper-V ネットワーク ドライバー (hv_netvsc) がアクティブで機能していることを確認するには、システム ログを確認し、次のエントリを探します。

*hv\_vmbus: registering driver hv\_netvsc*

このメッセージは、ドライバー登録プロセスが開始されたことを示します。 それ以降のエラーが報告されない場合は、ドライバーが正常に読み込まれ、正常に機能しています。 これは、Hyper-V によって提供された合成ネットワーク インターフェイスが検出され、ドライバーがネットワーク接続を適切に処理していることを示します。

関連情報

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

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