最近grub周りで少しハマってしまい、一から勉強し直したのでまとめます。
時間のない人はまとめだけ見てみてください。
GRUBとは?
GRUB(GRand Unified Bootloader)は、Linuxを含む多くのオペレーティングシステム(以下、OS)に組み込まれているブートローダーです。
ブートローダーは、コンピュータの電源が入った後に、OSを起動させるプログラムのことだよ。
GRUBの特徴
設定の読み込み
GRUBは設定ファイル(grub.cfg
)を読み込んで、どのOSをデフォルトで起動するか、タイムアウト時間、その他の設定を管理します。
OSの選択
コンピュータを起動すると、最初にGRUBが実行され、どのオペレーティングシステムを起動するか選択する画面(メニュー)が表示されます。例えば、LinuxとWindowsの両方がインストールされている場合、どちらを起動するか選べます。
カーネルの読み込み
OSを選択すると、GRUBはそのOSのカーネル(中心部分)をメモリに読み込みます。カーネルが読み込まれると、OSが起動します。
なぜGRUBが必要なのか?
GRUBがないと一体どうなってしまうの?
コンピュータのハードウェアは直接OSを起動できないため、ブートローダーが必要です。GRUBは、その役割を果たすために開発されたプログラムです。特にLinuxでよく使われるブートローダーであり、柔軟で多機能です。
GRUBの実体は?
そのGRUBのプログラムは一体どこにあるの?
OSがインストールされているディスク内の特定のパーティションおよび領域に構成されています。
BIOSの場合:ディスクの最初のセクター(512バイト)
UEFIの場合:UEFIシステムパーティション(ESP: EFI System Partition)内
上記に構成されているコードが実行され、/boot/grubディレクトリ内にある実行ファイルや設定ファイルが読み込まれ、OSをロードします。
GRUBの流れ
GRUBによって、OSが起動するまでの流れは以下の通りです。
- STEP1コンピュータの起動
コンピュータの電源が入ると、最初にBIOSまたはUEFIが起動し、ハードウェアの初期化とブートデバイスの検出を行います。
- STEP2GRUBの起動
BIOSまたはUEFIがブートデバイスからGRUBを起動します。
- STEP3設定ファイル(grub.cfg)の読み込み
設定ファイル
/boot/grub/grub.cfg
を探し、読み込みます。このファイルにはブートメニューのエントリ、デフォルトのブートオプション、タイムアウト設定などが含まれています。 - STEP4ブートメニューの表示
grub.cfg
の内容に基づいて、GRUBはユーザーにブートメニューを表示します。ユーザーはここで、どのOSを起動するかを選択できます。 - STEP5カーネルの読み込み
ユーザーがOSを選択すると、GRUBは対応するカーネルイメージと初期RAMディスク(initrd/initramfs)をメモリに読み込みます。これらのファイルも
grub.cfg
で指定されています。 - STEP6OSの起動
カーネルがメモリに読み込まれた後、GRUBは制御をカーネルに渡します。カーネルは自身の初期化プロセスを開始し、最終的にOSが起動します。
なぜOS起動前にgrub.cfgを読み込めるのか
え、待って。OSが起動する前に、なんでファイルシステムにあるgrub.cfgを探せるの?
GRUBは自分自身に組み込まれたファイルシステムドライバを持っているため、OSのカーネルが起動する前でもファイルシステムにアクセスできます。これにより、GRUBは必要なブート設定を読み込み、カーネルイメージや初期RAMディスクをメモリにロードすることが可能です。
GRUBプロンプト
grub>
というプロンプトが表示される場合、GRUBが通常のメニューを表示できなかったり、設定ファイルの読み込みに失敗したりしたことを示しています。この場合、手動でコマンドを入力してトラブルシューティングを行う必要があります。
たまにOSの起動に失敗したらでるやつね。
まとめ
- GRUBは、多くのオペレーティングシステムを起動するためのブートローダー。
- コンピュータの電源を入れると最初に実行され、OSを選択して起動する役割を持つ。
- 設定ファイルから情報を読み込み、柔軟な起動オプションを提供する。
grub>
プロンプトは、問題発生時の手動操作を可能にするインターフェース。
コメント