Linuxの起動コンピュータが起動して使えるようになるまでは、様々なハードウェア・ソフトウェアが段階的に処理していき、オペレーティングシステムが完全に起動して初めて使えるようになります。アキテクチャ)を例にとってその起動シーケンスを見てみます。PCの起動シーケンスは大きく以下のようになります。Test)と呼ばれる、ハードウェアのチェックと初期化を実行します。次に起動するためのドライブを探します。CD-ROMなどです。BIOSは起動ドライブを見つけるとそのデバイスをファーストブートドライブとして起動を試みます。Record)に書き込まれた第1ステージ・ブートローダをメモリにロードします。MBRにはパーティションテーブルも書き込まれています。パーティションから第2ステージ・ブートローダーをメモリにロードします。第2ステージ・ブートローダLinuxの代表的なブートローダにはLILOとGRUBがあります。・GRUBの場合:直接、設定ファイル/boot/grub/grub.confを読み込みます。・LILOの場合:MBRの情報を使用してブートオプションを決定します。カーネルの選択画面を表示し、選択されたカーネルのカーネルバイナリーファイル[/boot/vmlinuz-バージョン]を/bootディレクトリ内から見つけて、ロードします。存在すれば、initrdイメージ[/boot/initrd-バージョン.img]をメモリにロードしておく。ここでブートローダーの役目は終わり、ブートプロセスの制御をカーネルに渡します。↓カーネルカーネルは自身の初期化シーケンス(メモリの初期化、CPU、記憶装置など各種ハードウェアをpci情報などから設定します。)を実行し、メモリにロードされている小さなファイルシステムinitrdをマウントします。(カーネルプロセス)カーネルはinitrdを利用してルートファイルシステムを読み取り専用でマウントします(一般的にはinitrdを使用しますが、使用しない設定もあります)/sbin/initプログラムを実行します。(カーネルプロセス)カーネルは自身の初期化の最終段階で1番目のユーザープロセスであるinit(プロセスIDは1)を生成します。起動時のカーネルオプションの指定により、init以外のプロセス(例えば/bin/bash)を生成することもできます。/etc/inittabの設定に従って処理を行います。(initプロセス)initは起動すると/etc/inittabを読みます。/etc/inittabにはシステムのランレベルと、initが起動するプログラムが記述されています。/etc/rc.d/rc.sysinitスクリプトを実行します。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ウィンドウマネージャを起動します。これで一連の起動シーケンスが完了します。System)というソフトウェアが起動します。このBIOSの初期化プログラムが、PCに接続されている各種デバイスの初期化を行います。Test)といいます。POSTの段階で最初に初期化が行われるのはビデオカードです。このビデオカードの初期化が終わるとよく目にするBIOSの初期化状況を表示する画面になります。各種デバイスの初期化が終了すると、BIOSは次の段階に入り、起動するためのドライブを探します。CD-ROMなどです。BIOSは起動ドライブを見つけるとそのデバイスをファーストブートドライブとして起動を試みます。最初にブートドライブとして何のデバイスが認識されるかはBIOSの設定次第ですが、ここではHDDの起動を中心に見ていきます。HDDの接続については、IDEインターフェイスのHDDでは接続の場所によってブートの優先度が自動的に決まります。(優先度の最も高いのはプライマリのマスタです)こういったブートドライブとなりうるデバイスの中の最も優先順位が高いデバイスを、BIOSはブートドライブとして決定することになります。ブートドライブが決定すると、BIOSはそのブートドライブの先頭セクタのロードという段階に移ります。Record)といい、MBRは1台のHDDに1つしか存在しません。BIOSはこのMBRをメモリ上にロードし、MBR領域にあるプログラムに制御を移します。このMBR領域にあるプログラムを、一般的にブートストラップローダと呼びます。ブートストラップローダは、実行のなかでパーティションテーブルから起動フラグのあるパーティションを探します。パーティションテーブルとは、複数のパーティションに関する情報が保存されているMBR内の1つの領域です。この起動フラグのあるパーティションにブートストラップローダから制御が移行します。そのとき、ブートストラップローダから呼び出されるのが各基本パーティションにあるブートセクタになります。Record)とも呼ばれます。PBRに制御が移行すると、そのPBRのプログラムコードが動作することになります。Loader)と呼ばれるもので、OSを起動させるためのブートローダの残りの機能を呼び出す機能を持ちます。※ブートローダの残りの機能はブートローダの2ndステージとも呼ばれます。MBRやPBRは512バイトと非常に小さな領域しかもっていません。そのなかの一部であるIPLのデータサイズはさらに小さなものになります。この小さなデータサイズにOSを起動させるためのブートローダのプログラムを全て格納することは困難です。そのためIPLはブートローダの一部のプログラムコードを持ち、ブートローダの残りに機能はPBRの後続セクタに置くかたちになっています。IPLから呼び出されたブートローダが後続のOSのファイルを読み込んでいき、最終的にOSが起動していくことになります。※LinuxのブートローダをMBR領域に格納した場合は、そのMBR領域のプログラムがパーティションのブートローダを起動する形になっています。Bootloader)が採用されています。LILO、GRUBなどのブートローダの役目はOSの本体である、カーネルをロードすることにあります。2つはブートローダという点においては同じ物ですが、それぞれカーネルのロードまでの工程が異なります。LOader)LILOは古くからLinuxで利用されてきたブートローダです。特徴としてはカーネルの位置情報をLILO自身内部に情報として持ち、その情報からカーネルをロードするというものです。LILOはファイルシステムを認識しないため、カーネルの位置をHDDの物理的な位置情報で判断しています。この物理的な位置情報をブロックリストといいます。LILOはこのブロックリストを自身の内部に保持しており、ブロックリストを参照してカーネルをロードします。そのためLILOは「ブロックリスト参照型」のブートローダといわれます。Bootloader)GRUBは高性能ブートローダでLILOとは異なる仕組みを持ちます。GRUBの特徴の1つにファイルシステムを認識できることがあげられますが、これはLILOとは異なりカーネルの位置をファイルパスで指定することができることを意味しています。このようなタイプを「ファイルシステム認識型」といいます。いったLILOやGRUBの動作を経て、カーネルがロードされることになるわけですが、このカーネルがロードされてからがOS自身の起動シーケンスであり、カーネルの制御下でOSとして機能するための様々な処理が行われます。1.LILOの設定LILOをブートローダとして利用する場合は、/etc/lilo.confに起動の設定を記述する必要があります。カーネルの起動オプションLILOはハードディスクの物理セクタしか認識しないため、通常はMBR(マスターブートレコード)にインストールする必要があります。コマンドを実行する必要があります。/sbin/liloliloコマンドは、ブートセクタの更新とマップファイルの作成をおこないます。マップファイルには、ブート可能なカーネルの名前とその場所が記述されています。ルートディレクトリに変更する。ディレクトリが必要な場合もある。ファイルが必要な場合もある。ブート可能なフロッピーを作成するときに使われる。何になるかはデバイスに依存する。システム情報を表示する。診断フロッピーで起動するよりも便利である。オプションは以下のうちひとつである。使用可能な診断のリストを表示する。データエリア情報の一覧を表示する。ドライブのドライブジオメトリを表示する。全てのドライブのドライブジオメトリの一覧を表示する。プライマリパーティションテーブルを表示する。ブートローダが使用可能なグラフィックモードを表示する。ブートセクターやマップファイルは書換えない。何を行うかを確認できる。アンインストールする。vを複数書くことで詳細レベルがあがるLILOがブートローダとして起動すると、LILOプロンプトが表示されます。このプロンプトにカーネルの種類、OSの選択、カーネルパラメータを入力することができます。]起動時にコンソール上に表示されるメッセージは、流れるのが早すぎて全てをじっくり見ることは不可能です。コマンドを使用する事で後でじっくり閲覧する事ができるようになります。表示されるメッセージは、起動時に表示されたものそっくりそのままではありません。dmesgコマンドは、カーネルのリングバッファの内容を表示するためのコマンドで、システム起動時のメッセージや稼働中のカーネル情報などを得ることができます。参照することで、同じような情報を得ることが可能です。more起動時にリアルタイムで確認するには、コンソール上のキーボード操作で確認する事ができます。