【LPIC入門 101.2】Linuxでのシステムのブート

LPIC入門 101.2のLinuxでのシステムのブートについてまとめました。

## 【Linuxの起動】電源投入~スクリプト実行

コンピュータを起動し、使用可能状態になるまでのシーケンスは以下のとおりです。

1 コンピュータの電源投入します。
2 マザーボードのフラッシュROMに書き込まれたBIOSが起動し、POST(Power On Self Test:PCに接続されている各種ハードウェアのチェックと初期化)を実行します。次に起動するためのドライブ(SSD、HDD、 CD-ROMなど)を探し、見つかったらそのデバイスをファーストブートドライブとして起動を試みます。
3 ブートドライブが決まったら、ブートドライブのディスクの先頭ブロック(MBR:Master Boot Record)に書き込まれた第1ステージ・ブートローダをメモリにロードします(MBRにはパーティションテーブルも書き込まれます)。なお、MBRは1台のHDDに1つしか存在しません。BIOSはこのMBRをメモリ上にロードし、MBR領域にあるプログラムに制御を移します。このMBR領域にあるプログラムを、一般的にブートストラップローダと呼びます。
4 第1ステージ・ブートローダが /boot パーティションから第2ステージ・ブートローダーをメモリにロードします。
5 カーネルの選択画面を表示し、選択されたカーネルのカーネルバイナリーファイル[/boot/vmlinuz-バージョン]を第2ステージ・ブートローダが/bootディレクトリ内から見つけて、ロードします。もし存在すれば、initrdイメージ[/boot/initrd-バージョン.img]をメモリにロードしておく。ここでブートローダーの役目は終わり、ブートプロセスの制御をカーネルに渡します。
Linuxの代表的なブートローダにはLILOとGRUBがあります。
・GRUBの場合:直接、設定ファイル/boot/grub/grub.confをロード。
・LILOの場合:MBRの情報を使用してブートオプションを決定。
6 カーネルは自身の初期化シーケンス(メモリの初期化、CPU、記憶装置など各種ハードウェアをpci情報などから設定します。)を実行し、メモリにロードされている小さなファイルシステムinitrdをマウントします。
7 initrd (カーネルプロセス)で、カーネルはinitrdを利用してルートファイルシステムを読み取り専用でマウントし、/sbin/initプログラムを実行します。
8 init (カーネルプロセス)で、カーネルは自身の初期化の最終段階で1番目のユーザープロセスであるinit(プロセスIDは1)を生成します。起動時のカーネルオプションの指定により、init以外のプロセス(例えば/bin/bash)を生成することもできます。/etc/inittabの設定に従って処理を行います。
9 /etc/inittab (initプロセス)で、initは起動すると/etc/inittabを読みます。/etc/inittabにはシステムのランレベルと、initが起動するプログラムが記述されています。/etc/rc.d/rc.sysinitスクリプトを実行します。
10 rcスクリプト (initプロセス)で、initは/etc/inittabに指定されている、rcスクリプト(Run Control Script)である/etc/rc.d/rc.sysinit、/etc/rc.d/rcを実行します。システムの初期設定を行います。この段階で、殆どのデバイス・ドライバは、モジュールとしてロードされます。rc.sysinitスクリプトの中で、ルートファイルシステムを読み書きできる状態で再度マウントし直します。rc.sysinitスクリプトから/etc/rc.d/init.d/functionsスクリプトが実行されます。ランレベルに合せてサービスを起動します。ランレベル5では、/etc/X11/prefdmスクリプトを実行し、Xウィンドウマネージャを起動します。

ブートストラップローダは、パーティションテーブルから起動フラグのあるパーティションを探します。パーティションテーブルとは、複数のパーティションに関する情報が保存されているMBR内の1つの領域です。この起動フラグのあるパーティションにブートストラップローダから制御が移行します。そのとき、ブートストラップローダから呼び出されるのが各基本パーティションにあるブートセクタ(PBR:Partition Boot Record:各基本パーティションの先頭セクタ)になります。

PBRに制御が移行すると、そのPBRのプログラムコード(IPL:Initial Program Loader)が動作すし、OSを起動させるためのブートローダの残りの機能(ブートローダの2ndステージ)を呼び出します。

MBRやPBRは512バイトと非常に小さな領域しかもっていません。
そのなかの一部であるIPLのデータサイズはさらに小さなものになります。この小さなデータサイズにOSを起動させるためのブートローダのプログラムを全て格納することは困難です。そのためIPLはブートローダの一部のプログラムコードを持ち、ブートローダの残りに機能はPBRの後続セクタに置くかたちになっています。IPLから呼び出されたブートローダが後続のOSのファイルを読み込んでいき、最終的にOSが起動します。

LinuxのブートローダをMBR領域に格納した場合は、そのMBR領域のプログラムがパーティションのブートローダを起動する形になっています。

## 【Linuxのブートローダ】LILO。GRUB

LinuxのデフォルトのブートローダはLILO(LInux LOader)とGRUB(GRand Unified Bootloader)があります。
ブートローダはカーネル(OSの本体)をロードしますが、LILOちGRUBではロードまでの工程が異なります。

種別 概要
LILO カーネルの位置情報を持ち、その情報からカーネルをロードします。ただし、ファイルシステムを認識できないため、カーネルの位置をSSD/HDDのブロックリスト(物理的な位置情報)で判断します。この物理的な位置情報をブロックリストといいます。そのためLILOは「ブロックリスト参照型」のブートローダといわれます。
GRUB GRand Unified Bootloaderの略で、ファイルシステムを認識できため、カーネルの位置をファイルパスで指定できる「ファイルシステム認識型」のブートローダーです。

LILOをブートローダとして利用する場合は、/etc/lilo.confに起動の設定を記述しliloコマンドを実行する必要があります(詳細は下記事参照)。

【Linux】lilo.conf、liloコマンドの場所、設定例
Linuxにおけるlilo.confの場所、設定例トについてまとめました。

GRUBをブートローダとして利用する場合は、以下の記事をご参照ください。

## 【ブートオプション】

カーネルを起動するとき、カーネルには決定できないハードウェアのパラメータをカーネルに渡したい場合に「コマンドラインオプション」あるいは 「起動時パラメータ」を使います。
そのため、ブートローダ(LILO、GRUBなど)はパラメータを指定できるようになっています。
GRUB の場合は、起動時に Aキーまたは、 Eキーを押すことでパラメータを指定できます。

grub append> root=0303 nousb 
オプション 説明
root=デバイス 最初に起動されるプログラム(initの代わり)
init=プログラム GRUBのルートデバイス
quiet メッセージの出力を抑制
debug メッセージの出力を冗長化(デバッグ用)
single シングルユーザモードで起動
text テキストモードで起動

パラメータは、/proc/cmdlineなどで確認できます。

【LPIC入門】Linuxの基礎と試験範囲別の解説
LPICに従って、Linuxの基礎と試験範囲別の解説についてまとめました。

コメント

タイトルとURLをコピーしました