Azure Linux VM でのカーネル パニック

適用対象: ✔️ Linux VM

まとめ

この記事では、カーネル パニックを引き起こす可能性がある複数の条件について説明し、トラブルシューティングのガイダンスを提供します。

一般に、カーネル パニックは、カーネルが正しく読み込むことができないため、システムの起動に失敗する状況です。 カーネル パニックの別の形式は、カーネルが処理方法を知らない状況に遭遇し、停止することによって自分自身を保護するときに発生します。

前提条件

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

カーネル パニックを特定する方法

Azure ポータルを使用して、ブート診断ブレード、シリアル コンソール ブレード、または AZ CLI で VM のシリアル コンソール ログ出力を表示し、特定のカーネル パニック文字列を特定します。

カーネルパニックは以下の出力に似た形で表示され、シリアルコンソールログの最後に現れます。

Probing EDD (edd=off to disable)... ok
Memory KASLR using RDRAND RDTSC...
[  300.206297] Kernel panic - xxxxxxxx
[  300.207216] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G               ------------ T 3.xxx.x86_64 #1

最も一般的なカーネル パニック イベントの一部:

パニック メッセージ 理由
Oops: 0000 [#1] SMP " (詳細についてはログを確認してください) 不適切なアドレスを逆参照したため、システムがパニックに陥りました。
SysRq: クラッシュダンプをトリガーする コア ダンプは、sysrq-c または /proc/sysrq-trigger に c をエコーすることによって、ユーザーによって開始されました。
カーネルのBUGが発生しました 場所 <パス名/ファイル名>:<行番号>! この形式は、失敗したバグ チェックの標準です (ASSERT と同じですが、ロジックは反転されます)。 ファイル名と行番号は、失敗した BUG チェックを示します。
カーネル パニック - 同期していない: ソフトロックアップ: ハングしたタスク ソフト ロックアップ検出機能により、ソフト ロックアップしきい値内でウォッチドッグ タスクをスケジュールしていない CPU が見つかりました。
カーネルパニック - 同期できていません: ウォッチドッグがCPU 0で重大なロックアップを検出しました ハード ロックアップ検出機能は、ハード ロックアップしきい値内で hrtimer 割り込みを受信していない CPU を検出しました。
カーネル パニック - 同期していない: hung_task: ブロックされたタスク ハング状態のタスクを監視するウォッチドッグは、ブロックされたタスクタイムアウト値を超えて割り込み不能な状態であるタスクを少なくとも 1 つ検出しました。
カーネル パニック - 同期されていません: メモリ不足。 panic_on_oomが選ばれています システムのメモリとスワップ領域が不足したため、メモリを解放するためにプロセスの強制終了が開始されました(これは通常の動作ではありません)。
カーネル パニック - 同期していない: メモリ不足で、強制終了可能なプロセスがありません... システムのメモリとスワップ領域が不足し、メモリを解放するためにプロセスが強制終了されましたが、強制終了するプロセスがなくなっています。
カーネル パニック - 同期されていません: NMI が発生しました。詳細については、統合管理ログを参照してください。 ウォッチドッグが NMI (非マスカブル割り込み) を検知しました。
カーネル パニック - 同期されていません: NMI IOCK エラー: 続行しない システムが (メモリ パリティ エラーではなく) ハードウェアから IO チェック NMI を受信し、kernel.panic_on_io_nmiが設定されました (既定値ではありません)。
カーネル パニック - 同期していない: NMI: 続行しない システムが NMI (ハードウェアまたはメモリ パリティ エラー) を受け取り、kernel.panic_on_unrecovered_nmiが設定されました (既定値ではありません)。
カーネルパニック - 同期が取れません: NMIウォッチドッグ システムが NMI を受信し、kernel.panic_on_timeoutまたはkernel.panic_on_oopsが設定されました (既定値ではありません)。
カーネルパニック - 同期せず: 致命的なマシンチェックエラー 致命的な状態に対してマシン チェック例外イベントが発生しました。
カーネルパニック - 同期せず: initの終了を試みました! init プロセスは最初に開始されるプロセスであり、終了しないでください。
カーネル パニック - 同期していません: VFS: unknown-block(0,0) にルート fs をマウントできません カーネルは initramfs を使用して rootfs をマウントすることを前提としています。 このエラーは、カーネルに initramfs がない場合に発生します。

シナリオ 1: 起動時にカーネル パニックが発生する

起動時にカーネル パニックが発生すると、VM はオペレーティング システムの起動プロセスを完了できなくなります。 これは、仮想マシンが起動されるたびに発生し、ログインを許可しません。

この種のイベントは一般的に関連していますが、これらに限定されません。

シナリオ 1 の解決策

この種のカーネル パニックに対処するには、次の方法を使用できます。

方法 1: Azureシリアル コンソールを使用する

Azureシリアル コンソールを使用してブート プロセスを中断し、使用可能な場合は以前のカーネル バージョンを選択します。 これにより、VM を再度起動できるようになります。その後、次のいずれかの方法を使用して、非起動カーネルの特定の問題を修正できます。

方法 2: 復旧 VM を使用したオフライン修復

Azureシリアル コンソールを使用できない場合、または以前のカーネルを使用できない場合は、オフライン修復を行うために復旧/修復 VM が必要です。

Repair VM コマンドを使用して、ターゲット VM の OS ディスクのコピーがアタッチされている修復 VM を作成します。 次に、 chroot を使用 修復 VM に OS ファイル システムのコピーをマウントします。 その後、カーネルの問題を修正するには、次の方法を試してください。

シナリオ 2: 実行時のカーネル パニック

この種のカーネル パニックは、通常、オペレーティング システムの起動プロセスが完了した後に予期しない時間にトリガーされ、VM が応答を停止し、ログインを妨げます。 これは一般的に関連しますが、次に限定されません。

シナリオ 2 の解決策

この種のカーネル パニックに対処するには、次の方法を使用できます。

  • リソースの使用状況とシステムの全体的なパフォーマンスを確認します。 カーネル パニックは、VM のサイズ変更につながる可能性のあるリソースの不足に関連している可能性があります。
  • 可能であれば、対応する Linux ディストリビューション リポジトリで利用可能な最新の更新プログラムをインストールします。 カーネル パニックは、カーネルまたはその他のソフトウェアの既知のバグに関連している可能性があります。
  • カーネル パニックが最近のカーネルの変更に関連している可能性があります。その場合は、シナリオ 1 の Resolution で説明されているように、以前のカーネル バージョンで起動することをお勧めします
  • 上記のオプションが該当しない場合は、kdump を構成し、さらに分析をサポートして共有するコア ダンプを生成することが必要な場合があります。

より具体的なカーネル パニック シナリオ

特定のトラブルシューティング/回復手順を使用する一般的なカーネル パニック シナリオ:

ドキュメント シナリオ
ホスト ノードのアップグレード後に、3.10 ベースのカーネル上の Azure Linux VM がパニックになります この記事では、Azureでホスト ノードのアップグレード後に 3.10 ベースのカーネルを実行している Azure Linux VM がクラッシュしたときに発生する問題について説明します。
カーネル関連のブートの問題からAzure Linux 仮想マシンを回復する方法 この記事では、カーネルの変更を適用した後に Linux 仮想マシン (VM) を再起動できない問題の解決策について説明します。