BOOT(8)

名称
boot - システム立上げ時の手続き

解説
電源断とクラッシュからの回復。 通常、電源復旧時とクラッシュ発生後には、システムは自動的にリブートし ます。ファイルシステムの整合性チェックが自動実行され、途中で失敗しな ければ、システムはマルチユーザ・モードに移行します。

コールドスタート。 大多数の i386 PC は、まずフロッピドライブ 0 (ドライブ A: ともいう) からのブートを試み、 それに失敗すると、 ハードディスクドライブ 0 (ドライブ C: もしくは BIOS のドライブ 0x80 ともいう) からブートしようとします。 いくつかの BIOS では、このデフォルトの順序を変えたり、 CD-ROM デバイスをブートデバイスとして含めることができます。

デフォルトでは 3 段階のブートストラップが使用され、 ブートブロック (ブートストラップの 第 1 および 第 2 段階) から、 これとは別の第 3 段階のブートストラッププログラム loader(8) へと自動的に制御が移行されます。 この第 3 段階では、 ブート処理において、 ブートブロックにおいて可能なことよりも洗練された制御を提供します。 ブートブロックには、 ディスクやスライスの限られた空間しか与えられないという制約があります。

しかしながら、第 3 段階をまったく使用せずに済ますこともできます。 このようにするには、ブートブロックパラメータファイル /boot.config においてカーネル名を指定するか、 -n 無指定時には loader(8) が起動される前の短い待ち時間 (文字 -, \, |, / のいずれかが表示されている間) にキーを打ちます。 第 3 段階をロードできない場合にも、第 2 段階においてブートが試みられます。

/boot.config は ‘a’ パーティションからだけ読み取れることに注意して下さい。 結果として、 ‘a’ パーティションのないスライスでは、ブートの過程でユーザが介入する必要があります。

本サブセクションの残りの部分では、ブートブロックについてのみ扱います。 loader(8) プログラムの文書は別にあります。

ブートブロックがロードされたあとで、次のようなプロンプトが現れます。

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:

自動ブートにおいては、フロッピ もしくはハードディスクのパーティション ‘a’ から /boot/loader をロードしようとします。 この動作は ‘boot:’ というプロンプトが出ている間なら、キーボードから適当な文字を 入力することで中断できます。 以下にあげるような入力はブート動作に対する指示として受付けられます。

?   ブートファイルを探す際のヒントとして、デフォルトのブートデバイスの ルートディレクトリにあるファイルの名前を表示します。 (パスの最後の部分に? を指定することもできます。この場合、任意のサブディレクトリの一覧となります。)

    bios_drive:interface(unit,[slice,]part) filename [-aCcDdghmnPprsv] ブートファイルとブートフラグを指定します。

    bios_drive
        BIOS によって認識されるドライブ番号です。 1 つ目のドライブに対しては 0、 2 つ目のドライブに対しては 1、などです。

    interface
        そこからブートするコントローラのタイプです。 ブートファイルのイメージをロードするのには BIOS の機能を使用するので、 そのコントローラに対する BIOS サポートが必要となることに注意して下さい。

        サポートされているインタフェースを以下にあげます。

        ad  WD100[2367] とその互換コントローラ上の ST506, IDE, ESDI, RLL ディスク
        fd  5 1/4" または 3 1/2" 高密度 フロッピ
        da  サポートされている SCSI コントローラ上の SCSI ディスク

    unit
        使用されているインタフェース上のドライブのユニット番号です。 1 つ 目のドライブに対しては 0、 2 つ目のドライブに対しては 1、などです。

    [slice,]part
        ディスク上の BSD 部分内のパーティション文字です。 詳しくは bsdlabel(8) を参照して下さい。 慣例として、パーティション ‘a’ のみがブート可能なイメージを含んでいます。 ディスクにスライス (“fdisk パーティション”) が設けられていた場合、任意の slice (1 が最初のスライスで 2 が 2 番目のスライス等となります) からブート可能であり、デフォルト (無指定時) はアクティブスライスから、 これがない場合は最初の FreeBSD スライスからのブートとなります。 指定された slice が 0 の場合、最初の FreeBSD スライス “(互換” スライスとも呼ばれます) からブートします。

    filename
        ブートファイルの (指定されたパーティションのルートディレクトリからの 相対) パス名です。 デフォルトでは /kernel となります。シンボリックリンクはサポートされていません (ハードリンク は使用できます)。

    -aCcDdghmnPprsv
        ブートフラグです。

        -a  カーネル初期化中に、ルートファイルシステムとしてマウントされるデバイスを 尋ねて来るようにします。
        -C  CDROM からブートします。
        -c  ロードしたカーネルに対し、ハードウェアのパラメータを変更するため、 UserConfig を実行します。 USERCONFIG, INTRO_USERCONFIG, VISUAL_USERCONFIG のいずれかのオプション付きでカーネルが構築された場合、 スクリプト中に quit コマンドがあったとしても、UserConfig 中にとどまります。
        -D  シングルとデュアルのコンソール設定を切り替えます。 シングル設定では、下記の -h オプションの状態によって、コンソールは内部ディスプレイかシリアルポートの いずれかになります。 デュアルコンソール設定では、内部ディスプレイとシリアルポートの両方が、 -h オプションの状態によらず、同時にコンソールになります。 しかし、 デュアルコンソール設定は、ブートプロンプトの間だけでしか効果を持ちません。 一旦カーネルがロードされると、 -h オプションによって指定されたコンソールが唯一のコンソールになります。
        -d  カーネルの初期化のできる限り早い段階で DDB カーネルデバッガ (ddb(4) を参照) に入ります。
        -g  GDB リモートデバッギングプロトコルを使用します。
        -h  内部コンソールとシリアルコンソールの切り替えを行います。 これを使用してコンソールデバイスを変更できます。 例えば、内部コンソールからブートした場合、 カーネルがコンソールデバイスとしてシリアルポートを使用するようにするため、 -h オプションを使用できます。 反対に、シリアルポートからブートした場合、 カーネルがコンソールとして代わりに内部ディスプレイを使用するようにするため、 このオプションを使用できます。 シリアルポートドライバ sio(4) には、このオプションに優先するフラグがあります。 そのフラグが設定されると、ここで記述した -h オプションとは無関係に、シリアルポートが常にコンソールとして使用されます。 更なる詳細については、マニュアルページ sio(4) を参照してください。
        -m  コンソールを黙らせます。
        -n  loader(8) 起動前の、 キー入力によるブート中断を無視します。
        -P  キーボードを検出します。 キーボードが発見できなかった場合には、 -D と -h オプションが自動的にセットされます。
        -p  デバイスの検出フェーズにおいて、各デバイスがアタッチされるたびに停止します。
        -r  ルートファイルシステムを含むデバイスとしてスタティックに config され たデフォルトを使用します (config(8) を参照)。
        -s  シングルユーザ・モードで立上がるようになります。コンソールが “insecure” (ttys(5) を参照) に設定されていた場合には、root のパスワードを入力しなければなり ません。
        -v  デバイス検出の際 (そしてその後も)、詳細を出力します。

デフォルトを設定するため、BIOS ドライブ番号, コントローラタイプ, ユニット番号, パーティション, カーネルファイル名と 有効なオプションを /boot.config に書くこともできます。 ‘boot:’ プロンプトでタイプするように、 1 行で書いてください。

関連ファイル
/boot.config
    ブートブロックに対するパラメータ (必須ではない)
/boot/boot1
    第 1 段階のブートストラップ
/boot/boot2
    第 2 段階のブートストラップ
/boot/loader
    第 3 段階のブートストラップ
/boot/kernel/kernel
    デフォルトカーネル
/boot/kernel.old/kernel
    普通は非デフォルトカーネル (必須ではない)

関連項目
ddb(4), ttys(5), boot0cfg(8), bsdlabel(8), btxld(8), config(8), halt(8), loader(8), reboot(8), shutdown(8)

診断
ディスク関連のエラーが発生すると、 第 2 段階のブートストラップがエラーを報告します。 BIOS が返すものと同じエラーコードを使用し、 例えば “Disk error 0x1 (lba=0x12345678)” などと報告します。 エラーコードの一部のリストを示します:

0x1 不正な引数
0x2 アドレスマークが見付かりません
0x4 セクタが見付かりません
0x8 DMA オーバラン
0x9 64K 境界を越えて DMA を試みました
0xc 不正なメディア
0x10
    訂正できない CRC/ECC エラー
0x20
    コントローラの異常
0x40
    シークの失敗
0x80
    タイムアウト

注: 古いマシンや EDD サポート (ディスクパケットインタフェースサポート) が無い マシンでは、 ブートフェーズにアクセスされるブート関連の全ファイルと構造 (カーネルを含みます) は、ディスク上で (BIOS が理解するジオメトリにおいて) シリンダ 1023 以下に置かれることが必要です。 第 2 段階のブートストラップが “Disk error 0x1” を報告する場合、通常はこの条件が満されていないことを意味します。

バグ
このバージョンの BSD で使用されている bsdlabel(5) のフォーマットは、他のアーキテクチャで 使用されている物とは全く異なっています。

空間の制約により、 -P オプションにより起動されるキーボード検出は、BIOS が “拡張” キーボードを検出したかを単にテストするだけです。 “XT/AT” キーボード (F11, F12 キーなどを持ちません) を接続した場合、 検出は失敗します。