Un registro de arranque maestro ( MBR ) es un tipo de sector de arranque en los primeros bloques de dispositivos de almacenamiento masivo de computadoras particionadas, como discos fijos o unidades extraíbles, destinados a su uso con sistemas compatibles con PC IBM y más. El concepto de MBR se introdujo públicamente en 1983 con PC DOS 2.0 .
El MBR contiene información sobre cómo los sectores del disco (también conocidos como "bloques") se dividen en particiones, cada partición contiene teóricamente un sistema de archivos. El MBR también contiene código ejecutable que funciona como un cargador para el sistema operativo instalado, generalmente pasando el control a la segunda etapa del cargador o junto con el registro de inicio de volumen (VBR) de cada partición. Este código MBR generalmente se denomina cargador de arranque.
La organización de la tabla de particiones en el MBR limita el espacio de almacenamiento máximo direccionable de un disco particionado a 2 TiB (2 32 × 512 bytes) . [1] Los enfoques para aumentar ligeramente este límite utilizando aritmética de 32 bits o sectores de 4096 bytes no son oficialmente compatibles, ya que rompen fatalmente la compatibilidad con los cargadores de arranque existentes, la mayoría de los sistemas operativos compatibles con MBR y las herramientas del sistema asociadas, y pueden causar daños graves. corrupción cuando se utiliza fuera de entornos de sistemas estrechamente controlados. Por lo tanto, el esquema de partición basado en MBR está en proceso de ser reemplazado por el esquema de tabla de particiones GUID (GPT) en las computadoras nuevas. Un GPT puede coexistir con un MBR para proporcionar alguna forma limitada de compatibilidad con versiones anteriores para sistemas más antiguos.
Los MBR no están presentes en medios no particionados como disquetes , superfloppies u otros dispositivos de almacenamiento configurados para comportarse como tales, ni están necesariamente presentes en unidades utilizadas en plataformas que no sean PC.
La compatibilidad con medios particionados y, por tanto, con el registro de arranque maestro (MBR), se introdujo con IBM PC DOS 2.0 en marzo de 1983 para admitir el disco duro de 10 MB de la entonces nueva IBM Personal Computer XT , que todavía utiliza el sistema de archivos FAT12. . La versión original del MBR fue escrita por David Litton de IBM en junio de 1982. La tabla de particiones admitía hasta cuatro particiones primarias . Esto no cambió cuando se introdujo FAT16 como un nuevo sistema de archivos con DOS 3.0. Con DOS 3.2 se agregó soporte para una partición extendida , un tipo de partición primaria especial que se utiliza como contenedor para contener otras particiones, y con DOS 3.30 se incluyeron unidades lógicas anidadas dentro de una partición extendida. Dado que MS-DOS, PC DOS, OS/2 y Windows nunca estuvieron habilitados para arrancar desde ellos, el formato MBR y el código de arranque permanecieron casi sin cambios en funcionalidad (excepto algunas implementaciones de terceros) a lo largo de las eras de DOS y OS/2 hasta a 1996.
En 1996, se introdujo la compatibilidad con el direccionamiento de bloques lógicos (LBA) en Windows 95B y MS-DOS 7.10 (que no debe confundirse con IBM PC-DOS 7.1) para admitir discos de más de 8 GB. También se introdujeron marcas de tiempo de disco . [2] Esto también refleja la idea de que el MBR debe ser independiente del sistema operativo y del sistema de archivos. Sin embargo, esta regla de diseño se vio parcialmente comprometida en implementaciones más recientes de Microsoft del MBR, que imponen el acceso CHS para los tipos de partición FAT16B y FAT32 0x06 / 0x0B , mientras que LBA se usa para 0x0E / 0x0C .
A pesar de la documentación a veces deficiente de ciertos detalles intrínsecos del formato MBR (que ocasionalmente causaba problemas de compatibilidad), ha sido ampliamente adoptado como un estándar industrial de facto, debido a la gran popularidad de las computadoras compatibles con PC y su naturaleza semiestática durante décadas. . Esto llegó incluso al punto de ser compatible con sistemas operativos informáticos para otras plataformas. A veces, esto se sumaba a otros estándares preexistentes o multiplataforma para arranque y partición. [3]
Sin embargo, las entradas de la partición MBR y el código de arranque MBR utilizados en los sistemas operativos comerciales están limitados a 32 bits. [1] Por lo tanto, el tamaño máximo de disco admitido en discos que utilizan sectores de 512 bytes (ya sean reales o emulados) por el esquema de partición MBR (sin aritmética de 32 bits) está limitado a 2 TiB. [1] En consecuencia, se debe utilizar un esquema de partición diferente para discos más grandes, ya que están ampliamente disponibles desde 2010. Por lo tanto, el esquema de partición MBR está en proceso de ser reemplazado por la tabla de particiones GUID (GPT). El enfoque oficial hace poco más que garantizar la integridad de los datos mediante el empleo de un MBR protector . Específicamente, no proporciona compatibilidad con sistemas operativos que tampoco admiten el esquema GPT. Mientras tanto, terceros han diseñado e implementado múltiples formas de MBR híbridos para mantener las particiones ubicadas en los primeros 2 TiB físicos de un disco en ambos esquemas de partición "en paralelo" y/o para permitir que los sistemas operativos más antiguos arranquen desde GPT. particiones también. La actual naturaleza no estándar de estas soluciones provoca varios problemas de compatibilidad en determinados escenarios.
El MBR consta de 512 o más bytes ubicados en el primer sector de la unidad.
Puede contener uno o más de:
IBM PC DOS 2.0 introdujo la FDISK
utilidad para configurar y mantener particiones MBR. Cuando un dispositivo de almacenamiento ha sido particionado según este esquema, su MBR contiene una tabla de particiones que describe las ubicaciones, tamaños y otros atributos de las regiones lineales denominadas particiones.
Las propias particiones también pueden contener datos para describir esquemas de partición más complejos, como registros de arranque extendidos (EBR), etiquetas de disco BSD o particiones de metadatos del Administrador de discos lógicos . [8]
El MBR no está ubicado en una partición; está ubicado en un primer sector del dispositivo (desplazamiento físico 0), que precede a la primera partición. (El sector de arranque presente en un dispositivo no particionado o dentro de una partición individual se denomina registro de arranque de volumen ). En los casos en que la computadora ejecuta una superposición de BIOS DDO o un administrador de arranque , la tabla de particiones se puede mover a algún otro lugar físico. ubicación en el dispositivo; por ejemplo, Ontrack Disk Manager a menudo colocaba una copia del contenido original del MBR en el segundo sector y luego se ocultaba de cualquier sistema operativo o aplicación que se iniciara posteriormente, por lo que la copia del MBR se trataba como si todavía residiera en el primer sector.
Por convención, hay exactamente cuatro entradas de la tabla de particiones primarias en el esquema de la tabla de particiones MBR, aunque algunos sistemas operativos y herramientas del sistema ampliaron esto a cinco (Particiones activas avanzadas (AAP) con PTS-DOS 6.60 [9] y DR-DOS 7.07) , ocho ( AST y NEC MS-DOS 3.x [10] [11] así como Storage Dimensions SpeedStor), o incluso dieciséis entradas (con Ontrack Disk Manager ).
Un artefacto de la tecnología de disco duro de la era de la PC XT , la tabla de particiones subdivide un medio de almacenamiento utilizando unidades de cilindros , cabezales y sectores ( direccionamiento CHS ). Estos valores ya no se corresponden con sus homónimos en las unidades de disco modernas, además de ser irrelevantes en otros dispositivos como las unidades de estado sólido , que no tienen físicamente cilindros ni cabezas.
En el esquema CHS, los índices sectoriales (casi) siempre han comenzado con el sector 1 en lugar del sector 0 por convención, y debido a un error en todas las versiones de MS-DOS/PC DOS hasta la 7.10 incluida, el número de cabezas es generalmente limitado. a 255 [h] en lugar de 256. Cuando una dirección CHS es demasiado grande para caber en estos campos, la tupla (1023, 254, 63) se usa normalmente hoy en día, aunque en sistemas más antiguos y con herramientas de disco más antiguas, el valor del cilindro a menudo envuelven el módulo de la barrera CHS cerca de 8 GB, causando ambigüedad y riesgos de corrupción de datos. (Si la situación implica un MBR "protector" en un disco con un GPT, la especificación de la interfaz de firmware extensible de Intel requiere que se utilice la tupla (1023, 255, 63).) El valor del cilindro de 10 bits se registra en dos bytes en orden para facilitar la realización de llamadas a las rutinas de acceso al disco BIOS INT 13h originales/heredadas , donde 16 bits se dividían en partes de sector y cilindro, y no en límites de bytes. [13]
Debido a los límites del direccionamiento CHS, [16] [17] se realizó una transición al uso de LBA o direccionamiento de bloques lógicos . Tanto la longitud de la partición como la dirección de inicio de la partición son valores de sector almacenados en las entradas de la tabla de particiones como cantidades de 32 bits. El tamaño del sector solía considerarse fijo en 512 (2,9 ) bytes, y una amplia gama de componentes importantes, incluidos conjuntos de chips , sectores de arranque , sistemas operativos , motores de bases de datos , herramientas de partición , utilidades de sistemas de archivos y copias de seguridad y otro software, tenían este valor. -codificado. Desde finales de 2009, han estado disponibles unidades de disco que emplean sectores de 4096 bytes ( 4Kn o formato avanzado ), aunque el tamaño del sector para algunas de estas unidades todavía se informaba como 512 bytes al sistema host mediante conversión en el disco duro. firmware de la unidad y se denominan unidades de emulación 512 ( 512e ).
Dado que las direcciones y tamaños de los bloques se almacenan en la tabla de particiones de un MBR usando 32 bits, el tamaño máximo, así como la dirección de inicio más alta, de una partición que usa unidades que tienen sectores de 512 bytes (reales o emulados) no puede exceder los 2 TiB. −512 bytes (2 199 023 255 040 bytes o4 294 967 295 (2 32 −1) sectores × 512 (2 9 ) bytes por sector). [1] Aliviar esta limitación de capacidad fue una de las principales motivaciones para el desarrollo del GPT.
Dado que la información de partición se almacena en la tabla de particiones MBR utilizando una dirección de bloque inicial y una longitud, en teoría puede ser posible definir particiones de tal manera que el espacio asignado para un disco con sectores de 512 bytes proporcione un tamaño total cercano a 4 TiB, si todas las particiones menos una están ubicadas por debajo del límite de 2 TiB y la última se asigna comenzando en o cerca del bloque 2 32 −1 y especifica el tamaño como hasta 2 32 −1, definiendo así una partición que requiere 33 en lugar de 32 bits para la dirección del sector al que se accederá. Sin embargo, en la práctica, sólo ciertos sistemas operativos compatibles con LBA-48 , incluidos Linux, FreeBSD y Windows 7 [18] que utilizan direcciones de sector de 64 bits internamente, realmente admiten esto. Debido a las limitaciones de espacio de código y a la naturaleza de la tabla de particiones MBR de solo admitir 32 bits, los sectores de arranque, incluso si están habilitados para admitir LBA-48 en lugar de LBA-28 , a menudo usan cálculos de 32 bits, a menos que estén diseñados específicamente para admitir el rango completo de direcciones de LBA-48 o están diseñados para ejecutarse únicamente en plataformas de 64 bits. Cualquier código de arranque o sistema operativo que utilice direcciones de sectores de 32 bits internamente provocaría que las direcciones se enreden al acceder a esta partición y, por lo tanto, provocaría una corrupción grave de los datos en todas las particiones.
Para los discos que presentan un tamaño de sector distinto de 512 bytes, como las unidades externas USB , también existen limitaciones. Un tamaño de sector de 4096 da como resultado un aumento de ocho veces en el tamaño de una partición que se puede definir usando MBR, lo que permite particiones de hasta 16 TiB (2 32 × 4096 bytes) de tamaño. [19] Las versiones de Windows más recientes que Windows XP admiten sectores de mayor tamaño, así como Mac OS X, y Linux ha admitido sectores de mayor tamaño desde 2.6.31 [20] o 2.6.32, [21] pero hay problemas con el arranque. Los cargadores, las herramientas de partición y las implementaciones de BIOS de computadora presentan ciertas limitaciones, [22] ya que a menudo están programados para reservar solo 512 bytes para buffers de sector, lo que hace que la memoria se sobrescriba para sectores de mayor tamaño. Esto también puede causar un comportamiento impredecible y, por lo tanto, debe evitarse cuando la compatibilidad y la conformidad con los estándares son un problema.
Cuando un dispositivo de almacenamiento de datos ha sido particionado con el esquema GPT, el registro de arranque maestro aún contendrá una tabla de particiones, pero su único propósito es indicar la existencia de GPT y evitar que programas de utilidad que solo entienden el esquema de la tabla de particiones MBR creando particiones en lo que de otro modo verían como espacio libre en el disco, borrando así accidentalmente el GPT.
En las computadoras compatibles con IBM PC , el firmware de arranque (contenido en la ROM BIOS ) carga y ejecuta el registro de arranque maestro. [23] El PC/XT (tipo 5160) utilizaba un microprocesador Intel 8088 . Para seguir siendo compatibles, todos los sistemas con arquitectura BIOS x86 comienzan con el microprocesador en un modo operativo denominado modo real . El BIOS lee el MBR del dispositivo de almacenamiento en la memoria física y luego dirige el microprocesador al inicio del código de arranque. El BIOS cambiará el procesador al modo real y luego comenzará a ejecutar el programa MBR, por lo que se espera que el comienzo del MBR contenga código de máquina en modo real . [23]
Dado que la rutina de arranque del BIOS carga y ejecuta exactamente un sector del disco físico, tener la tabla de particiones en el MBR con el código de arranque simplifica el diseño del programa MBR. Contiene un pequeño programa que carga el registro de arranque por volumen (VBR) de la partición de destino. Luego, el control se pasa a este código, que es responsable de cargar el sistema operativo real. Este proceso se conoce como carga en cadena .
Se crearon programas de código MBR populares para arrancar PC DOS y MS-DOS , y códigos de arranque similares siguen siendo de uso generalizado. Estos sectores de arranque esperan que el FDISK
esquema de la tabla de particiones esté en uso y escanean la lista de particiones en la tabla de particiones integrada del MBR para encontrar la única que está marcada con el indicador activo . [24] Luego carga y ejecuta el registro de inicio de volumen (VBR) de la partición activa.
Existen implementaciones de códigos de arranque alternativas, algunas de las cuales son instaladas por administradores de arranque , que funcionan de diversas formas. Algunos códigos MBR cargan código adicional para un administrador de arranque desde la primera pista del disco, que se supone que es espacio "libre" que no está asignado a ninguna partición del disco, y lo ejecuta. Un programa MBR puede interactuar con el usuario para determinar qué partición en qué unidad debe iniciarse y puede transferir el control al MBR de una unidad diferente. Otro código MBR contiene una lista de ubicaciones de disco (a menudo correspondientes al contenido de los archivos en un sistema de archivos ) del resto del código del administrador de arranque para cargar y ejecutar. (El primero se basa en un comportamiento que no es universal en todas las utilidades de partición de discos, especialmente aquellas que leen y escriben GPT. El último requiere que la lista integrada de ubicaciones de discos se actualice cuando se realicen cambios que reubicarían el resto del código. )
En máquinas que no usan procesadores x86 , o en máquinas x86 con firmware que no es BIOS, como firmware abierto o firmware de interfaz de firmware extensible (EFI), este diseño no es adecuado y el MBR no se usa como parte del arranque del sistema. [25] En cambio, el firmware EFI es capaz de comprender directamente el esquema de partición GPT y el formato del sistema de archivos FAT , y carga y ejecuta programas contenidos como archivos en la partición del sistema EFI . [26] El MBR participará sólo en la medida en que pueda contener una tabla de particiones por motivos de compatibilidad si se ha utilizado el esquema de tabla de particiones GPT.
Hay un código de reemplazo de MBR que emula el arranque del firmware EFI, lo que hace que las máquinas que no son EFI sean capaces de arrancar desde discos usando el esquema de partición GPT. Detecta un GPT, coloca el procesador en el modo de funcionamiento correcto y carga el código compatible con EFI desde el disco para completar esta tarea.
Además del código de arranque y una tabla de particiones, los registros de arranque maestros pueden contener una firma de disco. Se trata de un valor de 32 bits cuyo objetivo es identificar de forma exclusiva el medio del disco (a diferencia de la unidad de disco; los dos no son necesariamente iguales para los discos duros extraíbles).
La firma del disco fue introducida por Windows NT versión 3.5, pero ahora la utilizan varios sistemas operativos, incluido el kernel de Linux versión 2.6 y posteriores. Las herramientas de Linux pueden usar la firma del disco NT para determinar desde qué disco arrancó la máquina. [27]
Windows NT (y los sistemas operativos posteriores de Microsoft) utiliza la firma del disco como índice de todas las particiones de cualquier disco conectado a la computadora con ese sistema operativo; Estas firmas se guardan en las claves del Registro de Windows , principalmente para almacenar las asignaciones persistentes entre particiones de disco y letras de unidad. También se puede utilizar en archivos BOOT.INI de Windows NT (aunque la mayoría no lo hace), para describir la ubicación de las particiones de arranque de Windows NT (o posteriores). [28] Una clave (entre muchas), donde aparecen firmas de discos NT en un registro de Windows 2000/XP, es:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\
Si la firma de un disco almacenada en el MBR fuera A8 E1 B9 D2 (en ese orden) y su primera partición correspondiera con la unidad lógica C: en Windows, entonces los datos bajo el valor de la clave serían:REG_BINARY
\DosDevices\C:
A8 E1 B9 D2 00 7E 00 00 00 00 00 00
Los primeros cuatro bytes se denominan firma del disco. (En otras claves, estos bytes pueden aparecer en orden inverso al que se encuentra en el sector MBR). Les siguen ocho bytes más, que forman un entero de 64 bits, en notación little-endian , que se utilizan para ubicar el desplazamiento de bytes. de esta partición. En este caso, 00 7E corresponde al valor hexadecimal 0x7E00 (32.256 ). Suponiendo que la unidad en cuestión informa un tamaño de sector de 512 bytes, dividir este byte compensado por 512 da como resultado 63, que es el número de sector físico (o LBA) que contiene el primer sector de la partición (a diferencia del recuento de sectores utilizado en el valor de los sectores de las tuplas CHS, que cuenta desde uno , el valor del sector absoluto o LBA comienza a contar desde cero ).
Si este disco tuviera otra partición con los valores 00 F8 93 71 02 después de la firma del disco (bajo, por ejemplo, el valor clave ), comenzaría en el desplazamiento de bytes 0x00027193F800 (\DosDevices\D:
10,495,457,280 ), que también es el primer byte del sector físico20.498.940 .
A partir de Windows Vista , la firma del disco también se almacena en el almacén de datos de configuración de arranque (BCD) y el proceso de arranque depende de ello. [29] Si la firma del disco cambia, no se puede encontrar o tiene un conflicto, Windows no puede iniciar. [30] A menos que Windows se vea obligado a utilizar la parte superpuesta de la dirección LBA de la entrada de Partición activa avanzada como firma de pseudodisco, el uso de Windows entra en conflicto con la función Partición activa avanzada de PTS-DOS 7 y DR-DOS 7.07. en particular si su código de arranque se encuentra fuera de los primeros 8 GB del disco, por lo que se debe utilizar el direccionamiento LBA.
El MBR se originó en la PC XT . [31] Las computadoras compatibles con IBM PC son little-endian , lo que significa que el procesador almacena valores numéricos que abarcan dos o más bytes en la memoria, primero el byte menos significativo . El formato del MBR en medios refleja esta convención. Por lo tanto, la firma MBR aparecerá en un editor de disco como la secuencia 55 AA
. [a]
La secuencia de arranque en el BIOS cargará el primer MBR válido que encuentre en la memoria física de la computadora en la dirección 0x0000 : 0x7C00 . [31] La última instrucción ejecutada en el código BIOS será un "salto" a esa dirección para dirigir la ejecución al comienzo de la copia del MBR. La validación principal para la mayoría de los BIOS es la firma en el desplazamiento 0x01FE , aunque un implementador del BIOS puede optar por incluir otras comprobaciones, como verificar que el MBR contenga una tabla de particiones válida sin entradas que hagan referencia a sectores más allá de la capacidad informada del disco.
Para el BIOS, los discos extraíbles (por ejemplo, disquetes) y fijos son esencialmente lo mismo. Para cualquiera de los dos, el BIOS lee el primer sector físico del medio en la RAM en la dirección absoluta 0x7C00 , verifica la firma en los dos últimos bytes del sector cargado y luego, si se encuentra la firma correcta, transfiere el control al primer byte de el sector con una instrucción de salto (JMP). La única distinción real que hace el BIOS es que (de forma predeterminada, o si el orden de inicio no es configurable) intenta iniciar desde el primer disco extraíble antes de intentar iniciar desde el primer disco fijo. Desde la perspectiva del BIOS, la acción del MBR al cargar un registro de inicio de volumen en la RAM es exactamente la misma que la acción de un registro de inicio de volumen de un disquete al cargar el código objeto de un cargador de sistema operativo en la RAM. En cualquier caso, el programa que cargó el BIOS realiza el trabajo de cargar en cadena un sistema operativo.
Mientras que el código del sector de arranque MBR espera cargarse en la dirección física 0x0000 : 0x7C00 , [i] toda la memoria desde la dirección física 0x0000 : 0x0501 (la dirección 0x0000 : 0x0500 es la última utilizada por un BIOS Phoenix) [13] a 0x0000 : 0x7FFF , [31] luego se relajó a 0x0000 : 0xFFFF [32] (y a veces [j] hasta 0x9000 : 0xFFFF )—el final de los primeros 640 KB —está disponible en modo real. [k] La llamada de interrupción del BIOS puede ayudar a determinar cuánta memoria se puede asignar de forma segura (de forma predeterminada, simplemente lee el tamaño de la memoria base en KB del segmento :ubicación de desplazamiento 0x0040 : 0x0013 , pero puede estar enganchado por otros pre-residentes). software de arranque como superposiciones de BIOS, código RPL o virus para reducir la cantidad reportada de memoria disponible para evitar que otro software de etapa de arranque, como sectores de arranque, los sobrescriba).INT 12h
Los últimos 66 bytes del MBR de 512 bytes están reservados para la tabla de particiones y otra información, por lo que el programa del sector de arranque del MBR debe ser lo suficientemente pequeño como para caber en 446 bytes de memoria o menos.
El código MBR examina la tabla de particiones, selecciona una partición adecuada y carga el programa que realizará la siguiente etapa del proceso de arranque, generalmente haciendo uso de llamadas INT 13h BIOS . El código de arranque del MBR carga y ejecuta (un cargador de arranque o dependiente del sistema operativo) un código de registro de arranque de volumen que se encuentra al principio de la partición "activa". El registro de arranque del volumen cabe dentro de un sector de 512 bytes, pero es seguro que el código MBR cargue sectores adicionales para acomodar cargadores de arranque de más de un sector, siempre que no hagan suposiciones sobre cuál es el tamaño del sector. De hecho, al menos 1 KB de RAM está disponible en la dirección 0x7C00 en cada máquina IBM XT y AT, por lo que un sector de 1 KB podría usarse sin problemas. Al igual que el MBR, normalmente se espera que un registro de inicio de volumen se cargue en la dirección 0x0000 : 0x7C00 . Esto se debe al hecho de que el diseño del registro de inicio del volumen se originó en medios no particionados, donde el procedimiento de inicio del BIOS cargaría directamente un registro de inicio del volumen; Como se mencionó anteriormente, el BIOS trata los MBR y los registros de arranque por volumen (VBR) [l] exactamente igual. Dado que esta es la misma ubicación donde se carga el MBR, una de las primeras tareas de un MBR es reubicarse en otro lugar de la memoria. La dirección de reubicación está determinada por el MBR, pero normalmente es 0x0000 : 0x0600 (para código MBR de MS-DOS/PC DOS, OS/2 y Windows) o 0x0060 : 0x0000 (la mayoría de los MBR de DR-DOS). (Aunque ambas direcciones segmentadas se resuelven en la misma dirección de memoria física en modo real, para que Apple Darwin arranque, el MBR debe reubicarse en 0x0000 : 0x0600 en lugar de 0x0060 : 0x0000 , ya que el código depende del puntero DS:SI a la entrada de partición proporcionada por el MBR, pero se refiere erróneamente a ella a través de 0x0000 :SI [33] ) Es importante no reubicarse en otras direcciones en la memoria porque muchos VBR asumirán un cierto diseño de memoria estándar al cargar su arranque. archivo.
El campo Estado en un registro de la tabla de particiones se utiliza para indicar una partición activa. Los MBR que cumplen con el estándar permitirán solo una partición marcada como activa y la usarán como parte de una verificación de idoneidad para determinar la existencia de una tabla de particiones válida. Mostrarán un mensaje de error si más de una partición se ha marcado como activa. Algunos MBR no estándar no tratarán esto como una condición de error y simplemente usarán la primera partición marcada en la fila.
Tradicionalmente, los valores distintos de 0x00 (no activo) y 0x80 (activo) no eran válidos y el programa de arranque mostraba un mensaje de error al encontrarlos. Sin embargo, la especificación de BIOS Plug and Play y la especificación de arranque de BIOS (BBS) permitieron que otros dispositivos también pudieran iniciarse desde 1994. [32] [34] En consecuencia, con la introducción de MS-DOS 7.10 (Windows 95B) y superior, el MBR comenzó a tratar un bit 7 establecido como indicador activo y mostró un mensaje de error solo para los valores 0x01 ... 0x7F . Continuó tratando la entrada como una unidad de disco física que se usará al cargar el VBR de la partición correspondiente más adelante, por lo que ahora también acepta como válidas otras unidades de arranque distintas de 0x80 ; sin embargo, MS-DOS no hizo uso de esta extensión por sí solo. Almacenar el número de unidad física real en la tabla de particiones normalmente no causa problemas de compatibilidad con versiones anteriores, ya que el valor diferirá de 0x80 solo en unidades distintas a la primera (que de todos modos no han sido arrancables antes). Sin embargo, incluso con sistemas habilitados para arrancar desde otras unidades, es posible que la extensión aún no funcione universalmente, por ejemplo, después de que la asignación del BIOS de las unidades físicas haya cambiado cuando se extraen, agregan o intercambian unidades. Por lo tanto, según la Especificación de arranque del BIOS (BBS), [32] es una buena práctica que un MBR moderno que acepte el bit 7 como indicador activo pase el valor DL proporcionado originalmente por el BIOS en lugar de usar la entrada en la tabla de particiones.
El MBR se carga en la ubicación de memoria 0x0000 : 0x7C00 y con los siguientes registros de CPU configurados cuando el cargador de arranque anterior (normalmente la IPL en el BIOS) le pasa la ejecución saltando a 0x0000 : 0x7C00 en el modo real de la CPU .
Los sistemas con compatibilidad Plug-and-Play BIOS o BBS proporcionarán un puntero a los datos PnP además de DL: [32] [34]
$PnP
" estructura de verificación de instalaciónPor convención, un MBR conforme al estándar pasa la ejecución a un VBR cargado exitosamente, cargado en la ubicación de memoria 0x0000 : 0x7C00 , saltando a 0x0000 : 0x7C00 en el modo real de la CPU con los siguientes registros mantenidos o configurados específicamente:
0x000C
0x019
0x01FD
) en los VBR cargados antes de pasarles la ejecución (consulte Desplazamiento de NEWLDR 0x0014
). Esto también permite que otros cargadores de arranque utilicen NEWLDR como cargador de cadena, configuren su imagen en memoria sobre la marcha y "canalicen" la carga de VBR, EBR, o AAP a través de NEWLDR.El código MBR pasa información adicional al VBR en muchas implementaciones:
boot1h
, boot1u
y David Elliott boot1fat32
) también dependen de este puntero, pero además no usan DS, sino que asumen que está configurado en 0x0000 . [33] Esto causará problemas si esta suposición es incorrecta. El código MBR de OS/2, MS-DOS 2.0 a 8.0, PC DOS 2.0 a 7.10 y Windows NT/2000/XP también proporciona esta misma interfaz, aunque estos sistemas no la utilizan. Los MBR de Windows Vista/7 ya no proporcionan este puntero DS:SI. Si bien algunas extensiones solo dependen de la entrada de la tabla de particiones de 16 bytes, otras extensiones pueden requerir que también esté presente la tabla de particiones completa de 4 (o 5 entradas).En DR-DOS 7.07, el MBR extendido puede proporcionar opcionalmente una interfaz extendida y junto con LOADER:
Junto con GPT, una propuesta de MBR híbrido de especificación de unidad de disco mejorada (EDD) 4 recomienda otra extensión de la interfaz: [37]
!GPT
$PnP
" estructura de verificación de instalación (ver arriba)Aunque es posible manipular los bytes en el sector MBR directamente usando varios editores de disco , existen herramientas para escribir conjuntos fijos de código funcional en el MBR. Desde MS-DOS 5.0, el programa FDISK
ha incluido el modificador /MBR
, que reescribirá el código MBR. [38] En Windows 2000 y Windows XP , la Consola de recuperación se puede usar para escribir nuevo código MBR en un dispositivo de almacenamiento usando su fixmbr
comando. En Windows Vista y Windows 7 , el entorno de recuperación se puede utilizar para escribir nuevo código MBR mediante el BOOTREC /FIXMBR
comando. También se pueden utilizar algunas utilidades de terceros para editar directamente el contenido de las tablas de particiones (sin necesidad de conocimientos de editores hexadecimales o de disco/sector), como MBRWizard . [o]
dd
es un comando POSIX comúnmente utilizado para leer o escribir cualquier ubicación en un dispositivo de almacenamiento, incluido MBR. En Linux , se puede utilizar ms-sys para instalar un MBR de Windows. Los proyectos GRUB y LILO tienen herramientas para escribir código en el sector MBR, concretamente grub-install
y lilo -mbr
. La consola interactiva GRUB Legacy puede escribir en el MBR mediante los comandos setup
y embed
, pero actualmente GRUB2 requiere grub-install
ejecutarse desde un sistema operativo.
Varios programas pueden crear una " copia de seguridad " tanto de la tabla de particiones primaria como de las particiones lógicas en la partición extendida.
Linux sfdisk
(en un SystemRescueCD ) puede guardar una copia de seguridad de la tabla de particiones primaria y extendida. Crea un archivo que se puede leer en un editor de texto, o sfdisk puede usar este archivo para restaurar la tabla de particiones primaria/extendida. Un comando de ejemplo para hacer una copia de seguridad de la tabla de particiones es sfdisk -d /dev/hda > hda.out
y restaurar es sfdisk /dev/hda < hda.out
. Es posible copiar la tabla de particiones de un disco a otro de esta manera, lo cual es útil para configurar la duplicación, pero sfdisk ejecuta el comando sin solicitudes ni advertencias usando sfdisk -d /dev/sda | sfdisk /dev/sdb
. [39]
55hex AAhex
AAhex
AA55hex
55AAhex
00 00 00 00 00 00hex
0000hex
7C00hex
A0000hex
0000hex
7FFFhex
0000hex
FFFFhex
Cada sistema operativo incluye herramientas para administrar particiones MBR. Desafortunadamente, cada sistema operativo maneja las particiones MBR de una manera ligeramente diferente.
Matthias [R.] Paul escribe: "[…]
PTS-DOS
[usa] una quinta entrada de partición especial delante de las otras cuatro entradas en el MBR y el correspondiente código de arranque del MBR compatible con AAP. […]"
Algunos sistemas OEM, como AST DOS (tipo
) y NEC DOS (tipo
) tenían 8 en lugar de 4 entradas de partición en sus sectores MBR. (Matías R. Pablo).
(NB. Las tablas de particiones NEC MS-DOS 3.30 y AST MS-DOS con ocho entradas están precedidas por una firma en el desplazamiento 0x017C ).14hex
24hex
A55Ahex
Cuando agregamos particiones a esta tabla NEC, la primera se colocó en los desplazamientos
0x01EE
a
0x01FD
y la siguiente entrada se agregó justo encima. Por lo tanto, las entradas se insertan y enumeran al revés de las de una tabla normal. Por lo tanto, al observar dicha tabla con un editor de disco o una utilidad de listado de particiones, mostraría la primera entrada en una tabla de ocho entradas de NEC como la última (cuarta entrada) en una tabla de particiones normal.
(NB. Muestra una tabla de particiones de 8 entradas y dónde su código de inicio difiere de MS-DOS 3.30).
[…] SYS […] /O[:nnn] Anular la unidad de unidad de arranque informada por IPL (n=0..126, 128..254). […] Preparando el disco de destino... Eligiendo el sector de inicio FAT12 CHS (requiere IPL para informar la unidad de inicio). Tratar el destino como un disquete o un medio superfloppy (unidad de disco de arranque 0). Escribiendo un nuevo sector de arranque... […](NB. SYS escribe registros de inicio de volumen en lugar de registros de inicio maestros, pero su interfaz de registro entrante es similar (con extensiones) ya que ambos pueden cargarse inicialmente mediante el sistema subyacente).