典型的な設定では、GRUBステージ1(1セクタバイナリ)はステージ2の位置を知っており、ロードします。この場所は、インストールコマンド(setup
またはinstall
)によってステージ1に書き込まれます。 (より正確には、ステージ2ファイルの開始は、他のファイル部分の物理的位置のリストで更新され、ステージ1はステージ2の開始セクタをロードし、ステージ2はステージ2の残りの部分でこのブートストラップを継続する)。実際のステージ2設定で更新された場合、ステージ1の直後のセクタでステージ2が必要です(GRUBディスケットの場合など)。
ステージ2がロードされると、それ以降の操作はすべて実行できます。ステージ2では、サポートされているすべてのFSに対して読み取り専用ドライバが組み込まれています。そのようなドライバは、フル機能のドライバよりもはるかに小さい。インストールプロセスには、ブートドライブとパーティションをステージ2にコーディングすることも含まれているため、ブート後に有効な設定(このバージョンでは[/boot]/grub/menu.lst
)の場所を知ることができます。突然、FSタイプはステージ2のコンフィグレーションでコード化されません。 FSタイプの検出は、*_mount()
関数(ファイルセットstage2/fsys_*.c
)で行われます。パーティションテーブルのシグネチャチェックとパーティションタイプチェックを含む、それぞれがそれを検出するために最善を尽くします。なぜこのスタイルが選ばれたのか分かりませんが、彼らはFSタイプの検出が安定していると思ったようです。
ステージ2がロードされ、適切な内部設定(デバイス、パーティション)が与えられ、FSがオープンされているので、メニューをロードしてより高いレベルのロジックを続行できます。
(この説明にはステージ1.5が含まれていませんでした。だから、)
、GRUBが互いからこれらのファイルシステムを認識し、どのように
、あなたの特定の質問に答えますか?
署名およびパーティションタイプ(DOS、BSD ...)との両方
は、ディスクからGrubのロードランタイム・ライブラリーをしていますか?
いいえ、独自の読み取り専用ドライバを使用します。
しかし、私はスタートをキックするためのヒントを教えてください。
あなたがCを読み取ることができる場合は、最善の方法は、そのrepository、チェックアウトgrub-legacy
枝のクローンを作成し、そのソースを読むことです。
「私は質問が広すぎることを知っています。」 - もしそうなら、あなたはそれに尋ねたのですか? – Tsyvarev