Un registro de arranque maestro ( MBR ) es un tipo de sector de arranque en el primer bloque de dispositivos de almacenamiento masivo de computadoras particionadas , como discos fijos o unidades extraíbles, destinados a usarse con sistemas compatibles con IBM PC y superiores. El concepto de MBR se presentó públicamente en 1983 con PC DOS 2.0 .
El MBR contiene la información sobre cómo se dividen los sectores del disco (también conocidos como "bloques") en particiones, cada una de las cuales contiene teóricamente un sistema de archivos. El MBR también contiene código ejecutable que funciona como cargador para el sistema operativo instalado, generalmente transfiriendo el control a la segunda etapa del cargador o en conjunto con el registro de arranque de volumen (VBR) de cada partición. Este código MBR generalmente se conoce como 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 están oficialmente admitidos, 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 de sistema asociadas, y pueden causar una corrupción grave de datos cuando se utilizan fuera de entornos de sistema estrechamente controlados. Por lo tanto, el esquema de particionamiento basado en MBR está en proceso de ser reemplazado por el esquema de tabla de particiones GUID (GPT) en las nuevas computadoras. Una 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 tampoco están necesariamente presentes en unidades utilizadas en plataformas que no sean PC.
El soporte para medios particionados, y por lo tanto el registro de arranque maestro (MBR), se introdujo con IBM PC DOS 2.0 en marzo de 1983 para soportar el disco duro de 10 MB del entonces nuevo IBM Personal Computer XT , que todavía usaba 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. El soporte para una partición extendida , un tipo especial de partición primaria utilizada como contenedor para albergar otras particiones, se agregó con DOS 3.2, y las unidades lógicas anidadas dentro de una partición extendida llegaron con DOS 3.30. Dado que MS-DOS, PC DOS, OS/2 y Windows nunca pudieron 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 1996.
En 1996, se introdujo el soporte para 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 las marcas de tiempo de disco . [2] Esto también reflejó la idea de que el MBR está destinado a ser independiente del sistema operativo y del sistema de archivos. Sin embargo, esta regla de diseño se vio parcialmente comprometida en las 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 utiliza para 0x0E / 0x0C .
A pesar de que a veces no se documentan bien ciertos detalles intrínsecos del formato MBR (lo que ocasionalmente causaba problemas de compatibilidad), se lo ha adoptado ampliamente como un estándar de facto de la industria, debido a la amplia 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 de otras plataformas. A veces, esto se sumaba a otros estándares preexistentes o multiplataforma para el arranque y el particionamiento. [3]
Sin embargo, las entradas de partición MBR y el código de arranque MBR utilizado en 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 se han vuelto 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 no hace mucho más que garantizar la integridad de los datos mediante el empleo de un MBR protector . Específicamente, no proporciona compatibilidad con versiones anteriores de sistemas operativos que no admiten también el esquema GPT. Mientras tanto, terceros han diseñado e implementado múltiples formas de MBR híbridos para mantener particiones ubicadas en los primeros 2 TiB físicos de un disco en ambos esquemas de particionamiento "en paralelo" y/o para permitir que los sistemas operativos más antiguos arranquen también desde particiones GPT. La naturaleza no estándar actual de estas soluciones causa varios problemas de compatibilidad en ciertos 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 los siguientes:
IBM PC DOS 2.0 introdujo la FDISK
utilidad para configurar y mantener particiones MBR. Cuando un dispositivo de almacenamiento se ha particionado según este esquema, su MBR contiene una tabla de particiones que describe las ubicaciones, los tamaños y otros atributos de las regiones lineales denominadas particiones.
Las particiones en sí mismas también pueden contener datos para describir esquemas de particionamiento 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 se encuentra en una partición; se encuentra 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 en cambio registro de arranque de volumen ). En los casos en los que la computadora está ejecutando una superposición de BIOS DDO o un administrador de arranque , la tabla de particiones se puede mover a otra ubicación física en el dispositivo; por ejemplo, Ontrack Disk Manager a menudo colocaba una copia del contenido original del MBR en el segundo sector, 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 en la tabla de partición primaria en el esquema de la tabla de partición MBR, aunque algunos sistemas operativos y herramientas del sistema extendieron 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 ).
La tabla de particiones, un artefacto de la tecnología de discos duros de la era de la PC XT , subdivide un medio de almacenamiento utilizando unidades de cilindros , cabezales y sectores ( direccionamiento CHS ). Estos valores ya no corresponden a 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 físicamente no tienen cilindros ni cabezales.
En el esquema CHS, los índices de sector (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 generalmente está 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 típicamente hoy, aunque en sistemas más antiguos, y con herramientas de disco más antiguas, el valor del cilindro a menudo rodeaba el módulo de la barrera CHS cerca de los 8 GB, lo que causaba 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 Interfaz de Firmware Extensible de Intel requiere que se use la tupla (1023, 255, 63).) El valor del cilindro de 10 bits se registra dentro de dos bytes 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 bloque lógico . 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 chipsets , sectores de arranque , sistemas operativos , motores de base de datos , herramientas de particionamiento , utilidades de respaldo y sistema de archivos y otro software tenían este valor codificado. Desde fines de 2009, las unidades de disco que emplean sectores de 4096 bytes ( 4Kn o formato avanzado ) han estado disponibles, aunque el tamaño del sector para algunas de estas unidades todavía se informaba como 512 bytes al sistema host a través de la conversión en el firmware del disco duro y se denominaban unidades de emulación 512 ( 512e ).
Dado que las direcciones y tamaños de bloque se almacenan en la tabla de particiones de un MBR utilizando 32 bits, el tamaño máximo, así como la dirección de inicio más alta, de una partición que utiliza unidades que tienen sectores de 512 bytes (reales o emulados) no puede superar 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 de GPT.
Dado que la información de particionamiento 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 dé un tamaño total cercano a 4 TiB, si todas las particiones excepto una están ubicadas por debajo del límite de 2 TiB y la última se asigna como 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 acceder a la dirección del sector. Sin embargo, en la práctica, solo ciertos sistemas operativos habilitados para LBA-48 , incluidos Linux, FreeBSD y Windows 7 [18] que usan direcciones de sector de 64 bits internamente realmente admiten esto. Debido a las limitaciones de espacio del código y a la naturaleza de la tabla de particiones MBR, que solo admite 32 bits, los sectores de arranque, incluso si están habilitados para admitir LBA-48 en lugar de LBA-28 , a menudo utilizan cálculos de 32 bits, a menos que estén diseñados específicamente para admitir el rango de direcciones completo de LBA-48 o estén destinados a ejecutarse solo en plataformas de 64 bits. Cualquier código de arranque o sistema operativo que utilice direcciones de sector de 32 bits internamente provocaría que las direcciones se enredaran al acceder a esta partición y, por lo tanto, se produciría una corrupción grave de 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 utilizando 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 tamaños de sector más grandes, así como Mac OS X, y Linux ha admitido tamaños de sector más grandes desde 2.6.31 [20] o 2.6.32, [21] pero los problemas con los cargadores de arranque, las herramientas de partición y las implementaciones de BIOS de la computadora presentan ciertas limitaciones, [22] ya que a menudo están programados para reservar solo 512 bytes para los búferes de sector, lo que hace que la memoria se sobrescriba para tamaños de sector más grandes. 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 la GPT y evitar que los programas de utilidad que solo entienden el esquema de tabla de particiones MBR creen particiones en lo que de otro modo verían como espacio libre en el disco, borrando así accidentalmente la GPT.
En los ordenadores compatibles con IBM PC , el firmware de arranque (contenido en la ROM BIOS ) carga y ejecuta el registro maestro de arranque. [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 desde el dispositivo de almacenamiento en la memoria física y, a continuación, dirige al microprocesador al inicio del código de arranque. El BIOS cambiará el procesador al modo real y, a continuación, 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 Volume Boot Record (VBR) de la partición de destino. Luego, el control se transfiere 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 un código de arranque similar sigue siendo ampliamente utilizado. 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 incorporada del MBR para encontrar la única que está marcada con el indicador activo . [24] Luego carga y ejecuta el registro de arranque de volumen (VBR) de la partición activa.
Existen implementaciones de código de arranque alternativas, algunas de las cuales son instaladas por los gestores de arranque , que funcionan de diversas formas. Algunos códigos MBR cargan código adicional para un gestor de arranque desde la primera pista del disco, que supone que es espacio "libre" que no está asignado a ninguna partición de disco, y lo ejecuta. Un programa MBR puede interactuar con el usuario para determinar qué partición en qué unidad debe arrancar, y puede transferir el control al MBR de una unidad diferente. Otros códigos MBR contienen una lista de ubicaciones de disco (que a menudo corresponden a los contenidos de los archivos en un sistema de archivos ) del resto del código del gestor de arranque que se debe cargar y ejecutar. (El primero se basa en un comportamiento que no es universal en todas las utilidades de particionamiento de discos, sobre todo en las que leen y escriben GPT. El último requiere que la lista integrada de ubicaciones de disco se actualice cuando se realizan cambios que reubicarían el resto del código).
En máquinas que no utilizan procesadores x86 , o en máquinas x86 con firmware que no sea BIOS como el firmware Open Firmware o el firmware Extensible Firmware Interface (EFI), este diseño no es adecuado y el MBR no se utiliza 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 almacenados como archivos en la partición del sistema EFI . [26] El MBR solo se involucrará en la medida en que pueda contener una tabla de particiones para fines de compatibilidad si se ha utilizado el esquema de tabla de particiones GPT.
Existe un código de reemplazo de MBR que emula el arranque del firmware EFI, lo que permite que las máquinas que no son EFI puedan arrancar desde discos utilizando el esquema de particionamiento GPT. Detecta un GPT, coloca el procesador en el modo operativo 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 que tiene como objetivo identificar de forma única el medio del disco (a diferencia de la unidad de disco, que no necesariamente es la misma para los discos duros extraíbles).
La firma de disco fue introducida por la versión 3.5 de Windows NT, pero ahora la utilizan varios sistemas operativos, incluida la versión 2.6 y posteriores del núcleo de Linux . Las herramientas de Linux pueden utilizar la firma de disco de NT para determinar desde qué disco se inició la máquina. [27]
Windows NT (y los sistemas operativos Microsoft posteriores) utilizan la firma del disco como índice de todas las particiones de cualquier disco conectado alguna vez a la computadora bajo ese sistema operativo; estas firmas se guardan en 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 particiones de arranque de Windows NT (o posterior). [28] Una clave (entre muchas), donde aparecen las firmas de disco de NT en un registro de Windows 2000/XP, es:
HKEY_LOCAL_MACHINE\SYSTEM\Dispositivos montados\
Si la firma de un disco almacenada en el MBR era A8 E1 B9 D2 (en ese orden) y su primera partición correspondía 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 son la firma del disco (en otras claves, estos bytes pueden aparecer en orden inverso al que se encuentran en el sector MBR). A continuación, aparecen ocho bytes más, que forman un entero de 64 bits, en notación little-endian , que se utilizan para localizar 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, entonces dividir este desplazamiento de bytes 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 sectores de las tuplas CHS, que cuenta desde uno , el valor de 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 (por ejemplo, debajo del valor de clave ), comenzaría en el desplazamiento de byte 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 ella. [29] Si la firma del disco cambia, no se puede encontrar o tiene un conflicto, Windows no puede arrancar. [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 pseudofirma de disco, el uso de Windows entra en conflicto con la característica de 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 el 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, comenzando con el byte menos significativo . El formato del MBR en los medios refleja esta convención. Por lo tanto, la firma del MBR aparecerá en un editor de discos 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 0x7C00 a 0x7FFF . [31] La última instrucción ejecutada en el código del 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 los discos fijos son esencialmente lo mismo. En ambos casos, 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 encuentra la firma correcta, transfiere el control al primer byte del sector con una instrucción de salto (JMP). La única distinción real que hace el BIOS es que (de manera predeterminada, o si el orden de arranque no es configurable) intenta arrancar desde el primer disco extraíble antes de intentar arrancar desde el primer disco fijo. Desde la perspectiva del BIOS, la acción del MBR de cargar un registro de arranque de volumen en la RAM es exactamente la misma que la acción de un registro de arranque de volumen de disquete de cargar el código objeto de un cargador de sistema operativo en la RAM. En cualquier caso, el programa que el BIOS cargó está realizando el trabajo de cargar en cadena un sistema operativo.
Mientras que el código del sector de arranque MBR espera ser cargado 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] hasta 0x0000 : 0x7FFF , [31] posteriormente relajada 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 manera predeterminada, simplemente lee el tamaño de la memoria base en KB desde el segmento : ubicación de desplazamiento 0x0040 : 0x0013 , pero puede ser interceptada por otro software de prearranque residente como superposiciones de BIOS, código RPL o virus para reducir la cantidad informada 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 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 MBR carga y ejecuta un código de registro de arranque de volumen (dependiente del cargador de arranque o del sistema operativo) que se encuentra al principio de la partición "activa". El registro de arranque de volumen cabe en un sector de 512 bytes, pero es seguro que el código MBR cargue sectores adicionales para acomodar cargadores de arranque más largos que 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 se podría usar un sector de 1 KB sin problemas. Al igual que el MBR, un registro de arranque de volumen normalmente espera cargarse en la dirección 0x0000 : 0x7C00 . Esto se debe a que el diseño del registro de arranque de volumen se originó en medios no particionados, donde el procedimiento de arranque del BIOS cargaría directamente un registro de arranque de volumen; como se mencionó anteriormente, el BIOS trata a los MBR y a los registros de arranque de volumen (VBR) [l] exactamente de la misma manera. 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 la mayoría de las veces es 0x0000 : 0x0600 (para MS-DOS/PC DOS, OS/2 y código MBR de 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 erróneamente se refiere a él solo 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 archivo de arranque.
El campo Estado de un registro de tabla de particiones se utiliza para indicar una partición activa. Los MBR que cumplen con los estándares solo permiten una partición marcada como activa y la utilizan como parte de una comprobación de integridad para determinar la existencia de una tabla de particiones válida. Mostrarán un mensaje de error si se ha marcado como activa más de una partición. Algunos MBR no estándar no tratarán esto como una condición de error y solo utilizará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 se volvieran arrancables desde 1994. [32] [34] En consecuencia, con la introducción de MS-DOS 7.10 (Windows 95B) y superiores, el MBR comenzó a tratar un bit 7 establecido como un indicador activo y mostró un mensaje de error solo para los valores 0x01 .. 0x7F . Continuó tratando la entrada como una unidad de disco físico que se usaría al cargar el VBR de la partición correspondiente más adelante, por lo que ahora también aceptaba como válidas otras unidades de arranque que no fueran 0x80 ; sin embargo, MS-DOS no hizo uso de esta extensión por sí mismo. 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 de la primera (que de todos modos no han sido arrancables antes). Sin embargo, incluso con sistemas habilitados para arrancar desde otras unidades, la extensión puede no funcionar de manera universal, por ejemplo, después de que la asignación de unidades físicas del BIOS haya cambiado cuando se eliminan, 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 el IPL en el BIOS) le pasa la ejecución saltando a 0x0000 : 0x7C00 en el modo real de la CPU .
Los sistemas con soporte para BIOS Plug-and-Play o BBS proporcionarán un puntero a datos PnP además de DL: [32] [34]
$PnP
la estructura de verificación de instalación " "Por 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 (ver desplazamiento NEWLDR 0x0014
); esto también permite que otros cargadores de arranque utilicen NEWLDR como un cargador de cadena, configuren su imagen en memoria sobre la marcha y "tunelicen" 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 de David Elliott boot1fat32
) también dependen de este puntero, pero además no utilizan 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. Mientras que algunas extensiones solo dependen de la entrada de la tabla de particiones de 16 bytes en sí, otras extensiones pueden requerir que también esté presente toda la tabla de particiones de 4 (o 5) entradas.En DR-DOS 7.07, se puede proporcionar opcionalmente una interfaz extendida mediante el MBR extendido y en conjunto con LOADER:
Junto con GPT, una propuesta de Especificación de unidad de disco mejorada (EDD) 4 MBR híbrido recomienda otra extensión de la interfaz: [37]
!GPT
$PnP
la estructura de verificación de instalación " " (ver arriba)Aunque es posible manipular los bytes en el sector MBR directamente utilizando 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 utilizar para escribir nuevo código MBR en un dispositivo de almacenamiento utilizando su fixmbr
comando. En Windows Vista y Windows 7 , el Entorno de recuperación se puede utilizar para escribir nuevo código MBR utilizando el BOOTREC /FIXMBR
comando. También se pueden utilizar algunas utilidades de terceros para editar directamente el contenido de las tablas de particiones (sin requerir ningún conocimiento de editores hexadecimales o de disco/sector), como MBRWizard . [o]
dd
es un comando POSIX que se utiliza comúnmente para leer o escribir en cualquier ubicación de un dispositivo de almacenamiento, incluido el MBR. En Linux , ms-sys se puede utilizar para instalar un MBR de Windows. Los proyectos GRUB y LILO tienen herramientas para escribir código en el sector MBR, a saber, grub-install
y lilo -mbr
. La consola interactiva de GRUB Legacy puede escribir en el MBR, utilizando los comandos setup
y embed
, pero GRUB2 actualmente requiere grub-install
ejecutarse desde dentro de 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 ejemplo de comando para hacer una copia de seguridad de la tabla de particiones es sfdisk -d /dev/hda > hda.out
y para restaurar es sfdisk /dev/hda < hda.out
. Es posible copiar la tabla de particiones de un disco a otro de esta manera, lo que resulta útil para configurar la duplicación, pero sfdisk ejecuta el comando sin solicitar ni advertir nada mediante 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
Todos los sistemas operativos incluyen herramientas para gestionar particiones MBR. Lamentablemente, cada sistema operativo gestiona las particiones MBR de una forma 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 código de arranque del MBR compatible con AAP correspondiente. […]"
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. (Matthias R. Paul).
(NB. Las tablas de particiones de 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 de ella. Por lo tanto, las entradas se insertan y enumeran al revés de las de una tabla normal. Por lo tanto, al observar una tabla de este tipo con un editor de discos o una utilidad de listado de particiones, mostraría la primera entrada en una tabla NEC de ocho entradas 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 arranque difiere de MS-DOS 3.30).
IPL (n=0..126, 128..254). […] Preparando el disco de destino... Eligiendo el sector de arranque FAT12 CHS (requiere que IPL informe la unidad de arranque). Tratando el destino como un disquete o un medio superfloppy (unidad de arranque 0). Escribiendo un nuevo sector de arranque... […](NB. SYS escribe registros de arranque de volumen en lugar de registros de arranque maestros, pero su interfaz de registro entrante es similar (con extensiones) ya que ambos podrían ser cargados inicialmente por el sistema subyacente).