grub2はEFIブートで設定ファイルをどのように見つけますか?

grub2はEFIブートで設定ファイルをどのように見つけますか?

オンラインには多数の grub2/EFI スレッドがありますが、grub2 が EFI ブートで構成ファイルを検索する方法を理解することは困難です。 grub2の設定ファイルはです/boot/grub/grub.cfg。ただし、起動の問題が発生した場合、grub2はエラーメッセージなしでコマンドプロンプト(緊急シェルとも呼ばれる)に表示されることがあります。したがって、問題を解決する前に、grub2が設定ファイルを見つけようとする方法を正確に理解するのが最善です。

ベストアンサー1

最初に理解する必要があるのは、決まった方法がないということです。 grub2はインストール中に異なるように設定でき、名前はgrub.cfgハードコーディングされません。 2番目のレッスンは、単一の設定ファイルがないことです。たとえば、この記事を書いたとき、私のUbuntuシステムは実際に名前がありますgrub.cfg

デフォルトでは、grub2は起動時に2つの重要なタスクを実行します。

  1. プレフィックス変数を grub2 のインストール中に組み込み値に設定します。
  2. $prefix/grub.cfg構成ファイルがある場合は続行

(詳しくは下記をご覧ください。GNU GRUB マニュアル.)

「存在する場合」の条件は最悪です。ファイルが存在しない場合(たとえば、$prefix正しい場所を指していないため)、実行したい操作に関するエラーメッセージはなく、コマンドを実行するだけです。早く。

緊急シェルに入ると、最初にチェックする必要があるのは、プレフィックス変数の値(setコマンドを使用)とディレクトリの内容(lsおよびcatコマンドを使用)です。

(デフォルトの動作は組み込みの設定ファイルによって無視されるかもしれませんが、実際にこれが起こっているのを見たことはありません。)

Ubuntuはプレフィックスをgrubx64.efiセキュアブートに使用される場所に設定します。shimx64.efiしたがって、最初の構成ファイルgrub.cfgは、これらのEFIバイナリを持つ同じディレクトリにロードされます。 Linuxの観点からは、パスは /boot/efi/EFI/ubuntugrub2の観点から見ることができます(hd0,gpt1)/efi/ubuntu (ドライブとパーティション番号はESP(たとえばEFIシステムパーティション)の場所によって異なります)。 grub2のファイル名はサイズに敏感な書き込みではないようです。 Linuxに表示されるEFIは、grub2が示すものと同じですefi.)

最初のgrub.cfgファイルには3つのステートメントのみが含まれています。

  1. UUIDでルートファイルシステムを含むパーティションを見つけます(別のブートファイルシステムを使用しているシステムではなくブートファイルシステムを探します)。
  2. プレフィックスを新しい値に設定します$root/boot/grub$root前の手順で決定した値を使用します。これは、別々のブートパーティションを持つシステムの値です$root/grub)。
  3. 実行configfile開始位置$prefix/grub.cfg

後者は、/boot/grub/grub.cfg私たちが通常Linuxの場所と呼ぶところです。

おすすめ記事