= Linuxが起動される手順
この文書では、バージョン2.6前後のLinuxがどのような手順で起動され
るか、概要を説明します。

== Linuxが起動される一般的な手順
一般的に、最近のLinuxは下記のような手順で起動されます。

まずはBIOSの仕事です。

* PCに電源が入るとマザーボードのBIOSが起動される
* BIOSが設定にしたがって指定されたハードディスクやその他のデバイ
  スの決まった場所(MBR)からプログラム (LILOやGRUBなどのブートロー
  ダ)をメモリに読む。ここまではBIOSがデバイスと直接やりとりをして
  データをメモリに持ってきます。
* BIOSが読みこんだブートローダを実行する

ここからはブートローダの仕事です。

* ブートローダがBIOSを通してデバイスとやりとりをして、
* カーネルをメモリに読み、
* 必要ならinitrdというファイルシステムをメモリに読み、
* カーネルを実行する

ここまではBIOSがデバイスとやりとりをしています。で、Linuxカーネル
の出番。

* Linuxカーネルはルートファイルシステムをマウントし
* マウントしたファイルシステムの /init か /sbin/init を実行する

こう書くと簡単そうなのですが、Linuxカーネルがルートファイルシステ
ムをマウントするには、Linuxカーネルがルートファイルシステムの記録
されているデバイスとやりとりできないいけません。

もっとも簡単な場合は、カーネルが直接デバイスとやりとりをして、デ
バイス上のあるパーティションをルートファイルシステム (この場合は、
起動後に / 以下に見えているファイル) としてマウントできます。が、
ルートファイルシステムのあるデバイスは、 IDEハードディスクとは限
らないで、SCSIだったりUSBだったり、ネットワークの向こうにあったり
します。カーネル自体がこれらのルートパーティションをマウントする
方法を知らないと、kernel panic になります。

で、カーネル自体にルートパーティションを読むためのコードをごちゃ
ごちゃとつっこんでおく代わりに、最近のLinuxではinitrdというものを
使います。

initrdというのはブートローダが一緒にメモリに読んでくれる仮のルー
トファイルシステムのイメージ (cpioというコマンドでディレクトリ構
造をファイルにして、それをgzipで圧縮しておくことが多いようです)
です。ブートローダがinitrdをメモリ上に読んでおいてくれた場合には、

* カーネルはこの中身をルートファイルシステムとしてマウントして、
* initrdの中の/initなどを実行します。

initrdの中のinitが作業を続けます。

* initrdの中の/initは一般的にはシェルスクリプトで、ホンモノのルー
  トパーティションをマウントするのに必要なカーネルモジュールをロー
  ドして、
* ホンモノのルートパーティションを適当なマウントポイントにマウン
  トして、
* カーネルにこれからはホンモノのルートパーティションの方をルート
  ファイルシステムとして使うように指示をします

で、本当に使うルートファイルシステムがマウントできると、上に戻っ
て、カーネルは今度はマウントしたルートファイルシステムの中の/init
や/sbin/initを実行します。

このinitプロセスが、/etc/inittab や /etc/fstab を見ながら追加のパー
ティションをマウントしたりネットワークの設定をしていくことになり
ます。

== どこでもモモンガの場合
((<どこでもモモンガ|URL:http://zunda.freeshell.org/docomomo/>))の
場合は、最近のハードウェアが比較的多くのメモリを積んでいて容量の
大きいinitrdを使えることと、レスキュー用のOSとしても使いやすいよ
うに、initrdの中に、カーネルモジュールの他、Linuxがrun level 1ま
で上がるのに必要なファイルを入れてあります。

どこでもモモンガのカーネルは、ブートローダによってUSBメモリから読
まれたinitrdをマウントした段階で、常用のinitプロセスを起動し、
initプロセスはそのままrun level 1の状態になります。この状態ではシ
ステムの稼動に必要なファイルはすべてメモリ上にありますので、USBメ
モリをとりはずしても問題ありません。

通常使用するrun level 3に上がる時に、initプロセスは、initrdに入っ
ていない/usrや/homeのファイルをUSBメモリからマウントします。これ
らのファイルシステムは、USBメモリにSquashFSやext2のイメージファイ
ルとして記録されているので、initプロセスは、USBメモリとやりとりを
するためのカーネルモジュールをロードして、これらのファイルとやり
とりをできるようにします。Run level 3の状態では、システムの一部は、
USBメモリのファイルをループバックマウントしたファイルシステムの上
にありますので、USBメモリをとりはずすことはできません。

== Copyright
Copyright (C) 2007 zunda <zunda at freeshell.org>

Permission is granted for copying, modification, distribution,
and distribution of modified versions of this work under the
terms of GPL version 2 or later. Read the ((<GPL|URL:GPL.txt>))
file or ((<GPL3|URL:gpl-3.0.txt>)) file for more details.

