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 ネットワーク ドライバーを有効にする
VM のシリアル コンソールにアクセスします。 ネットワークはダウンしていますが、ログイン プロンプトは引き続き使用できます。
正しい資格情報を使用して VM にサインインします。
sudo アクセス権を持つルート アカウントまたはユーザー アカウントに切り替えます。
/etc/modprobe.d ディレクトリに移動し、hv_netvsc ドライバーを無効にする行を探します。
次のコマンドを実行して、hv_netvsc ドライバーと対応する行番号を無効にするファイルを特定します。
grep -nr "hv_netvsc" /etc/modprobe.d/
対応するファイルを変更し、hv_netvscエントリをコメント アウトまたは削除します。
vi /etc/modprobe.d/disable.conf
Note
- ドライバーを無効にするエントリは、Microsoft ではなく Linux オペレーティング システムによって定義されます。
disable.conf
を、hv_netvsc ドライバーが無効になっている対応するファイル名に置き換えます。
現在読み込まれているカーネルの初期 RAMdisk イメージをリビルドします。
RHEL/SLES ベースのイメージの場合
# dracut -f -v
Ubuntu/Debian ベースのイメージの場合
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
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 ネットワーク ドライバーをオフラインで有効にする
az vm repair を使用して、復旧 VM から影響を受ける OS ディスクの内容にアクセスします。
chroot の手順に従って、復旧 VM の接続された OS ディスクのファイル システムにマウントし、chroot します。
影響を受ける OS ディスクの内容にアクセスしたら、「 ソリューション 1: シリアル コンソールを使用して Hyper-V ネットワーク ドライバーを有効にする ドライバーを再度有効にして、初期 RAMdisk イメージを再構築する」の手順 4 と 5 に従います。
初期 RAMdisk イメージを再構築する前に、chroot 環境に切り替えます。 イメージの完全なパスを指定する必要があります。
変更が適用されたら、元の 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 アドレスの不一致を修正する
VM のシリアル コンソールにアクセスします。 ネットワークはダウンしていますが、ログイン プロンプトは引き続き使用できます。
正しい資格情報を使用して VM にサインインします。
sudo アクセス権を持つルート アカウントまたはユーザー アカウントに切り替えます。
/etc/cloud/cloud.cfg.d ディレクトリに移動します。
Linux パートナー イメージ 考慮して を使用し、次のファイルを開いて編集します。
- RHEL ベースの配布用の 91 azure_datasource.cfg 。
- debian および Ubuntu ベースのディストリビューション用の 90_dpkg.cfg 。
apply_network_config
パラメーターが false に設定されている場合は、true に設定します。 何も指定しない場合、既定値は true に設定されます。 この設定により、次回の再起動時に新しい MAC アドレスがネットワーク構成に適用されます。一般に、NIC MAC アドレスは、NIC が削除または管理者によって追加された場合、または NIC がバックエンドで更新された場合にのみ変更されます。 cloud-init 経由のネットワーク構成が不要で、
apply_network_config
パラメーターを false に設定する必要がある場合は、 /var/lib/cloud/instance/obj.pkl ファイルを削除し、システムを再起動します。# rm /var/lib/cloud/instance/obj.pkl
変更が適用されたら、システムを再起動します。
解決策 2: NIC MAC アドレスの不一致をオフラインで修正する
- az vm repair コマンドを使用して、復旧仮想マシンから影響を受ける OS ディスクの内容にアクセスします。
- chroot の手順に従って、接続されている OS ディスクのファイル システムを復旧 VM に正しくマウントして chroot します。
- 影響を受ける OS ディスクのコピーの内容にアクセスしたら、「 ソリューション 1: シリアル コンソールを使用して NIC MAC アドレスの不一致を修正する ネットワークの変更を行うか、 obj.pkl ファイルをクリアする」の手順 4 から 7 に従います。
- 変更が適用されたら、
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 を読み込めないためです。
az vm repair コマンドを使用して、問題のある OS ディスクの内容に復旧仮想マシンからアクセスします。
chroot の手順に従って、復旧 VM で接続されている OS ディスクのファイル システムに正しくマウントして chroot します。
chroot 環境で、 /etc/modprobe.d ディレクトリに移動し、hv_utils、hv_vmbus、hv_storvsc、またはhv_netvsc ドライバーを無効にする可能性のある行を探します。
次のコマンドを実行して、hv_utils、hv_vmbus、hv_storvsc、またはhv_netvscドライバーを無効にするファイルと、対応する行番号を識別します。
egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
対応するファイルを変更し、hv_utils、hv_vmbus、hv_storvsc、またはhv_netvscエントリをコメント アウトまたは削除します。 エントリは、最も一般的に次のいずれか (または両方) になります。
vi /etc/modprobe.d/disable.conf
重要
- ドライバーを無効にするエントリは、Microsoft ではなく Linux オペレーティング システムによって定義されます。
disable.conf
を、Hyper-V ドライバーが無効になっている対応するファイル名に置き換えます。
現在読み込まれているカーネルの初期 RAMdisk イメージをリビルドします。
RHEL/SLES ベースのイメージの場合
# dracut -f -v
Ubuntu/Debian ベースのイメージの場合
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
変更が適用されたら、
az vm repair restore
コマンドを使用して、元の VM と OS ディスクの自動スワップを実行し、システムを再起動します。
必要に応じてロールバックを容易にするために、元の初期 RAMdisk イメージのバックアップを常に作成します。
それでも問題が解決しない場合は、「 Azure Linux 仮想マシンの起動に失敗し、dracut 緊急シェルに入る を参照して、dracut の問題を調査してください。
次のステップ
特定のブート エラーが Hyper-V の問題ではない場合は、「 Azure Linux Virtual Machines のブート エラーをトラブルシューティングする 」を参照してください。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。