質問: UEFI(GPT)のブートの仕組みについて詳しく知りたいです。
回答: 同じく最近GPTに関する情報を集め、なかなか整理されたサイトがないなーと思っている人間です。 質問のような分かりやすい説明をしているサイトは見つかりませんでしたが、複数サイトの説明を繋ぎ合わせるとだいたい以下のような仕組みらしいです。 自分の備忘録も兼ねて書き連ねてみます。自分も全てを理解しているわけではありませんが、参考になれば。 ・GPTでフォーマットされたHDDの先頭にはMBRと同じ領域があり、ここには「ディスク全体が丸々ひとつのGPT保護パーティションである」という情報が書き込まれています。これによって、MBRにしか対応していないシステムで想定外の動作をすることを防いでいます。 MBRと同様にブートストラップローダ領域もありますが、通常は何も書き込まれないし、仮に何か書き込まれていても無視されます。 ・GPTヘッダはMBRのパーティションテーブルの後ろ(MBRから見たパーティションの先頭)にあり、ディスクの最後尾にはそのバックアップがあります。ここには128パーティション分のパーティションテーブルがあり、MBRでいうブートストラップローダのようなものはありません。 ・GPTの場合、起動時にHDDから最初に読み込まれるのはEFIシステムパーティション(容量100MBで、中身は普通のFAT32フォーマット。ドライブレターを割り当てれば普通にアクセス可能)内にあるEFIプログラム(デフォルトでは\EFI\BOOT\BOOTX64.EFI)。MBRではブートストラップローダ、ブートセクタ、カーネルローダと多段階構造になっていましたが、GPTではこのEFIプログラム1つだけで済みます。 MBRの感覚でいうとEFIシステムパーティションのファイルシステムを理解するためのコードがどこかに必要そうな気がしますが、マザーボードのEFIにその機能があるのでHDD側にはコードは必要ないようです(だからEFI機能のないマザーボードではGPT形式のHDDから起動できない)。つまり起動に必要なプログラムを全てファイルシステムに収める(MBRでいうブートストラップローダやブートセクタのような「ファイルではないプログラム」を極力使わない)という設計思想の模様。 (疑問)1つのHDDに複数のOSをインストールした場合、EFIシステムパーティションには複数のEFIプログラムが並ぶことになるが、どうやって選択するのか?(ここが一番知りたいけどいくら調べてもよく分からない...おそらくEFIの機能?少なくとも可能ではあるらしい) (疑問)手元の環境では確かに\EFI\BOOT\BOOTX64.EFIがあったが、解説サイトによっては\EFI\Microsoft\Boot\bootmgfw.efiとするものもあり、これも存在した。この違いは? ・Linuxの場合、MBRのブートストラップローダ(前述した、仮に何か書き込まれていても無視される部分)からEFIシステムパーティションのファイルシステムを理解するローダへ処理を移し、それがEFIプログラムを呼び出すという変則的な手順で、EFI非対応のマザーボードでもGPTディスクから起動できるようにする方法があるようです。 (疑問)となっている部分は今後の課題。