13.3. ブートマネージャと起動ステージ
戻る | 第13章 FreeBSD の起動のプロセス | 次へ

## 13.3. ブートマネージャと起動ステージ

### 13.3.1. ブートマネージャ

MBR やブートマネージャのコードは起動プロセスの第 0 ステージと呼ばれることがあります。 この節では前述の 2 つのブートマネージャ、 boot0 と LILO について説明します。

boot0 ブートマネージャ. FreeBSD のインストーラや boot0cfg(8) がデフォルトでインストールする MBR は、`/boot/boot0` を基にしています (`boot0` は非常に単純なプログラムです。 MBR にあるプログラムは、 スライステーブルと末尾の識別子 `0x55AA` があるため、 446 バイトの大きさでなければならないという制限があるためです)。 ハードディスクに boot0 と複数のオペレーティングシステムをインストールした場合、 起動時に以下のような画面が出るでしょう。

例13.1 `boot0` のスクリーンショット
F1 DOS F2 FreeBSD F3 Linux F4 ?? F5 Drive 1 Default: F2

他のオペレーティングシステム、特に Windows® は、 既存の MBR を自らの MBR で上書きしてしまうことで知られています。 もしそうなってしまったら、 もしくは既存の MBR を FreeBSD の MBR で置き換えたいのなら、 次のコマンドを使ってください。

`#` `fdisk -B -b /boot/boot0 `device``

`device` は起動するデバイス名で、 たとえば 1 番目の IDE ディスクは `ad0`、 2 番目の IDE コントローラに接続されている 1 番目の IDE ディスクは `ad2`、 1 番目の SCSI ディスクは `da0` などとなります。 MBR の設定をカスタマイズしたい場合は boot0cfg(8) を使ってください。

LILO ブートマネージャ. このブートマネージャをインストールして FreeBSD を起動するようにするには、まず Linux を起動して `/etc/lilo.conf` コンフィグレーションファイルに以下を追加してください。

other=/dev/hdXY table=/dev/hdX loader=/boot/chain.b label=FreeBSD

上記において、FreeBSD のプライマリパーティションとドライブを Linux の識別子を使って指定してください。 `X` を Linux のドライブ文字に、また `Y` を Linux のプライマリパーティション番号に置き換えてください。 SCSI ドライブを使っているのであれば、 `/dev/hd` を `/dev/sd` のように読み替えてください。 同じドライブ上に両方のオペレーティングシステムが置いてあるなら、 `loader=/boot/chain.b` 行は不要です。 これで `/sbin/lilo -v` を実行するとシステムに新しい変更が反映されます。 画面のメッセージを見て確認しておきましょう。

### 13.3.2. 起動ステージ 1 `/boot/boot1` と起動ステージ 2 `/boot/boot2`

概念上、第 1 ステージと第 2 ステージは ハードディスクの同じ領域上の同一のプログラムの部分部分です。 スペースの制約のため 2 つに分割されていますが、 いつも一緒にインストールされます。 インストーラまたは bsdlabel は、両者を 1 つにまとめたファイル `/boot/boot` をコピーします (下記参照)。

第 1 ステージと第 2 ステージは、ファイルシステムの外部、 起動スライスの最初のトラックに置かれ、 先頭が最初のセクタにきます。 boot0 またはその他のブートマネージャは、 起動プロセスを続けるために必要なプログラムがそこにあると想定しています。 使用されるセクタの数は、`/boot/boot` の大きさから簡単に分かります。

`boot1` は 512 バイトの大きさでなければならないという制限があるので、 非常に単純なプログラムです。 このプログラムは `boot2` を検索し、 実行するため、そのスライスの情報を保持する FreeBSD の BSD ラベル に関する最低限の情報だけを持っています。

`boot2` はもう少し高機能です。 これは FreeBSD のファイルシステム上でファイルを見つける能力を持ち、 実行するカーネルやローダを指定するための簡単なインタフェースを提供します。

ローダ (loader) はさらに高機能なもので、 使いやすく簡単な起動設定が行なえる手段を提供します。 `boot2` は通常それを起動します。 以前の `boot2` には、 カーネルを直接起動する機能しかありませんでした。

例13.2 `boot2` のスクリーンショット
>> FreeBSD/i386 BOOT Default: 0:ad(0,a)/boot/loader boot:

もし仮にインストールされた `boot1` と `boot2` を変更したいのであれば、 bsdlabel(8) を使ってください。

`#` `bsdlabel -B `diskslice``

`diskslice` は起動するディスクとスライスで、 たとえば最初の IDE ディスクの 1 番目のスライスは `ad0s1` となります。

### Dangerously Dedicated Mode:

bsdlabel(8) を使うとき、 `ad0` のようにディスク名だけを指定すると、 スライスを持たない危険な専用ディスクを作成してしまいます。 これはまず間違いなく、あなたがやりたいことではないでしょうから、 必ず Return キーを押す前に bsdlabel(8) コマンドを二重にチェックしてください。

### 13.3.3. 起動ステージ 3 `/boot/loader`

ローダは三段階の起動プロセスの最終段階です。 ローダは通常、ファイルシステム上の `/boot/loader` として存在しています。

ローダは、よりさまざまなコマンド群をサポートした 強力なインタプリタによって提供される簡易組み込みコマンド群を利用することで、 ユーザが利用しやすい設定手段となるように設計されています。

#### 13.3.3.1. ローダプログラムの処理の流れ

ローダは初期化の際にコンソールとディスクの検出を行ない、 どのディスクから起動しているかを調べます。 そして必要な変数を設定してからインタプリタを起動し、 スクリプトからコマンドを送ったり手でコマンドを入力したりできます。

ローダは次に `/boot/loader.rc` を読み込み、通常、変数の標準値を定義した `/boot/defaults/loader.conf` と、そのマシンにローカルな変数を定義した `/boot/loader.conf` を読み込みます。 `loader.rc` はそれらの変数にもとづき、 選択されたモジュールとカーネルをロードします。

ローダは最後に、標準設定で 10 秒のキー入力待ち時間を用意し、 入力がなければカーネルを起動します。 入力があった場合、簡易コマンド群が使えるプロンプトが表示され、 ユーザは変数を調整したり、 すべてのモジュールをアンロードしたり、 モジュールをロードしたりすることができます。 その後、最終的な起動や再起動へ移行します。

#### 13.3.3.2. ローダの組み込みコマンド

もっともよく使われるローダのコマンドを以下に示します。 利用可能なコマンドをすべて知りたい場合、 loader(8) を参照してください。

autoboot `seconds`

  `seconds` で与えられた時間内に入力がなければ、 カーネルの起動へと進みます。 カウントダウンを表示し、標準設定では 10 秒間です。

boot [`-options`] [`kernelname`]

  すぐにカーネルの起動へ進みます。 オプション、カーネル名が指定されている場合は、 それらが使われます。

boot-conf

  すべてのモジュールの設定を、 起動時と同じように変数にもとづいて自動的に行ないます。 このコマンドは、まず `unload` を行なって、 変数—普通 `kernel` など—を変更した場合にのみ有効に働きます。

help [`topic`]

  `/boot/loader.help` を読み込み、ヘルプメッセージを表示します。 `topic` に `index` が指定された場合、利用可能な `topic` を表示します。

include `filename` …

  指定されたファイル名のファイルを処理します。 ローダはファイルを読み込み、行単位で解釈します。 エラーが発生した場合、 include コマンドの実行はその時点で停止します。

load [`-t` `type`] `filename`

  指定されたファイル名のカーネル、 カーネルモジュール、あるいは type に指定された種類のファイルをロードします。 ファイル名以降に指定された引数はファイルへと渡されます。

ls [`-l`] [`path`]

  指定された `path` にあるファイルを表示します。 `path` が指定されていなければ、ルートディレクトリを表示します。 `-l` が指定されていればファイルサイズも表示されます。

lsdev [`-v`]

  モジュールがロード可能なすべてのデバイスを表示します。 もし `-v` が指定されていれば、 より詳細な出力がされます。

lsmod [`-v`]

  ロード済みのモジュールを表示します。 `-v` が指定されていれば、 より詳細な内容が出力されます。

more `filename`

  `LINES` 行を表示するごとに停止しながら指定されたファイルを表示します。

reboot

  すぐにシステムを再起動します。

set `variable`, set `variable`=`value`

  ローダの環境変数を設定します。

unload

  すべてのロード済みモジュールを削除します。

#### 13.3.3.3. ローダの使用例

次にあげるのは、ローダの実践的な使用例です。

- 普段使っているカーネルをシングルユーザモードで起動します。

  `boot -s`

- 普段使っているカーネルとモジュールをアンロードし、 古い (もしくは別の) カーネルをロードします。

  `unload` `load `kernel.old``

  `kernel.GENERIC` とすると、 インストールディスクに入っていた generic カーネルを指定することができます。 また、直前にインストールされていたカーネル (たとえば、 カーネルを自分で設定したり、 アップグレードしたりした場合) を指定するには `kernel.old` とします。

  ### 注記:

  普段のカーネルで使っているモジュールを 指定したカーネルでロードする場合は、下のようにします。

  `unload` `set kernel="`kernel.old`"` `boot-conf`

- カーネルの設定スクリプト (通常、 カーネル起動時に設定される内容を自動化するスクリプト) をロードします。

  `load -t userconfig_script `/boot/kernel.conf``

戻る | 上に戻る | 次へ
13.2. 起動時の問題 | ホーム | 13.4. カーネル起動時の応答

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。