FreeBSD/ブートプロセス
表示
< FreeBSD
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 の場合
[編集]- BIOSがMBRから
boot0を読み込む boot1を読み込みboot2を実行loaderを起動- カーネル起動
BIOS + MBR + ZFS の場合
[編集]- BIOSがMBRから
boot0を読み込む boot1を読み込みzfsbootを実行zfsloaderを起動- カーネル起動
BIOS + GPT + UFS/ZFS の場合
[編集]- BIOSがGPTのpmbr(Protective MBR)を読み込む
gptboot(UFS)またはgptzfsboot(ZFS)を実行loaderまたはzfsloaderを起動- カーネル起動
UEFI + GPT/MBR の場合
[編集]- UEFIファームウェアがESPパーティションから起動
- アーキテクチャに応じたEFIファイル(例:
bootx64.efi)を読み込む loader.efiを起動- カーネル起動
カーネル起動後の処理
[編集]/boot/device.hintsの読み込み- ハードウェアの検出と初期化
- init(PID 1)への制御移譲
- ファイルシステムのマウント
- システム設定の読み込み(
/etc/defaults/rc.conf、/etc/rc.conf) - サービスの起動(
/etc/rc.d、/usr/local/etc/rc.d)
特別な起動オプション
[編集]nextboot
[編集]- 次回起動時のみ有効な設定が可能
- カーネルや起動フラグの一時的な変更に使用
- 使用例:
nextboot -k CUSTOM # カスタムカーネルで起動 nextboot -o "-s" -k TEST # シングルユーザーモードでTESTカーネルを起動
ブートフラグ
[編集]- bootme: 起動パーティションの指定
- bootonce: 1回限りの起動設定
- bootfailed: 起動失敗を示すフラグ
FreeBSDのブートプロセスは、このように様々な構成に対応できる柔軟な設計となっています。システム管理者は、これらの仕組みを理解することで、より効果的なシステム運用が可能となります。