![MBR アクティブ パーティションの目的は何ですか?](https://rvso.com/image/1592544/MBR%20%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%20%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E7%9B%AE%E7%9A%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
UEFI でブートローダーを起動するという概念は、.efi
ブートローダーを EFI システム パーティションに配置するという単純明快なものです。.efi
ファイルは対応するオペレーティング システムをロードします。しかし、OS を起動するために MBR にアクティブ パーティションが必要な理由がまだわかりません。
これまでの私の研究によると、MBR ブートストラップ コードはディスクの最初の 446 バイトにあり、POST 後に BIOS によって自動的に実行されます (デファクト スタンダードとして)。OS を直接ロードできますが、ほとんどの場合、コードが非常に小さいため、主な役割は別のパーティションのどこかにある実際のブートローダーをロードすることです。
パーティションから起動するには、なぜそのパーティションをアクティブに設定する必要があるのでしょうか? 理論的には、MBR ブートストラップ コードは、どこからでも何でも実行できます。
答え1
パーティションから起動するには、なぜそのパーティションをアクティブに設定する必要があるのでしょうか? 理論的には、MBR ブートストラップ コードは、どこからでも何でも実行できます。
はい、実際、MBR ブートストラップ コードはまさにそれを実行することがよくあります。
しかし、ブートストラップコードにはいくつかのブートローダの次のステージが保存されている場所を見つける方法。(ブートローダ全体は 446 バイトだけではありません。MBR はそのステージ 1 のみです。)
MBR パーティション テーブルを解析し、「アクティブ」フラグを探すブートセクターを持つことは、この問題に対する非常に汎用的な解決策です。完全に静的なブートセクター (生成に特別なツールは不要) が可能になり、そのように動作するブートセクターはどの OS でも同様に機能します。
例えば、syslinuxMBR ブートセクターは、Windows MBR ブートセクターと完全に互換性があるようです。Linux と Windows をデュアルブートする場合、どちらのブートセクターを使用していても問題ありません。どちらも同じことを行うため、常に「アクティブ」ビットを交換するだけで OS を交換できます。(ブートセクターのインストールは、mbr.bin を raw ディスクにコピーするだけです。)
しかし、ブートローダによってアプローチは異なります。たとえば、人気のLinux GRUB2は、第2段階を「MBR後ギャップ」に格納し、その場所に応じてブートストラップコードを動的に生成します。つまり、MBRブートセクタは、第2段階がどのLBAから始まるかを認識しています(パーティションテーブルと「アクティブ」フラグを完全に無視します)。これはディスクごとに異なる可能性があるため、ブートセクタはしなければならないgrub-install
プログラムによってディスクごとに個別に書き込まれます。
(GRUB2は通常はパーティションVBRも使用しませんが、できるこれらを「チェーンロード」すると、典型的な構成では実際のファイルシステムに直接アクセスし、OS カーネル ファイルをロードします。
答え2
見る Wikipedia マスターブートレコード MBR 形式の歴史については、こちらをご覧ください。
基本的に、アクティブ パーティションの必要性は、初期の IBM/DOS ブートローダの設計上の選択であり、それ以来ずっとその状態が続いています。
これらの初期のブートローダは、MBR の埋め込みパーティション テーブル内のパーティションのリストをスキャンして、アクティブ フラグでマークされているパーティションのみを見つけ、このアクティブ パーティションのボリューム ブート レコード (VBR) を読み込んで実行しました。
これは、IBM PC の生涯における初期の設計上の決定の 1 つに過ぎず、その後もずっと存続しました。これは、初期の開発者チーム (おそらく 1 人だけが行った決定) による決定以外の理由はありません。