FreeBSDのブート処理の流れ
原作: &a.phk;. v1.1, April 26th.
訳: &a.nakai; September 6 1996.
FreeBSDのブートには基本的に3つの段階があります:
カーネルの読み込み, ルートのファイルシステムの決定, そして
ユーザ領域にあるものの初期化です. このことは下に述べる
いくつかの興味深い可能性につながっています。
カーネルの読み込み
現在, カーネルの読み込みには基本的に下に挙げる3つの方法が
あります:
これらはカーネルが次に何をしたらいいのかという情報をカーネルに
与えます.
Biosboot
Biosbootは「ブートブロック」に相当するもので, 2つのファイル
から構成されており, フロッピーディスクやハードディスクのブートを
開始する側の 8K バイトにインストールされています。
Biosboot は FreeBSD のファイルシステムからカーネルを
読み込むことができます.
Dosboot
Dosbootは DI. Christian Gusenbauerによって書かれましたが,
不幸にしてこの場合には、コードのある一部分がマイクロソフトの
コンパイラ向けに書かれているため、FreeBSD 単体ではコンパイル
することはできません.
Dosboot は MS-DOS のファイルから、またはディスクの
FreeBSD ファイルシステムのパーティションからカーネルをブートします。
これは MS-DOS システムのハイメモリ領域に潜んでいるメモリマネージャ等の
さまざまな怪しい代物とメモリの取り合いをして、なんとかブートしています.
Netboot
Netboot はサポートされているイーサネットカードを検出し、
BOOTP や TFTP、NFS を使ってブートするカーネルを探そうとします。
ルートファイルシステムの決定
カーネルが読み込まれ、ブートプログラムがカーネルに移行したら,
カーネルは自身の初期化をし, どんなハードウェアが組み込まれいるか
を決定し、それからルートファイルシステムを探さなくてはなりません。
現在サポートされているルートファイルシステムは次の通りです :
UFS
UFS は, もっとも一般的なタイプのルートシステムです。
フロッピーディスクやハードディスク上に存在します。
MSDOS
技術的に可能ですが、あまり有用ではありません。なぜならば、
``FAT''ファイルシステムではリンクやデバイスノードなどの
``UNIX 主義''を実現できないからです。
MFS
MFS はカーネル内部に組み込みになっている UFS
ファイルシステムです。つまり MFS を機能させるのに
ディスクやフロッピーディスクなどのハードウェアは
必要ではありません.
CD9660
CD9660 は CD-ROM をルートファイルシステムに使用したものです。
NFS
これはルートシステムにファイルサーバを使用していて、基本的に
ディスクレスのマシンのためにあります。
ユーザ領域にあるものの初期化
ユーザ領域で動作させるようにするために、カーネルが初期化を終えると、
カーネルは``/sbin/init''
です。
/sbin/init を別なプログラム置き換えてしまうことは可能ですが、そのプロセス
には以下のような制約があります:
pid が 1 のプロセスには stdin/stdout/stderr は割り当てられていませんので、
プログラムは自分でこれらをオープンしないとなりません。
このプロセスが終了するとカーネルはパニックメッセージを表示して
停止します。
また、このプロセスに対するシグナル処理は特殊です。
この例として、インストール用のフロッピーディスクにある
``/stand/sysinstall''があります。
興味深い連係
カーネルを MFS でブートするのには次のような特別の/sbin/init
を使います。
- /C: にマウントします。
- C:/freebsd.fs を /dev/vn0 にアタッチします。
- /dev/vn0 を /rootfs にマウントします。
- シンボリックリンクを作ります。
/rootfs/bin -> /bin
/rootfs/etc -> /etc
/rootfs/sbin -> /sbin
(etc...)
これでハードディスクのパーティションを切り直さずに FreeBSD を
使うことができます。
サーバ:˜you/FreeBSD を
/nfsにマウントし、ルートディレクトリを /nfs に変更して,
そこで/sbin/initを実行します。
これで FreeBSD をディスクレスで実行できますが、NFS サーバを
コントロールできないままです...
/dev/rwd0 のコピーを取って、リモートにあるテープ
ステーションやファイルサーバに書き込んでください。
これで一年前に取っておくべきだったバックアップをやっと
取ることができました。
E -- ファイアウォール/Web サーバとして動作させる場合 (私の知っている範囲で...)
これは特に面白いもので、書き込み禁止のフロッピーディスクから
ブートができて、ルートのファイルシステムに書き込むことができる
というものです。