MBR: In che modo il BIOS decide se un'unità è avviabile o no?


12

Durante il tentativo di rispondere a questa domanda su askubuntu: Come disinstallare GRUB ho letto l' articolo di Wikipedia su MBR e anche la risposta perfetta su una domanda in qualche modo correlata qui su Superuser, tuttavia una cosa non mi è ancora chiara:

Cosa fa decidere esattamente il BIOS se un'unità è avviabile o no? In che modo la sequenza di avvio salta dall'unità n. 1 e procede tentando l'avvio dall'unità n. 2 se nel sistema è installata più di un'unità?

La mia comprensione è che l'unica cosa che il BIOS normalmente controlla su un MBR è la sua firma alla fine del settore a 512 byte, quindi trasferisce il controllo al bootloader iniziale situato nei primi 446 byte del settore di avvio.

Implica che i primi 446 byte del settore di avvio DEVONO contenere un codice di bootloader significativo anche se il disco non è avviabile?

Dopo che il BIOS ha trasferito il controllo al bootloader sull'unità n. 1 che non aveva partizioni "avviabili", come viene invocato esattamente il bootloader sulla seconda unità?

Scusate se questo è troppo tecnico :) La domanda breve è: "In che modo il BIOS salta esattamente un'unità e procede a provare ad avviarsi dal successivo?"

Risposte:


16

Cosa fa decidere esattamente il BIOS se un'unità è avviabile o no?

Il BIOS decide se un'unità è avviabile in base al record di partizione a 16 byte, presente dopo l'area del codice MBR (contenuta in una tabella che inizia al 446 ° byte). Il primo byte in ogni record di partizione rappresenta lo stato di avvio dell'unità (ed è impostato su 0x80se avviabile o in 0x00caso contrario). Alcuni BIOS possono controllare altre parti dell'MBR (ad es. Tipi di partizione, checksum), ma il requisito di base è il flag di avvio.

In che modo la sequenza di avvio salta dall'unità n. 1 e procede tentando l'avvio dall'unità n. 2 se nel sistema è installata più di un'unità?

Questo dipende dall'implementazione ed è il motivo per cui è necessario selezionare correttamente un ordine di avvio. Nella maggior parte dei casi, il BIOS esaminerà tutti i supporti di archiviazione nell'ordine impostato e determinerà se è possibile eseguire l'avvio da quel dispositivo (tramite i dati MBR). In tal caso, lo fa - in caso contrario, continua a scorrere gli altri dispositivi (di nuovo, nell'ordine selezionato).

Dopo che il BIOS ha trasferito il controllo al bootloader sull'unità n. 1 che non aveva partizioni "avviabili", come viene invocato esattamente il bootloader sulla seconda unità?

Una volta trovato un dispositivo di avvio valido (ovvero è impostato il flag di avvio e vengono superati altri controlli aggiuntivi), il BIOS copia il settore MBR nella RAM. Il BIOS trasferisce quindi il puntatore dell'istruzione all'inizio di questa posizione (utilizzando JUMPun'istruzione), in cui si trova il segmento del codice MBR, quindi il computer si avvia.

Se il BIOS supporta le specifiche di avvio del BIOS , il codice MBR può restituire il controllo al BIOS con una determinata istruzione, segnalandolo in caso di errore di avvio e chiedendogli di provare il dispositivo successivo. Tuttavia, i BIOS precedenti stampano solo un messaggio di errore. Una buona notizia se il BIOS lo supporta è se è possibile eseguire l'avvio da USB.

La mia comprensione è che l'unica cosa che il BIOS normalmente controlla su un MBR è la sua firma alla fine del settore a 512 byte, quindi trasferisce il controllo al bootloader iniziale situato nei primi 446 byte del settore di avvio.

Ciò è corretto, anche se va notato che la maggior parte dei BIOS moderni cercherà anche una tabella delle partizioni GUID e la tabella di MBR tradizionale, più vecchia.

Implica che i primi 446 byte del settore di avvio DEVONO contenere un codice di bootloader significativo anche se il disco non è avviabile?

No , ma l'unità deve avere una tabella delle partizioni MBR o GUID valida, altrimenti non verrà rilevata dal computer. Mentre la parte di codice dell'MBR può effettivamente essere vuota, il primo settore dell'unità deve avere un MBR / GPT ben formato.


Grazie per la risposta molto dettagliata. Quindi i criteri per un dispositivo di avvio valido è la presenza di una partizione di avvio nella tabella delle partizioni e alcuni "altri controlli aggiuntivi"? Sono solo un po 'confuso perché nella domanda originale su AskUbuntu l'autore mostra che tutte le partizioni sul disco non sono avviabili e vede ancora l'errore causato da GRUB rotto - che non avrebbe dovuto essere invocato dal BIOS affatto perché l'unità non soddisfa i criteri di "avvio", quindi il BIOS avrebbe dovuto semplicemente saltare l'unità e passare al successivo
Sergey,

@Sergey Ho guardato quella domanda e non sono sicuro. È possibile che l'MBR sia danneggiato o che il flag di avvio sia impostato su un valore non valido (non sono sicuro di come fdiskgestirli, anche se la versione originale ha contrassegnato intestazioni MBR non valide). Ho consigliato all'OP di pubblicare l'intestazione MBR non elaborata, ma potrebbe anche voler "attivare / disattivare" il flag di avvio (per impostare / reimpostare il flag manualmente).
Breakthrough

Tieni presente che il codice BIOS non è generico. È piuttosto specifico per ciascuna scheda madre, quindi sa quale tipo di unità potrebbe essere collegata a quali porte.
LatinSuD

Questa risposta non è del tutto corretta. FWIU, verificando la presenza di una partizione attiva e quant'altro è il codice di avvio MBR "predefinito", non il BIOS. NeoSmart presenta una descrizione più plausibile: "Su PC compatibili IBM (in pratica, tutto) gli ultimi due byte dell'MBR a 512 byte sono chiamati firma di avvio e sono utilizzati dal BIOS per determinare se l'unità di avvio selezionata è effettivamente avviabile o non." L'ultima parte è semplicemente sbagliata. Il BIOS legacy può essere avviato da GPT (con il codice di avvio del BIOS appropriato), poiché è essenzialmente un avvio di tipo "libero".
Daniel B,

@DanielB entrambe queste cose sono indirizzate direttamente nella risposta: "Il BIOS normalmente controlla un MBR è la sua firma alla fine del settore a 512 byte, quindi trasferisce il controllo al bootloader iniziale situato nei primi 446 byte del settore di avvio " e " la maggior parte dei BIOS moderni cercherà anche una tabella delle partizioni GUID e la più vecchia tabella convenzionale in stile MBR " .
Breakthrough
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.