grub efiローダーはどのようにして正しいgrub.cfgとブートディレクトリを見つけますか?


9

私が理解しているように、uefi biosはefiパーティションからgrub.efiをロードします。これにより、/ bootディレクトリから一連のgrubモジュールと設定ファイルが読み込まれます。

しかし、grubはどのようにしてブートパーティションが存在する正しいデバイスを見つけますか?grubのレガシーでは、通常、特定のパーティションにgrubをインストールします。

# grub-install --root-directory=/dev/sda

したがって、ブートディレクトリを探す場所は非常に明確です。grub-efiはどのようにして正しいデバイスを見つけますか?


私が理解しているように、カーネルの場所の構成はefiパーティションにあります。
Joe

明らかに、情報はefiパーティションにある必要がありますが、grubをインストールするときは(以前はそうであったように)いつでも実際にそれを指定することはありません。
user128063

grub-efiを実行したときに生成される.efiファイル内
Joe

回答:


9

ghexを使用してefiパーティションの「BOOTX64.EFI」ファイルを調べた後、この行を見つけました。

search.fs_uuid a43d1f11-6ebe-477d-8be3-321a33bc37f9 root hd2,gpt4 
set prefix=($root)'/boot/grub'

これは、grub(ブートパーティション)の場所に関する情報が、grub2-installによってシステム用に生成されたBOOTX64.EFIファイルに埋め込まれていることを示しています。

次にGrub2がEFIローダーによって実行され、grubインターフェイスを取得して、起動するオペレーティングシステム(カーネル)を選択するか、デフォルトのカーネルがロードされます。

少し拡張すると、「。EFI」ファイルは、UEFIサブシステムが実行できるアプリケーションのようなものです。システムの起動と、実行保護およびアンチウイルスタイプのプログラムを実行するための便利な場所の両方を提供することを目的としています。

彼らは「Unified Extensible Firmware Interface」に拡張機能を入れました


このファイルにパッチを適用し、構成とuuidを変更しても、Grubを再インストールせずに起動できるかどうかは興味深いでしょう
Joe

奇妙なことに、私はそれを見つけることができません。私のubuntu efiディレクトリには、ID内のプレフィックスとルート情報を含むgrub.cfg(ascii)があります。しかし、私のarchlinux efiディレクトリにはgrubx64.efiが含まれているだけで、ghexでそれらを読み取っても、ルートおよびプレフィックスコマンドの兆候はありません。
user128063

ubuntu.efiではなく、boot.efiを探します。efiパーティションにはフォルダーがあります。efiと呼ばれ、その中にbootというフォルダがあります。
Joe

efiフォルダーには、Windows用、Ubuntu用など、いくつかのefiバイナリーがあります。efiファイルの名前は関係ありません。ルートパーティションがlvmパーティションであるため、uuid行を見つけることができませんでした。代わりにlvmidを格納します!
user128063

1
ああ、すみません、以前の投稿を読み間違えました。Stackexchangeは、システムを説明する部分で以前の投稿を切り捨てました。あなたの説明は、私が知る限り、2つのオペレーティングシステムを起動する単一のブートローダー(grub)イメージ(BOOTX64.EFI)の説明です。以下にいくつかの可能性を示します。1)SteamOSは独自の個別のブートローダーを持つこともできます。そのため、efiパーティションに独自のEFIファイルがあります。2)SteamOSブートローダーがMBRに保存されているEFIとレガシーのハイブリッドブートシステムがある。efiブートオーダーがsudo efibootmgr -vgentooで使用することを確認できますが、これはご存知だと思います
user128063
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.