2016-10-30 2 views
0

私はGrubのレガシーブートローダについて読んでいます。そして私にはGrubがファイルシステムをどのように扱うのかが込められています。 Grubは、ファイルシステムの大きなサブセットをサポートしています。 Grubがこれらのファイルシステムを互いにどのように認識するのか疑いがありますか? 認識されても、どのように処理されていますか?すべてのファイルシステムと同様に、独自の実装があります。 Grubはディスクからランタイムライブラリをロードしますか?Grub(レガシー)はさまざまなファイルシステムをどのように認識して処理しますか?

私はその質問が広すぎることを知っています。しかし、私はスタートをキックするためのいくつかのヒントを教えてください。

ありがとうございました。

+0

「私は質問が広すぎることを知っています。」 - もしそうなら、あなたはそれに尋ねたのですか? – Tsyvarev

答えて

4

典型的な設定では、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枝のクローンを作成し、そのソースを読むことです。

+0

通常のデスクトップシステムでgrub-legacyを使用する典型的な方法として、stage1.5を組み込むことを覚えていることは間違いありません。 Wikipediaには、同様の高水準の記述があります。私の答えを更新しました。 –

+0

@PeterCordesまあ、私はすでにいくつかのプリンシパルの詳細が不足しているように見え、ドキュメントから復元しました。設定によってはステージ1.5を使用する傾向がありますが、セットアップ全体が機能するにはこれは依然としてプリンシパルではありません。残念ながら、私がアクセスする最も古いLinuxシステムは既にGRUB 2を持っています。 – Netch

+0

私はまだGRUB 0.97を使用しているマシンを持っています。私は実際に何かを壊す場合に出力を見るために 'grub-install'を再実行したくありません!しかし、私の答えに '/ boot/grub'のディレクトリリストを含めましたので、それぞれのファイルシステムごとにstage1_5のサイズを見ることができます。 –

2

FS検出:パーティションの最初の4Bのマジックナンバー、または類似のシグネチャ検出とみなします。

FS処理: stage1は、パーティションテーブルと最初のパーティションの先頭の間のスペースに埋め込まれたstage1.5を読み込みます。これには少なくとも/bootを含むファイルシステム用の読み取り専用ドライバが含まれています。そこからステージ2をロードできます。

stage1.5の空きがない場合、Netchの説明のように、完全なstage2のセクタアドレスを埋め込むことになります。これはGRUBへのアップグレードや、/ bootのファイルをコピーするだけで変わる可能性があります。

Grub Wikipediaの記事では、the operation of GRUB-legacyについて説明しています。これはおそらくGRUB-legacyドキュメントにも記載されています。古代のDebianマシンで


私はまだ周りに持っている、GRUB 0.97、/boot/grubとブーツが含まれている:

-rw-r--r-- 1 root root 197 2008-08-29 23:57 default 
-rw-r--r-- 1 root root  46 2008-08-29 23:57 device.map 
-rw-r--r-- 1 root root  31 2008-08-29 23:57 device.map~ 
-rw-r--r-- 1 root root 7552 2008-08-29 23:57 e2fs_stage1_5 
-rw-r--r-- 1 root root 7424 2008-08-29 23:57 fat_stage1_5 
-rw-r--r-- 1 root root 8192 2008-08-29 23:57 jfs_stage1_5 
-rw-r--r-- 1 root root 3377 2012-04-19 20:41 menu.lst 
-rw-r--r-- 1 root root 3377 2012-04-19 20:41 menu.lst~ 
-rw-r--r-- 1 root root 6848 2008-08-29 23:57 minix_stage1_5 
-rw-r--r-- 1 root root 9248 2008-08-29 23:57 reiserfs_stage1_5 
-rw-r--r-- 1 root root 512 2008-08-29 23:57 stage1 
-rw-r--r-- 1 root root 108328 2008-08-29 23:57 stage2 
-rw-r--r-- 1 root root 8872 2008-08-29 23:57 xfs_stage1_5 

は、FS-特定stage1_5ファイルは、ブート時にそこからない読み取り、次のとおりです。/bootを読むために必要なものは、grub-installによって埋め込まれています。

関連する問題