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 サーバとして動作させる場合 (私の知っている範囲で...) これは特に面白いもので、書き込み禁止のフロッピーディスクから ブートができて、ルートのファイルシステムに書き込むことができる というものです。