カーネル パニックに起因する Linux VM の起動に関する問題のトラブルシューティング


このドキュメントでは、カーネル パニックエラーが原因で VM が応答しなくなった問題のトラブルシューティング情報について説明します。

始める前に

  • Cloud Logging でシリアルポート出力をロギングする場合は、Cloud Logging に習熟します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

カーネル パニック

ゲスト OS の起動に必要な initramfs モジュールを正しく読み込めないと、カーネル パニックが発生します。

カーネル パニックが発生するもう一つの形態は、特定のリクエストを処理する方法がわからず、カーネルが自分自身を保護するために停止する状況です。カーネル パニックは、RedHat、SUSE、CentOS、Ubuntu を実行している Compute Engine VM で発生する可能性があります。

一般的なエラー メッセージ

参考までに、最も一般的なカーネル パニック イベントを以下に示します。

Kernel panic - not syncing: hung_task: blocked tasks
Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Kernel panic - not syncing: NMI: Not continuing
Kernel panic - not syncing: out of memory. panic_on_oom is selected
Kernel panic - not syncing: Fatal Machine check 

一般的な原因

カーネル パニック エラーが発生する理由は、複数あります。一般的な理由は次のとおりです。

  • grub.cfg ファイルに、カーネルに対応する initramfs ファイルに関連するエントリがない。
  • カーネルのインストール中に initramfs ファイルが /boot ディレクトリに生成されなかった。
  • initramfs ファイルが一部のみ生成されたか、破損している。

現象

VM インスタンスでカーネル パニックが発生すると、一般的な症状として、シリアル コンソールを使用している場合でも、カーネルを使用して VM に接続できなくなります。

シリアル コンソールのログを確認して、ゲスト OS によって読み込まれたカーネルを特定する必要があります。次に例を示します。

[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1160.95.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Aug 10 10:46:21 EDT 2023
カーネル パニック エラーも確認します。このエラーは通常、VM 起動時のカーネル行か、複数のスタック呼び出しトレースを含むシリアル コンソール ログの末尾に表示されます。

次の例は、initramfs の問題によるカーネル パニック イベントを示しています。

[    1.520840] No filesystem could mount root, tried:
[    1.520840]
[    1.521964] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.523495] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.10.0-1160.95.1.el7.x86_64 #1
[    1.524932] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/11/2022
[    1.526901] Call Trace:
[    1.527421]  dump_stack+0x41/0x60
[    1.527978]  panic+0xe7/0x2ac
[    1.528578]  mount_block_root+0x2be/0x2e6
[    1.529693]  ? do_early_param+0x95/0x95
[    1.530441]  prepare_namespace+0x135/0x16b
[    1.531237]  kernel_init_freeable+0x203/0x22d
[    1.532081]  ? rest_init+0xaa/0xaa
[    1.532808]  kernel_init+0xa/0x103
[    1.533395]  ret_from_fork+0x35/0x40
[    1.535229] Kernel Offset: 0x23a00000 from 0xffffffff81000000  

カーネル パニック エラーを解決する

カーネル パニック エラーを解決するには、次の手順を行います。

  1. シリアル コンソールに接続し、Google Cloud コンソールから VM にログインします。

  2. Google Cloud コンソールで、VM の [リセット] をクリックします。

  3. GRUB スプラッシュ画面が表示されたら、以前動作していたカーネルまたはレスキュー カーネルを選択して、システムを起動します。これにより、VM は選択したカーネルで起動します。

    カーネル パニック

  4. VM にアクセスできるようになったら、VM への SSH 接続を開始できます。

  5. 問題の原因を特定し、必要に応じて以下の対応を取ります。

    たとえば、initramfs ファイルが存在しないか破損している場合は、次の手順を行います。

    1. dracut コマンドを使用して、元のカーネルに対応する initramfs ファイルを生成します。次に例を示します。

      dracut -f /boot/initramfs-3.10.0-1160.95.1.el7.x86_64.img 3.10.0-1160.95.1.el7.x86_64
      
    2. grub2-mkconfig コマンドを使用して grub2.cfg ファイルを更新します。次に例を示します。

      grub2-mkconfig -o /boot/grub2/grub.cfg
      
    3. initramfs ファイルが生成されたら、エラーなしで VM を再起動できます。