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


12

askubuntuに、この質問に答えるためにしようとしているときに:どのようにアンインストールGRUBん私が読んMBR上のWikipediaの記事をしても多少関連する質問に完璧な答えここでは、スーパーユーザーに、しかし、一つのことは、まだ私には明らかではありません。

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

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

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

BIOSがドライブ#1のブートローダーに制御を転送した後、たまたま「ブート可能な」パーティションがありませんでした-2番目のドライブのブートローダーはどのくらい呼び出されますか?

これが技術的すぎる場合はごめんなさい:)短い質問:「BIOSはどのくらい正確にドライブをスキップし、次のドライブからの起動を試みますか?」

回答:


16

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

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

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

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

BIOSがドライブ#1のブートローダーに制御を転送した後、たまたま「ブート可能な」パーティションがありませんでした-2番目のドライブのブートローダーはどのくらい呼び出されますか?

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

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

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

これは正しいですが、最新のBIOSのほとんどは、GUIDパーティションテーブルと、従来の従来のMBRスタイルのテーブルも検索することに注意する必要があります。

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

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


非常に詳細な回答をありがとう。したがって、有効なブート可能デバイスの基準は、パーティションテーブル内のブート可能パーティションの存在といくつかの「その他の追加チェック」ですか?AskUbuntuの元の質問で、著者はドライブ上のすべてのパーティションが起動可能ではなく、それでも壊れたGRUBによってエラーが表示されることを示しているため、BIOSによって呼び出されるべきではないため、少し混乱しています。 BIOSは、ちょうどドライブをスキップし、次のいずれかに行くべきだったので、ドライブには、「ブート可能」の基準を満たしていないため、
セルゲイ

@セルゲイ私はその質問を見ましたが、よくわかりません。MBRが破損しているか、ブート可能フラグが無効な値に設定されている可能性があります(元のバージョン無効なMBRヘッダーにフラグを立ててfdiskいましこれらのケースの処理方法は不明です)。OPに未加工のMBRヘッダーをポストするようにアドバイスしましたが、ブート可能なフラグを「オン/オフ」で切り替えることもできます(フラグを手動で設定/リセットするため)。
ブレークスルー

BIOSコードは一般的なものではないことに注意してください。それは各メインボードにかなり固有のものであるため、どの種類のドライブがどのポートに接続されているかを認識しています。
LatinSuD 14年

この答えは完全に正しいわけではありません。FWIU、アクティブパーティションのチェックなど、BIOSではなく「デフォルト」のMBRブートコードが行います。NeoSmartは、より妥当な説明を提示します。「IBM互換PC(基本的にすべて)で、512バイトMBRの最後の2バイトはブートシグネチャと呼ばれ、選択したブートドライブが実際にブート可能かどうかを決定するためにBIOSによって使用されます違います。」最後の部分は間違っています。レガシーBIOSは、本質的に「フリースタイル」ブートであるため、GPTから(適切なBIOSブートコードを使用して)ブートできます。
ダニエルB

@DanielBこれらの事柄の両方は、答えで直接対処されています:「BIOSは通常、MBRのチェックは512バイトセクターの最後の署名であり、その後、最初の446バイトにある初期ブートローダーに制御を転送しますブートセクタの」『最も近代的なBIOSはまた、』古い、従来のMBR形式のテーブルだけでなく、GUIDパーティションテーブルを探します
ブレークスルー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.