MBR: Wie entscheidet das BIOS, ob ein Laufwerk bootfähig ist oder nicht?

12

Beim Versuch, diese Frage auf askubuntu zu beantworten: Wie deinstalliere ich GRUB ? Ich habe den Wikipedia-Artikel über MBR gelesen und auch die perfekte Antwort auf eine etwas verwandte Frage hier über den Superuser. Eines ist mir jedoch immer noch nicht klar:

Was genau veranlasst das BIOS zu entscheiden, ob ein Laufwerk bootfähig ist oder nicht? Wie wird die Startsequenz von Laufwerk 1 übersprungen und versucht, von Laufwerk 2 zu starten, wenn mehr als ein Laufwerk im System installiert ist?

Ich verstehe, dass das einzige, was das BIOS normalerweise auf einem MBR überprüft, seine Signatur ganz am Ende des 512-Byte-Sektors ist und dann nur die Steuerung an den anfänglichen Bootloader überträgt, der sich in den ersten 446 Bytes des Bootsektors befindet.

Bedeutet dies, dass die ersten 446 Bytes des Bootsektors einen aussagekräftigen Bootloader-Code enthalten MÜSSEN, auch wenn die Festplatte nicht bootfähig ist?

Nachdem das BIOS die Kontrolle auf den Bootloader auf Laufwerk 1 übertragen hatte, der zufällig keine "bootfähigen" Partitionen hatte - wie genau wird der Bootloader auf dem zweiten Laufwerk aufgerufen?

Tut mir leid, wenn dies zu technisch ist :) Die kurze Frage lautet: "Wie überspringt das BIOS genau ein Laufwerk und fährt mit dem Versuch fort, vom nächsten zu starten?"

Sergey
quelle

Antworten:

16

Was genau veranlasst das BIOS zu entscheiden, ob ein Laufwerk bootfähig ist oder nicht?

Das BIOS entscheidet , ob ein Laufwerk gebootet wird auf der Grundlage der 16-Byte - Partition aufnehmen, vorhanden , nachdem den MBR - Code - Bereich (in einer Tabelle am Ausgang 446 gehalten ten Byte). Das erste Byte in jedem Partitionsdatensatz gibt den startfähigen Status des Laufwerks an (und wird auf " 0x80startfähig" gesetzt, 0x00wenn nicht). Einige BIOS überprüfen möglicherweise andere Teile des MBR (z. B. Partitionstypen, Prüfsummen), aber die Grundvoraussetzung ist das Boot-Flag.

Wie wird die Startsequenz von Laufwerk 1 übersprungen und versucht, von Laufwerk 2 zu starten, wenn mehr als ein Laufwerk im System installiert ist?

Dies ist implementierungsabhängig. Aus diesem Grund müssen Sie eine Startreihenfolge ordnungsgemäß auswählen. In den meisten Fällen durchsucht das BIOS jedes Speichermedium in der von Ihnen festgelegten Reihenfolge und ermittelt, ob es von diesem Gerät (über die MBR-Daten) gestartet werden kann. Wenn dies möglich ist, wird die Schleife durch die anderen Geräte fortgesetzt (ebenfalls in der von Ihnen ausgewählten Reihenfolge).

Nachdem das BIOS die Kontrolle auf den Bootloader auf Laufwerk 1 übertragen hatte, der zufällig keine "bootfähigen" Partitionen hatte - wie genau wird der Bootloader auf dem zweiten Laufwerk aufgerufen?

Sobald ein gültiges Boot-Gerät gefunden wurde (dh das Boot-Flag gesetzt ist und weitere zusätzliche Prüfungen bestanden wurden), kopiert das BIOS den MBR-Sektor in den RAM. Das BIOS verschiebt dann den Befehlszeiger an den Anfang dieses Speicherorts (unter Verwendung eines JUMPBefehls), an dem sich das MBR-Codesegment befindet, und der Computer startet dann.

Wenn das BIOS die BIOS- Startspezifikation unterstützt , kann der MBR-Code die Steuerung mit einer bestimmten Anweisung an das BIOS zurückgeben, um diesen über einen Startfehler zu informieren und ihn aufzufordern, das nächste Gerät zu versuchen. Ältere BIOSe geben jedoch nur eine Fehlermeldung aus. Wenn Ihr BIOS dies unterstützt, können Sie feststellen, ob Sie von USB booten können.

Ich verstehe, dass das einzige, was das BIOS normalerweise auf einem MBR überprüft, seine Signatur ganz am Ende des 512-Byte-Sektors ist und dann nur die Steuerung an den anfänglichen Bootloader überträgt, der sich in den ersten 446 Bytes des Bootsektors befindet.

Dies ist korrekt, obwohl zu beachten ist, dass die meisten modernen BIOS-Systeme neben der älteren, konventionellen MBR-artigen Tabelle auch nach einer GUID-Partitionstabelle suchen.

Bedeutet dies, dass die ersten 446 Bytes des Bootsektors einen aussagekräftigen Bootloader-Code enthalten MÜSSEN, auch wenn die Festplatte nicht bootfähig ist?

Nein , aber das Laufwerk muss über eine gültige MBR- oder GUID-Partitionstabelle verfügen. Andernfalls wird sie vom Computer nicht erkannt. Während der Codeteil des MBR tatsächlich leer sein kann, muss der erste Sektor des Laufwerks einen wohlgeformten MBR / GPT aufweisen.

Durchbruch
quelle
Danke für die sehr ausführliche Antwort. Das Kriterium für ein gültiges bootfähiges Gerät ist also das Vorhandensein einer bootfähigen Partition in der Partitionstabelle und einige "andere zusätzliche Prüfungen"? Ich bin nur ein bisschen verwirrt, weil der Autor in der ursprünglichen Frage zu AskUbuntu zeigt, dass alle Partitionen auf dem Laufwerk nicht bootfähig sind, und er dennoch den Fehler sieht, der durch defektes GRUB verursacht wurde - das eigentlich gar nicht vom BIOS aufgerufen werden sollte Da das Laufwerk nicht die "bootfähigen" Kriterien erfüllt, sollte das BIOS das Laufwerk einfach übersprungen haben und zum nächsten wechseln
Sergey
@Sergey Ich habe mir diese Frage angeschaut und bin mir nicht sicher. Es ist möglich , dass der MBR beschädigt ist , oder der Boot - Flag auf einen ungültigen Wert gesetzt (nicht sicher , wie fdiskdie Fälle behandelt, obwohl die ursprüngliche Version tat Flag ungültig MBR - Header). Ich habe dem OP geraten, den unformatierten MBR-Header zu posten, aber er / sie möchte möglicherweise auch das bootfähige Flag "ein- / ausschalten" (um das Flag manuell zu setzen / zurückzusetzen).
Durchbruch
Beachten Sie, dass der BIOS-Code nicht generisch ist. Es ist ziemlich spezifisch für jedes Mainboard, so dass es weiß, welche Art von Laufwerken an welche Ports angeschlossen sein könnten.
LatinSuD
Diese Antwort ist nicht ganz richtig. FWIU, Suche nach einer aktiven Partition und was nicht ist etwas, was der "Standard" MBR-Bootcode tut, nicht das BIOS. NeoSmart bietet eine plausibelere Beschreibung: „Auf IBM-kompatiblen PCs (im Grunde genommen alles) werden die letzten zwei Bytes des 512-Byte-MBR als Boot-Signatur bezeichnet und vom BIOS verwendet, um festzustellen, ob das ausgewählte Boot-Laufwerk tatsächlich bootfähig ist oder nicht nicht. “Der letzte Teil ist einfach falsch. Legacy-BIOS kann über GPT (mit dem entsprechenden BIOS-Startcode) gestartet werden, da es sich im Wesentlichen um ein "freies" Booten handelt.
Daniel B
@DanielB Diese beiden Dinge werden direkt in der Antwort angesprochen: "Das BIOS überprüft normalerweise, ob ein MBR seine Signatur am Ende des 512-Byte-Sektors ist, und überträgt dann die Steuerung nur an den anfänglichen Bootloader, der sich in den ersten 446 Bytes befindet des Boot-Sektors " und " die meisten modernen BIOS suchen auch nach einer GUID-Partitionstabelle sowie nach der älteren, konventionellen MBR-artigen Tabelle " .
Durchbruch