ハッキングラボ 2回目の演習にて、DC-1マシンが立ち上がらない。
トラブルシュートしたのでその記録です。
マシンイメージは本書にかかれている通りここから入手する。
ミラーのほうのURLを選択しました。
VirtualBoxにインポート
ダウンロードして解凍したOVAを選択する。
起動してみるとGRUBは起動する。一番上を選択する。
OS起動途中でクラッシュする。
Kernel panic・・・カーネルが回復不能なエラーを検出し、処理を中断。
ここまでまとめ
GRUBまでは到達 → OS起動途中で失敗
GRUBってなに・・・「どのOSを、どのカーネルで、どんなオプション付きで起動するか」を決める。
Kernel panicが出ている・・・カーネルが死んでいるという切り分けができる。
ログを深堀りする。
Call Trace は「下から読む」
Call Trace は「関数が呼ばれた順番のスタック」
Call Trace の分類
| Call Trace 関数名 | 分類 | 説明 |
|---|---|---|
| mwait_idle | CPU idle | CPU を省電力状態(mwait)に入れる処理 |
| cpu_idle | CPU idle | idle task 本体。CPU が何もすることがない時に実行 |
| apic_write | 割り込み | APIC を使った割り込み制御 |
| clockevents_* | タイマー | 次のタイマー割り込みを設定する処理 |
Call Trace から制御できる機能を特定する
| 分野 | 起動オプション | 何をしているか | なぜ有効か |
|---|---|---|---|
| CPU idle | idle=poll | CPU idle 時に省電力命令(mwait/hlt)を使わない | idle task panic の直接回避策 |
| APIC | noapic nolapic | I/O APIC / Local APIC を使わない | 割り込みを新方式ではなく旧方式(PIC)で処理 |
| ACPI | acpi=off | ACPI(電源管理・CPU C-state)を無効化 | CPU / 電源管理まわりの非互換を回避 |
| タイマー | clocksource=pit | タイマーに PIT を強制使用 | 古いカーネル向けの最も安定した方式 |
起動オプションを設定して起動してみる。
起動オプションの設定
linux ~~~ って書いてある行の末尾に次を追加する。
noapic nolapic acpi=off idle=poll clocksource=pit
Ctrl+x 押して起動。
今回の原因
古い Debian(Linux 3.2 / i486 カーネル)を現代CPUを前提にしたVirtualBoxの仮想マシンで動かそうとしたので、カーネルが想定していない CPU idle/割り込み/タイマーの挙動に遭遇し、Kernel panic が発生した。







