この文書では、バージョン2.6前後のLinuxがどのような手順で起動され るか、概要を説明します。
一般的に、最近のLinuxは下記のような手順で起動されます。
まずはBIOSの仕事です。
ここからはブートローダの仕事です。
ここまではBIOSがデバイスとやりとりをしています。で、Linuxカーネル の出番。
こう書くと簡単そうなのですが、Linuxカーネルがルートファイルシステ ムをマウントするには、Linuxカーネルがルートファイルシステムの記録 されているデバイスとやりとりできないいけません。
もっとも簡単な場合は、カーネルが直接デバイスとやりとりをして、デ バイス上のあるパーティションをルートファイルシステム (この場合は、 起動後に / 以下に見えているファイル) としてマウントできます。が、 ルートファイルシステムのあるデバイスは、 IDEハードディスクとは限 らないで、SCSIだったりUSBだったり、ネットワークの向こうにあったり します。カーネル自体がこれらのルートパーティションをマウントする 方法を知らないと、kernel panic になります。
で、カーネル自体にルートパーティションを読むためのコードをごちゃ ごちゃとつっこんでおく代わりに、最近のLinuxではinitrdというものを 使います。
initrdというのはブートローダが一緒にメモリに読んでくれる仮のルー トファイルシステムのイメージ (cpioというコマンドでディレクトリ構 造をファイルにして、それをgzipで圧縮しておくことが多いようです) です。ブートローダがinitrdをメモリ上に読んでおいてくれた場合には、
initrdの中のinitが作業を続けます。
で、本当に使うルートファイルシステムがマウントできると、上に戻っ て、カーネルは今度はマウントしたルートファイルシステムの中の/init や/sbin/initを実行します。
このinitプロセスが、/etc/inittab や /etc/fstab を見ながら追加のパー ティションをマウントしたりネットワークの設定をしていくことになり ます。
どこでもモモンガの 場合は、最近のハードウェアが比較的多くのメモリを積んでいて容量の 大きい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 (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 file or GPL3 file for more details.