MBR: Comment le BIOS décide-t-il si un lecteur est amorçable ou non?

12

En essayant de répondre à cette question sur askubuntu: Comment désinstaller GRUB J'ai lu l'article Wikipedia sur MBR et aussi la réponse parfaite à une question quelque peu connexe ici sur Superuser, cependant, une chose n'est toujours pas claire pour moi:

Qu'est-ce qui fait que le BIOS décide si un disque est amorçable ou non? Comment la séquence de démarrage saute-t-elle du lecteur n ° 1 et continue-t-elle à essayer de démarrer à partir du lecteur n ° 2 si plusieurs lecteurs sont installés sur le système?

Ma compréhension est que la seule chose que le BIOS vérifie normalement sur un MBR est sa signature à la fin du secteur de 512 octets, puis il transfère simplement le contrôle au chargeur de démarrage initial situé dans les 446 premiers octets du secteur de démarrage.

Cela implique-t-il que les 446 premiers octets du secteur de démarrage DOIVENT contenir du code de chargeur de démarrage significatif même si le disque n'est pas amorçable?

Après que le BIOS a transféré le contrôle au chargeur de démarrage sur le lecteur n ° 1, qui ne possédait aucune partition "amorçable" - comment exactement le chargeur de démarrage sur le deuxième lecteur est-il appelé?

Désolé si c'est trop technique :) La question courte est: "Comment le BIOS saute-t-il exactement un lecteur et essaie-t-il de démarrer à partir du suivant?"

Sergey
la source

Réponses:

16

Qu'est-ce qui fait que le BIOS décide si un disque est amorçable ou non?

Le BIOS décide si un disque est amorçable sur la base de l'enregistrement de partition de 16 octets, présent après la zone de code MBR (contenu dans une table commençant au 446 e octet). Le premier octet de chaque enregistrement de partition représente l'état d'amorçage du lecteur (et est défini sur 0x80amorçable ou 0x00non). Certains BIOS peuvent vérifier d'autres parties du MBR (par exemple, les types de partition, les sommes de contrôle), mais l'exigence de base est l'indicateur de démarrage.

Comment la séquence de démarrage saute-t-elle du lecteur n ° 1 et continue-t-elle à essayer de démarrer à partir du lecteur n ° 2 si plusieurs lecteurs sont installés sur le système?

Cela dépend de l'implémentation et c'est pourquoi vous devez sélectionner correctement un ordre de démarrage. Dans la plupart des cas, le BIOS examine chaque support de stockage dans l'ordre que vous avez défini et détermine s'il peut démarrer à partir de ce périphérique (via les données MBR). Si c'est le cas, il le fait - sinon, il continue de parcourir les autres appareils (encore une fois, dans l'ordre que vous avez sélectionné).

Après que le BIOS a transféré le contrôle au chargeur de démarrage sur le lecteur n ° 1, qui ne possédait aucune partition "amorçable" - comment exactement le chargeur de démarrage sur le deuxième lecteur est-il appelé?

Une fois qu'un périphérique de démarrage valide est trouvé (c'est-à-dire que l'indicateur de démarrage est défini et que d'autres vérifications supplémentaires sont réussies), le BIOS copie le secteur MBR dans la RAM. Le BIOS déplace ensuite le pointeur d'instruction au début de cet emplacement (à l'aide d'une JUMPinstruction), où se trouve le segment de code MBR, puis l'ordinateur démarre.

Si le BIOS prend en charge la spécification de démarrage du BIOS , le code MBR peut retourner le contrôle au BIOS avec une certaine instruction, le signalant d'un échec de démarrage et l'invitant à essayer le périphérique suivant. Cependant, les anciens BIOS affichent simplement un message d'erreur. Un bon indicateur si votre BIOS le prend en charge est de savoir si vous pouvez démarrer à partir de l'USB.

Ma compréhension est que la seule chose que le BIOS vérifie normalement sur un MBR est sa signature à la fin du secteur de 512 octets, puis il transfère simplement le contrôle au chargeur de démarrage initial situé dans les 446 premiers octets du secteur de démarrage.

C'est correct, mais il convient de noter que la plupart des BIOS modernes rechercheront également une table de partition GUID ainsi que l'ancienne table de style MBR conventionnelle.

Cela implique-t-il que les 446 premiers octets du secteur de démarrage DOIVENT contenir du code de chargeur de démarrage significatif même si le disque n'est pas amorçable?

Non , mais le lecteur doit avoir une table de partition MBR ou GUID valide - sinon, il ne sera pas détecté par l'ordinateur. Alors que la partie code du MBR peut en effet être vide, le premier secteur du lecteur doit avoir un MBR / GPT bien formé.

Percée
la source
Merci pour la réponse très détaillée. Donc, les critères pour un périphérique de démarrage valide est la présence d'une partition de démarrage dans la table de partition et quelques "autres vérifications supplémentaires"? Je suis juste un peu confus parce que dans la question d'origine sur AskUbuntu, l'auteur montre que toutes les partitions sur le lecteur ne sont pas amorçables et qu'il voit toujours l'erreur causée par GRUB cassé - qui n'aurait pas dû être invoqué par le BIOS du tout parce que le lecteur ne répond pas aux critères de "démarrage", le BIOS aurait donc dû sauter le lecteur et passer au suivant
Sergey
@Sergey J'ai regardé cette question et je ne suis pas sûr. Il est possible que le MBR soit corrompu ou que l'indicateur de démarrage soit défini sur une valeur non valide (vous ne savez pas comment fdisktraiter ces cas, bien que la version d'origine ait signalé les en-têtes MBR non valides). J'ai conseillé à l'OP de publier l'en-tête MBR brut, mais il / elle peut également vouloir "activer / désactiver" l'indicateur de démarrage (pour définir / réinitialiser l'indicateur manuellement).
Percée
Gardez à l'esprit que le code BIOS n'est pas générique. Il est plutôt spécifique à chaque carte mère, il sait donc quel type de disques il peut y avoir sur quels ports.
LatinSuD
Cette réponse n'est pas entièrement correcte. FWIU, la vérification d'une partition active et ainsi de suite est quelque chose que le code de démarrage MBR «par défaut» fait, pas le BIOS. NeoSmart présente une description plus plausible: «Sur les PC compatibles IBM (essentiellement, tout), les deux derniers octets du MBR de 512 octets sont appelés la signature de démarrage et sont utilisés par le BIOS pour déterminer si le lecteur de démarrage sélectionné est réellement amorçable ou ne pas." La dernière partie est tout simplement fausse. Le BIOS hérité peut démarrer à partir de GPT (avec le code de démarrage BIOS approprié), car il s'agit essentiellement d'un démarrage de «style libre».
Daniel B
@DanielB ces deux choses sont directement adressées dans la réponse: "Le BIOS vérifie normalement un MBR est sa signature à la fin du secteur de 512 octets, puis il transfère simplement le contrôle au chargeur de démarrage initial situé dans les 446 premiers octets. du secteur de démarrage " et " la plupart des BIOS modernes rechercheront également une table de partition GUID ainsi que l'ancienne table de style MBR classique " .
Percée du