ブートローダーは、ファームウェアによる検出とカーネル実行を橋渡しします。Linux PC では GRUB が一般的ですが、systemd-boot、U-Boot、ファームウェアによる EFI stub カーネルの直接読み込みなど、別の設計はこの役割の異なる部分を実装します。
システムの起動 · レッスン 3
ブートプロセス:ブートローダー
ブートローダーが Linux の起動成果物を選び、カーネルコマンドラインを構築して制御を渡す仕組みを学びます。
ブート成果物の選択
ローダーのエントリでは、次のものを指定できます。
- Linux カーネルイメージ
- 任意の initramfs または従来型 initrd イメージ
- カーネルコマンドライン
- プラットフォーム固有のメタデータや、別 OS のローダー
GRUB は複数のカーネルや復旧エントリを提示できます。予備カーネルが役立つのは、対応するモジュールと initramfs が残り、動作確認されている場合だけです。ローダーは自身が対応するストレージ・ファイルシステムモジュールを通じてファイルを読み、まだ動いていない Linux VFS には依存しません。
Linux のブートローダーは通常、何へ制御を渡しますか?
カーネルコマンドラインパラメータ
ローダーは、カーネルと初期ユーザー空間が解析するテキストのコマンドラインを渡します。代表例は次のとおりです。
root=...:最終的に使うルートファイルシステム、または初期ユーザー空間向けの指定を識別するro/rw:ルートの初期マウントモードを要求するquiet:カーネルのコンソールメッセージを減らすinit=...:特殊な復旧向けに別の最初のユーザー空間プログラムを要求する- ディストリビューション固有の initramfs ツールが解釈する
rd.*パラメータ
initrd は通常、イメージを指定するローダー指令であり、一般的なカーネルパラメータではありません。一部の GRUB 設定が生成するコマンドラインに BOOT_IMAGE= が現れることはありますが、カーネルを読み込む仕組みそのものではありません。
現在のブートで使われたコマンドラインは次で確認できます。
$ cat /proc/cmdline
カーネルコマンドラインの root= パラメータは何のために使いますか?
quiet パラメータは通常、何を要求しますか?
一時編集と復旧
GRUB では、権限のあるコンソール利用者が、メニューに示された編集キーなどを使って一回のブートだけエントリを変更できるのが一般的です。quiet の削除、復旧パラメータの選択、誤ったルート識別子の修正に便利です。操作方法と認証は、Secure Boot やパスワード保護された GRUB 設定によっても異なります。
コマンドラインの機密文字列は /proc/cmdline、ブートログ、クラッシュ報告に露出し得ます。また、パラメータによってセキュリティを弱めたり、起動不能にしたりもできます。秘密情報は置かず、既知の正常なエントリとコンソールからの復旧手段を維持してください。
GRUB メニューのエントリを対話的に編集して一度ブートするとき、一般的に当てはまるものはどれですか?
GRUB の永続設定
ディストリビューションは一般に、テンプレート、既定値、スクリプト、検出したカーネルから最終的な GRUB 設定を生成します。ディストリビューションが明示的にその手順を定めていない限り、生成済み grub.cfg を直接編集しないでください。再生成によって上書きされる可能性があります。
対象を絞って設定元を変更し、ディストリビューション指定の再生成コマンドを実行して出力を確認します。既知の正常な旧エントリと起動可能な復旧メディアを残したままテストしてください。Debian、Fedora、UEFI、BIOS の各環境では、コマンドと出力先が異なります。
生成済みの grub.cfg を直接編集する方法が通常は信頼できないのはなぜですか?
GRUB2 ブートメニューのカスタマイズは、復旧可能なラボ環境だけで利用してください。
レッスン完了
ブートプロセス:ブートローダー を完了しました
これで、ローダー指令とカーネルコマンドラインパラメータを区別できます。
カーネル、initramfs、コマンドライン、代替エントリを識別する。
root=、ro、quietを実際の役割に沿って使う。/proc/cmdlineから稼働中ブートのパラメータを確認する。対話的な編集を一時的かつセキュリティに関わる操作として扱う。
永続的な生成設定はディストリビューションの手順で変更する。