MBR: ¿Cómo decide el BIOS si una unidad es de arranque o no?

12

Al intentar responder esta pregunta en askubuntu: ¿Cómo desinstalo GRUB ? Leí el artículo de Wikipedia sobre MBR y también la respuesta perfecta sobre una pregunta algo relacionada aquí en Superuser, sin embargo, una cosa todavía no me queda clara:

¿Qué hace exactamente que el BIOS decida si una unidad es de arranque o no? ¿Cómo salta la secuencia de arranque desde la unidad n. ° 1 y continúa intentando arrancar desde la unidad n. ° 2 si hay más de una unidad instalada en el sistema?

Tengo entendido que lo único que el BIOS normalmente verifica en un MBR es su firma al final del sector de 512 bytes, y luego simplemente transfiere el control al gestor de arranque inicial ubicado en los primeros 446 bytes del sector de arranque.

¿Implica que los primeros 446 bytes del sector de arranque DEBEN contener algún código de gestor de arranque significativo incluso si el disco no es de arranque?

Después de que el BIOS transfirió el control al gestor de arranque en la unidad n. ° 1 que no tenía particiones "de arranque", ¿cómo se invoca exactamente el gestor de arranque en la segunda unidad?

Lo siento si esto es demasiado técnico :) La pregunta breve es: "¿Cómo se salta el BIOS exactamente una unidad y procede a intentar arrancar desde la siguiente?"

Sergey
fuente

Respuestas:

16

¿Qué hace exactamente que el BIOS decida si una unidad es de arranque o no?

El BIOS decide si una unidad es de arranque basado en el registro de partición de 16 bytes, presente después de la zona de código de MBR (que tuvo lugar en una tabla a partir de la 446 ª byte). El primer byte en cada registro de partición representa el estado de arranque de la unidad (y se establece en 0x80si es de arranque, o 0x00si no). Algunas BIOS pueden verificar otras partes del MBR (por ejemplo, tipos de partición, sumas de verificación), pero el requisito básico es el indicador de arranque.

¿Cómo salta la secuencia de arranque desde la unidad n. ° 1 y continúa intentando arrancar desde la unidad n. ° 2 si hay más de una unidad instalada en el sistema?

Esto depende de la implementación, y es por eso que debe seleccionar correctamente un orden de arranque. En la mayoría de los casos, el BIOS examinará cada medio de almacenamiento en el orden que establezca y determinará si puede arrancar desde ese dispositivo (a través de los datos de MBR). Si puede, lo hace; si no, continúa recorriendo los otros dispositivos (nuevamente, en el orden que seleccionó).

Después de que el BIOS transfirió el control al gestor de arranque en la unidad n. ° 1 que no tenía particiones "de arranque", ¿cómo se invoca exactamente el gestor de arranque en la segunda unidad?

Una vez que se encuentra un dispositivo de arranque válido (es decir, se establece el indicador de arranque y se pasan otras comprobaciones adicionales), el BIOS copia el sector MBR en la RAM. El BIOS luego reubica el puntero de instrucción al comienzo de esta ubicación (usando una JUMPinstrucción), donde se encuentra el segmento de código MBR, y luego la computadora se inicia.

Si el BIOS es compatible con la especificación de arranque del BIOS , el código MBR puede devolver el control al BIOS con una determinada instrucción, señalándolo de falla de arranque y pidiéndole que pruebe el siguiente dispositivo. Sin embargo, las BIOS más antiguas solo imprimen un mensaje de error. Un buen indicador si su BIOS lo admite es si puede arrancar desde USB.

Tengo entendido que lo único que el BIOS normalmente verifica en un MBR es su firma al final del sector de 512 bytes, y luego simplemente transfiere el control al gestor de arranque inicial ubicado en los primeros 446 bytes del sector de arranque.

Esto es correcto, aunque debe tenerse en cuenta que la mayoría de las BIOS modernas también buscarán una tabla de particiones GUID, así como la tabla de estilo MBR convencional más antigua.

¿Implica que los primeros 446 bytes del sector de arranque DEBEN contener algún código de gestor de arranque significativo incluso si el disco no es de arranque?

No , pero la unidad debe tener una tabla de particiones MBR o GUID válida; de lo contrario, la computadora no la detectará. Si bien la parte del código del MBR puede estar vacía, el primer sector de la unidad debe tener un MBR / GPT bien formado.

Penetración
fuente
Gracias por la respuesta muy detallada. Entonces, ¿el criterio para un dispositivo de arranque válido es la presencia de una partición de arranque en la tabla de particiones y algunas "otras verificaciones adicionales"? Estoy un poco confundido porque en la pregunta original en AskUbuntu, el autor muestra que todas las particiones en el disco no son arrancables y aún ve el error causado por GRUB roto, que no debería haber sido invocado por BIOS en absoluto porque la unidad no cumple con los criterios de "arranque", por lo que BIOS debería haber omitido la unidad y pasar a la siguiente
Sergey,
@Sergey Miré esa pregunta y no estoy seguro. Es posible que el MBR esté dañado o que el indicador de inicio esté establecido en un valor no válido (no estoy seguro de cómo fdiskmanejará esos casos, aunque la versión original marcó encabezados MBR no válidos). Aconsejé al OP que publique el encabezado MBR sin procesar, pero también puede querer "activar" o desactivar el indicador de arranque (para configurar / restablecer el indicador manualmente).
Avance
Tenga en cuenta que el código del BIOS no es genérico. Es bastante específico para cada placa base, por lo que sabe qué tipo de unidades pueden estar conectadas a qué puertos.
LatinSuD
Esta respuesta no es del todo correcta. FWIU, la comprobación de una partición activa y demás es algo que hace el código de arranque MBR "predeterminado", no el BIOS. NeoSmart presenta una descripción más plausible: “En las PC compatibles con IBM (básicamente, todo) los dos bytes finales del MBR de 512 bytes se denominan firma de arranque y el BIOS los utiliza para determinar si la unidad de arranque seleccionada es realmente arrancable o no." La última parte es simplemente incorrecta. El BIOS heredado puede arrancar desde GPT (con el código de arranque del BIOS apropiado), porque es esencialmente un arranque de "estilo libre".
Daniel B
@DanielB ambas cosas se abordan directamente en la respuesta: "El BIOS normalmente verifica que un MBR sea su firma al final del sector de 512 bytes, y luego simplemente transfiere el control al gestor de arranque inicial ubicado en los primeros 446 bytes del sector de arranque " y " las BIOS más modernas también buscarán una tabla de particiones GUID, así como la tabla de estilo MBR convencional más antigua " .
Avance el