web-dev-qa-db-ja.com

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

ネット上には何億ものgrub2/EFIスレッドがありますが、上記の質問に対する答えを見つけるのは難しいと感じました。 grub2では、構成ファイルは/boot/grub/grub.cfgであると言われています。しかし、起動の問題がある場合、grub2はエラーメッセージなしでコマンドプロンプト(別名緊急シェル)になることがあります。したがって、問題を解決する前に、grub2が構成ファイルを正確に見つけようとする方法を理解しておくとよいでしょう。

7
Uwe Geuder

決まった方法がないことを最初に理解すること。 grub2はインストール時に別の方法で設定でき、grub.cfgという名前は決してハードコードされていません。 2番目の学習は、単一の構成ファイルがないことです。 g。執筆時の私のUbuntuシステムは、2つの異なるファイルを順番に使用します。どちらも実際にはgrub.cfgという名前です。

デフォルトでは、grub2は起動時に2つの重要なことを行います。

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

(詳細については http://www.gnu.org/software/grub/manual/grub.html#GRUB-only-offers-a-rescue-Shell を参照してください)

「存在する場合」の状態は厄介なものです。ファイルが存在しない場合(たとえば、$ prefixが正しい場所を指していないため)、実行しようとしたエラーメッセージは表示されず、コマンドプロンプトが表示されます。 。

緊急シェルが発生した場合、最初に確認するのは、プレフィックス変数の値(setコマンドを使用)とそのディレクトリの内容(lsコマンドとcatコマンドを使用)です。

(デフォルトの動作は組み込みの構成ファイルによって上書きされる可能性がありますが、実際に使用されているのを見たことはないと思います。)

Ubuntuは、プレフィックスを、セキュアブートに使用されるgrubx64.efiおよびshimx64.efiと同じ場所に設定します。したがって、最初の構成ファイルgrub.cfgは、これらのEFIバイナリが存在する同じディレクトリからロードされます。 Linuxの観点では、パスは/ boot/efi/EFI/ubuntuであり、grub2の観点では(hd0、gpt1)/ efi/ubuntu(ドライブとパーティション番号は、ESP ie EFIシステムパーティションが見つかり、grub2のファイル名では大文字と小文字が区別されないように見えるため、Linuxで表示されるEFIは、grub2ではefiとして表示されます。

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

  1. ルートファイルシステムを含むパーティションをUUIDで検索します(別のブートファイルシステムを使用しているシステムでは、代わりにブートファイルシステムを検索します)。
  2. プレフィックスを$ root/boot/grubの新しい値に設定します(前のステップで決定された$ root値を使用します。個別のブートパーティションを持つシステムの場合、これは$ root/grubである必要があります)
  3. 場所$ prefix/grub.cfgからconfigfileを実行します

後者はLinuxの場所である/boot/grub/grub.cfgで、通常はこのように言われます。

6
Uwe Geuder