web-dev-qa-db-ja.com

MBR:BIOSは、ドライブが起動可能かどうかをどのように判断しますか?

Askubuntuでこの質問に答えようとしている間: GRUBをアンインストールする方法 MBRに関する ウィキペディアの記事を読みました そして ここスーパーユーザーのやや関連する質問 に対する完全な答えですが、私にはまだはっきりしないことが1つあります:

ドライブが起動可能かどうかをBIOSが正確に判断する理由は何ですか?システムに複数のドライブがインストールされている場合、ブートシーケンスはドライブ#1からスキップし、ドライブ#2からのブートを続行するにはどうすればよいですか?

私の理解では、BIOSが通常MBRをチェックするのは、512バイトセクターの最後にある署名だけであり、ブートセクターの最初の446バイトにある最初のブートローダーに制御を移すだけです。

ディスクが起動可能でない場合でも、ブートセクターの最初の446バイトに意味のあるブートローダーコードが含まれている必要があることを意味しますか?

BIOSが、たまたま「起動可能な」パーティションがないドライブ#1のブートローダーに制御を移した後、2番目のドライブのブートローダーはどの程度正確に呼び出されますか?

これが技術的すぎる場合は申し訳ありません:)短い質問は次のとおりです:「BIOSはどのくらい正確にドライブをスキップして次のドライブからの起動を試みますか?」

12
Sergey

ドライブが起動可能かどうかをBIOSが正確に判断する理由は何ですか?

BIOSは、 after MBRコード領域(446から始まるテーブルに保持)に存在する16バイトのパーティションレコードに基づいて、ドライブが起動可能かどうかを判断します。th バイト)。各パーティションレコードの最初のバイトは、ドライブの起動可能ステータスを表します(起動可能の場合は0x80に設定され、そうでない場合は0x00に設定されます)。一部のBIOSは、MBRの他の部分(パーティションタイプ、チェックサムなど)をチェックする場合がありますが、基本的な要件はブート可能フラグです。

システムに複数のドライブがインストールされている場合、ブートシーケンスはドライブ#1からスキップし、ドライブ#2からのブートを続行するにはどうすればよいですか?

これは実装に依存するため、起動順序を適切に選択する必要があります。ほとんどの場合、BIOSは設定された順序で各記憶媒体を調べ、そのデバイスから(MBRデータを介して)起動できるかどうかを判断します。可能であれば、実行します。そうでない場合は、他のデバイスをループし続けます(ここでも、選択した順序で)。

BIOSが、たまたま「起動可能な」パーティションがないドライブ#1のブートローダーに制御を移した後、2番目のドライブのブートローダーはどの程度正確に呼び出されますか?

有効なブートデバイスが見つかると(つまり、ブート可能フラグが設定され、他の追加のチェックに合格すると)、BIOSはMBRセクターをRAMにコピーします。次に、BIOSは、MBRコードセグメントが配置されているこの場所の先頭に(JUMP命令を使用して)命令ポインターを再配置し、コンピューターが起動します。

BIOSが BIOSブート仕様 をサポートしている場合、MBRコードは特定の命令でBIOSに制御を戻し、ブート失敗を通知し、次のデバイスを試すように促します。ただし、古いBIOSはエラーメッセージを出力するだけです。 BIOSがサポートしているかどうかは、USBから起動できるかどうかがわかります。

私の理解では、BIOSが通常MBRをチェックするのは、512バイトセクターの最後にある署名だけであり、ブートセクターの最初の446バイトにある最初のブートローダーに制御を移すだけです。

これは正しいですが、最近のほとんどのBIOSは、GUIDパーティションテーブルと、古い従来のMBRスタイルのテーブルも検索することに注意してください。

ディスクが起動可能でない場合でも、ブートセクターの最初の446バイトに意味のあるブートローダーコードが含まれている必要があることを意味しますか?

Noですが、ドライブmustには有効なMBRまたはGUIDパーティションテーブルがあります-そうでない場合、コンピュータによって検出されません。 MBRのコード部分は実際に空にすることができますが、ドライブの最初のセクターには整形式のMBR/GPTが必要です。

16
Breakthrough