UEFIはブートデバイスをどのように検出しますか?
/ dev / sda2などのパーティションにLinuxをインストールするだけで、uefiはどのようにブートエントリとして認識できるのでしょうか?
BIOSはすべてのパーティションをチェックしますか?どうやって ?
UEFIはブートデバイスをどのように検出しますか?
/ dev / sda2などのパーティションにLinuxをインストールするだけで、uefiはどのようにブートエントリとして認識できるのでしょうか?
BIOSはすべてのパーティションをチェックしますか?どうやって ?
回答:
プレーンPC BIOSはパーティションを理解しません。セクター0(MBR)のみを読み取り、そこで見つかった初期ブートコード(OSによってインストールする必要があります)を実行し、そのブートコード自体がパーティションテーブルを解析する必要があります。
(すべてのMBRブートセクターが同じ方法でこのタスクを実行するわけではありません。WindowsまたはSyslinuxによってインストールされたパーティションは、「アクティブ」とマークされたパーティションを検索するだけです。 、他の人はGPTを読むことができます。)
したがって、BIOSブートメニューにはパーティションのみではなくディスクのみが含まれ、オペレーティングシステムを一覧表示する派手なブートメニューは、BIOSではなくOSブートローダー(GRUBなど)によって表示されます。OSカーネルパーティションの検索とOS自体の起動も、BIOSではなくこのブートローダーによって行われます。
BIOSとは異なり、UEFIファームウェアは実際にMBRおよびGPTパーティションテーブルを理解します。ただし、UEFIは依然としてLinuxまたはWindowsパーティションを認識せず、そこからOSを直接起動できません。
代わりに、UEFIファームウェアは特定の「EFIシステムパーティション」、つまりブートローダープログラムを含むFAT32パーティションのみを検索します。ファームウェアは、NVRAMにオペレーティングシステムのリストも保持し、インストールされた各OSは*.efi
、システムパーティション内の独自のファイルを指す独自のエントリをそこに追加します。
たとえば、Windowsは常に、Windowsブートローダーであるファイル「\ EFI \ Microsoft \ Bootmfgw.efi」を指す「Windows Boot Manager」というタイトルのエントリを追加します。
したがって、UEFIブートメニューには、いくつかのタイプのブートエントリを含めることができます。
\EFI\Boot\BootX64.efi
–これらにはカスタムラベルはなく、「UEFI:」の後にディスクのモデルが続きます。ご覧のとおり、UEFIファームウェアは1つのパーティション(EFIシステムパーティション)のみを使用しますが、残り(OSカーネルパーティションの検出)は、オペレーティングシステムのブートローダーによって引き続き実行されます。
UEFIでも、OSまたはカーネルバージョンを選択できるグラフィカルブートメニューも、UEFI自体ではなく、OSブートローダーによって通常表示されます。
とはいえ、Linuxブートローダーはまだルートパーティションについて正確には何も知りません。Linuxのブートローダーの主な仕事は、カーネルイメージ(vmlinuzで)とinitramfsのアーカイブを検索して、カーネルにコマンドラインオプションを提供することである- Linuxの構文でルートパーティションの名前が含まれている、などのroot=/dev/sda2
かroot=UUID=XYZ-ABC
。
Linuxカーネルが起動されると最後に、それはなり自体が提供された名前に一致するパーティションを検索し、それをマウントします/
。(これは、内部的にカーネルによって、またはより柔軟性が必要な場合はinitramfsによって実行できます。)