私が理解しているように、BIOSシステムのGRUBブートローダー(およびその他のほとんどのブートローダー)は3つの部分で構成されています。最初の部分(ステージ1)は最初の_448
_バイト。これは、メモリ内の少し後で配置された、いわゆるステージ1.5に制御を渡す役割を果たします。このステージは、最終的に/ bootフォルダからステージ2をロードし、それに制御を移します。
ステージ1は、どのディスクステージ1.5が存在するかをどのようにして知るのですか?ステージ1のコードが実行を開始すると、どのディスクからロードされたかを認識する方法はありません(この情報が何らかの方法でステージ1に渡されるか、BIOS自体がステージ1.5をメモリにロードしない限り)。
ステージ1.5からステージ2の場合も、ステージ1.5は/ bootディレクトリがどのディスク(およびどのパーティション)にあるかをどのように認識しますか?
利用可能なGRUBのソースを見ると ここ 、stage1は実際にはgrub/grub-core/boot/i386/pc/boot.S
で定義されていることがわかります。
構成されている場合は、フロッピーブートを実行できます。構成済みのハードディスクから起動し、stage1.5をロードする必要があるC/H/Sを知る必要があります。それが持っている唯一の自動機能は、他に設定されていない場合、ブートセクタがロードされたドライブを決定することです。機能的なBIOSは、その値をDLにロードしてから、制御をstage1に渡します。一部のBIOSはロードせず、grubは最初のハードディスクにフォールバックします。
stage1.5はすでにパーティションとファイルシステムを理解できるため、C/H/S値に依存しなくなりました。ロード元のドライブは上記と同じです。