
オンラインには多数の grub2/EFI スレッドがありますが、grub2 が EFI ブートで構成ファイルを検索する方法を理解することは困難です。 grub2の設定ファイルはです/boot/grub/grub.cfg
。ただし、起動の問題が発生した場合、grub2はエラーメッセージなしでコマンドプロンプト(緊急シェルとも呼ばれる)に表示されることがあります。したがって、問題を解決する前に、grub2が設定ファイルを見つけようとする方法を正確に理解するのが最善です。
答え1
最初に理解する必要があるのは、決まった方法がないということです。 grub2はインストール中に異なるように設定でき、名前はgrub.cfg
ハードコーディングされません。 2番目のレッスンは、単一の設定ファイルがないことです。たとえば、この記事を書いたとき、私のUbuntuシステムは実際に名前がありますgrub.cfg
。
デフォルトでは、grub2は起動時に2つの重要なタスクを実行します。
- プレフィックス変数を grub2 のインストール中に組み込み値に設定します。
$prefix/grub.cfg
構成ファイルがある場合は続行
(詳しくは下記をご覧ください。GNU GRUB マニュアル.)
「存在する場合」の条件は最悪です。ファイルが存在しない場合(たとえば、$prefix
正しい場所を指していないため)、実行したい操作に関するエラーメッセージはなく、コマンドを実行するだけです。早く。
緊急シェルに入ると、最初にチェックする必要があるのは、プレフィックス変数の値(setコマンドを使用)とディレクトリの内容(lsおよびcatコマンドを使用)です。
(デフォルトの動作は組み込みの設定ファイルによって無視されるかもしれませんが、実際にこれが起こっているのを見たことはありません。)
Ubuntuはプレフィックスをgrubx64.efi
セキュアブートに使用される場所に設定します。shimx64.efi
したがって、最初の構成ファイルgrub.cfgは、これらのEFIバイナリを持つ同じディレクトリにロードされます。 Linuxの観点からは、パスは
/boot/efi/EFI/ubuntu
grub2の観点から見ることができます(hd0,gpt1)/efi/ubuntu
(ドライブとパーティション番号はESP(たとえばEFIシステムパーティション)の場所によって異なります)。 grub2のファイル名はサイズに敏感な書き込みではないようです。 Linuxに表示されるEFIは、grub2が示すものと同じですefi
.)
最初のgrub.cfg
ファイルには3つのステートメントのみが含まれています。
- UUIDでルートファイルシステムを含むパーティションを見つけます(別のブートファイルシステムを使用しているシステムではなくブートファイルシステムを探します)。
- プレフィックスを新しい値に設定します
$root/boot/grub
($root
前の手順で決定した値を使用します。これは、別々のブートパーティションを持つシステムの値です$root/grub
)。 - 実行
configfile
開始位置$prefix/grub.cfg
後者は、/boot/grub/grub.cfg
私たちが通常Linuxの場所と呼ぶところです。