MBR アクティブ パーティションの目的は何ですか?

MBR アクティブ パーティションの目的は何ですか?

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 人だけが行った決定) による決定以外の理由はありません。

関連情報