コンテンツにスキップ

FreeBSD/ブートプロセス

出典: フリー教科書『ウィキブックス(Wikibooks)』

FreeBSDのブートプロセスは非常に堅牢で複雑な仕組みを持っています。システムの構成(UEFI/BIOS)、パーティション方式(GPT/MBR)、ファイルシステム(UFS/ZFS)によって、異なるブート手順を踏むことになります。

ブートプロセスの概要

[編集]

FreeBSDのブート処理は、大きく分けて以下の段階で実行されます:

  • Stage 0: 最初のブートコードの読み込み
  • Stage 1: 基本的なブートローダー
  • Stage 2: より高度なブートローダー
  • Stage 3: 最終的なブートローダー(loader)
  • カーネル起動
  • init プロセス開始

主なブート方式

[編集]

BIOS(レガシー)ブート

[編集]

従来の16ビットシステムブート機構で、以下の特徴があります:

  • NVMeデバイスからの起動には非対応
  • MBRパーティション、FreeBSDスライス、GPTパーティションをサポート
  • UEFIと比べて起動が若干遅い

UEFIブート

[編集]

現代的な起動方式で、以下の特徴があります:

  • 64ビットモードでの早期起動が可能
  • より高速な起動処理
  • amd64システムで標準的に利用可能
  • arm64システムでもServerReady認証に必要

ファイルシステムとパーティション方式による違い

[編集]

BIOS + MBR + UFS の場合

[編集]
  1. BIOSがMBRからboot0を読み込む
  2. boot1を読み込み
  3. boot2を実行
  4. loaderを起動
  5. カーネル起動

BIOS + MBR + ZFS の場合

[編集]
  1. BIOSがMBRからboot0を読み込む
  2. boot1を読み込み
  3. zfsbootを実行
  4. zfsloaderを起動
  5. カーネル起動

BIOS + GPT + UFS/ZFS の場合

[編集]
  1. BIOSがGPTのpmbr(Protective MBR)を読み込む
  2. gptboot(UFS)またはgptzfsboot(ZFS)を実行
  3. loaderまたはzfsloaderを起動
  4. カーネル起動

UEFI + GPT/MBR の場合

[編集]
  1. UEFIファームウェアがESPパーティションから起動
  2. アーキテクチャに応じたEFIファイル(例:bootx64.efi)を読み込む
  3. loader.efiを起動
  4. カーネル起動

カーネル起動後の処理

[編集]
  1. /boot/device.hintsの読み込み
  2. ハードウェアの検出と初期化
  3. init(PID 1)への制御移譲
  4. ファイルシステムのマウント
  5. システム設定の読み込み(/etc/defaults/rc.conf/etc/rc.conf
  6. サービスの起動(/etc/rc.d/usr/local/etc/rc.d

特別な起動オプション

[編集]

nextboot

[編集]
  • 次回起動時のみ有効な設定が可能
  • カーネルや起動フラグの一時的な変更に使用
  • 使用例:
nextboot -k CUSTOM      # カスタムカーネルで起動
nextboot -o "-s" -k TEST  # シングルユーザーモードでTESTカーネルを起動

ブートフラグ

[編集]
  • bootme: 起動パーティションの指定
  • bootonce: 1回限りの起動設定
  • bootfailed: 起動失敗を示すフラグ

FreeBSDのブートプロセスは、このように様々な構成に対応できる柔軟な設計となっています。システム管理者は、これらの仕組みを理解することで、より効果的なシステム運用が可能となります。