ブート, ブートストラップについて
PCの電源を入れると、
「`BIOS/UEFI` → `ブートローダー` → `カーネル` → `init/systemd`」 の順に起動していく。
電源を入れてからシステムが起動するまでの処理の流れを、
`ブート(boot)`または`ブートストラップ(bootstrap)`という。
ブートローダーは HDDの「`MBR(Maste Boot Record)`」に保存されている。
MBR は HDD の「先頭セクタ」とも呼ばれ、BIOS はこれを一番最初に読み込みにいく。
先頭セクタは「512バイト」と決まっており、
その中身には 「カーネルの保存位置」が記録されている。
ブートローダーがカーネルの保存位置を参照して、
起動デバイスからカーネルをRAMにロードしていく。
カーネルがメモリの初期化, システムクロックの設定などをおこない、
仮のルートファイルシステム(initramfs:初期RAMディスク)をマウントする。
ルートファイルシステムが使えるようになると、
カーネルが最初のプロセスである`init`または`systemd`を実行し、
必要なサービスを順次起動していき、ログインプロンプトを表示し、起動処理を終える。
(普段、呪文のように/etc/init.d/httpd restart としてた理由がなんとなく分かる)
下記の方法で`GRUB`を修正して`Kernel Panic`を回避できるのは、
PCは`カーネル`よりもMBRに入った`ブートローダー`を先に起動する仕組みになっているため、
たとえどれだけカーネルが破壊されていても、`GRUB`を先に立ち上げて操作ができるため。
Kernel Panic の回避方法
# 起動デバイスを確認 disk -l | less # /dev/vda1 を /mnt にマウント mount /dev/vda1 /mnt # grubの「default=0」 を 「default=1」に変更 cat /mnt/etc/grub.conf vi /mnt/etc/grub.conf
とても参考にしたサイト
CentOS 6.3 – Kernel Panic
コメント