Un registro de arranque de volumen ( VBR ) (también conocido como sector de arranque de volumen , registro de arranque de partición o sector de arranque de partición ) es un tipo de sector de arranque introducido por el IBM Personal Computer . Puede encontrarse en un dispositivo de almacenamiento de datos particionado , como un disco duro , o en un dispositivo sin particionar, como un disquete , y contiene código máquina para el arranque de programas (generalmente, pero no necesariamente, sistemas operativos ) almacenados en otras partes del dispositivo. En dispositivos de almacenamiento sin particionar , es el primer sector del dispositivo. En dispositivos particionados, es el primer sector de una partición individual en el dispositivo, siendo el primer sector de todo el dispositivo un Registro de Arranque Maestro (MBR) que contiene la tabla de particiones .
El código en los registros de arranque de volumen es invocado directamente por el firmware de la máquina o indirectamente por el código en el registro de arranque maestro o un administrador de arranque . El código en el MBR y el VBR se carga esencialmente de la misma manera .
La invocación de un VBR a través de un administrador de arranque se conoce como carga en cadena . Algunos sistemas de arranque dual , como NTLDR (el cargador de arranque para todas las versiones de los sistemas operativos derivados de Windows NT de Microsoft hasta Windows XP y Windows Server 2003 inclusive ), toman copias del código de arranque que cada sistema operativo instala en el VBR de una sola partición y las almacenan en archivos de disco, cargando el contenido VBR relevante desde el archivo después de que el cargador de arranque haya preguntado al usuario qué sistema operativo arrancar. En Windows Vista , Windows Server 2008 y versiones posteriores, NTLDR fue reemplazado; la funcionalidad del cargador de arranque ahora la proporcionan dos nuevos componentes: WINLOAD.EXE y el Administrador de arranque de Windows .
En sistemas de archivos como FAT12 (excepto en DOS 1.x), FAT16 , FAT32 , HPFS y NTFS , el VBR también contiene un Bloque de Parámetros de BIOS (BPB) que especifica la ubicación y la disposición de las principales estructuras de datos en disco para el sistema de archivos. (En el artículo sobre FAT se puede encontrar una descripción detallada de la disposición de sectores de los VBR de FAT, las distintas versiones de BPB de FAT y sus entradas ).
Detalles técnicos
Firma
La presencia de un cargador de arranque compatible con IBM PC para CPU x86 en el sector de arranque se indica por convención mediante una secuencia hexadecimal de dos bytes llamada firma del sector de arranque ( 55h en el desplazamiento fijo +1FEh y AAh en +1FFh ) para sectores de 512 bytes o más. [ nb 1 ] Para sectores de 512 bytes, la firma del sector de arranque también marca el final del sector. Los VBR en sectores más pequeños y más grandes también pueden mostrar firmas al final del tamaño real del sector; sin embargo, la semántica descrita aquí se aplica solo a la firma de 16 bits en +1FEh .
Esta firma indica la presencia de al menos un cargador de arranque ficticio que se puede ejecutar de forma segura, aunque no pueda cargar un sistema operativo. No indica la presencia de un sistema de archivos o sistema operativo (ni siquiera de uno en particular), aunque algunas versiones antiguas de DOS anteriores a la 3.3 dependían de ella para detectar medios con formato FAT (las versiones más recientes no). El código de arranque para otras plataformas o CPU no debe usar esta firma, ya que esto puede provocar un fallo cuando la BIOS pasa la ejecución al sector de arranque asumiendo que contiene código ejecutable válido. Esto implica que los medios FAT12 / FAT16 que se utilicen también en versiones muy antiguas de DOS deben mantener la firma aunque no contengan un sistema operativo o estén destinados a arrancar solo en otras plataformas; por consiguiente, también deben contener al menos un cargador (ficticio) compatible con x86 (para comparar, ver ejemplos de FAT en Atari ST y con MSX-DOS ). Sin embargo, algunos soportes para otras plataformas contienen erróneamente la firma incluso sin un cargador ficticio compatible con x86, lo que hace que la comprobación no sea 100% fiable en la práctica.
La firma es comprobada por la mayoría de las BIOS del sistema desde (al menos) el IBM PC/AT (pero no por el IBM PC original ni por algunas otras máquinas). Además, la mayoría de los cargadores de arranque MBR también la comprueban antes de ceder el control al sector de arranque. Algunas BIOS (como la del IBM PC/AT) realizan la comprobación solo para discos fijos/unidades extraíbles, mientras que para disquetes y superdisquetes basta con que el byte inicial sea mayor o igual a 06h y que las primeras nueve palabras no contengan el mismo valor para que el sector de arranque se considere válido, evitando así la comprobación explícita de 55h y AAh en disquetes. Dado que los sectores de arranque antiguos (es decir, los medios CP/M-86 y DOS muy antiguos) a veces no presentan esta firma a pesar de que pueden arrancar correctamente, la comprobación puede estar desactivada en algunos entornos. Esto también refleja el hecho de que los disquetes pueden formatearse para usar tamaños de sector menores a 512 bytes.
Si el código BIOS o MBR no detecta un sector de arranque válido y, por lo tanto, no puede pasar la ejecución al código del sector de arranque, intentará con el siguiente dispositivo de arranque en la fila. Si todos fallan, normalmente mostrará un mensaje de error e invocará INT 18h . [ 1 ] Esto iniciará software residente opcional en la ROM ( ROM BASIC ), intentará arrancar remotamente a través de la red, reiniciará el sistema mediante INT 19h después de la confirmación del usuario, o hará que el sistema detenga el proceso de arranque hasta el siguiente encendido. [ 1 ]
Desde el desplazamiento decimal 72 hasta el 79, un PBR NTFS contiene el número de serie del ID de volumen UUID de la partición.
Invocación
El código de arranque en el VBR puede asumir que la BIOS ha configurado sus estructuras de datos e interrupciones y ha inicializado el hardware. El código no debe asumir que hay más de 32 KB de memoria disponibles para un funcionamiento a prueba de fallos; [ 1 ] si necesita más memoria, debe consultar INT 12h para obtenerla, ya que otro código de prearranque (como superposiciones de extensión de la BIOS, sistemas de cifrado o cargadores de arranque remotos ) también puede estar presente en otras partes de la memoria (y normalmente se ocultarían del sector de arranque reduciendo la memoria informada por INT 12h en consecuencia, para que no sean sobrescritos por las acciones del MBR y el VBR). La especificación de arranque de la BIOS permite 64 KB de memoria y recomienda explícitamente de 0000h:7C00h a 0000h:FFFFh como espacio de memoria para el MBR y/o el VBR. [ 2 ] [ 1 ] El código de arranque no debe asumir CPU mejores que las originales Intel 8088 o 8086 (utilizadas en la PC original) y no hacer suposiciones con respecto al estado exacto del hardware, el sistema de interrupciones (las interrupciones pueden estar habilitadas o deshabilitadas) o la ubicación y el tamaño de la pila. Aunque la BIOS original de IBM inicializa los registros de CPU DS, ES y SS en el segmento 0000h y mantiene la pila inicial en SS : SP = 0000h:0400h , esta no es una condición en la que confiar, ya que no todas las BIOS y códigos MBR siguen esta convención. Los registros no mencionados a continuación deben tratarse como no inicializados. El acceso directo al hardware normalmente no está permitido. Si bien la tabla de parámetros del disco (DPT/FDPB) normalmente ya está configurada en la dirección 0000h:0078h de la memoria, el VBR debe mover (y posiblemente corregir) la DPT a la que apunta el vector INT 1Eh a esta ubicación (INT 1Eh no es una interrupción, sino un puntero lejano a la DPT).
En entornos controlados, algunas condiciones pueden flexibilizarse; por ejemplo, algunos gestores de arranque actuales asumen que disponen de hasta 128 KB de memoria para funcionar en condiciones normales (sin solicitar más), y algunos gestores de arranque que utilizan acceso LBA asumen al menos una CPU Intel 80188 o 80186 .
El VBR se carga en la ubicación de memoria 0000h: 7C00h[ 1 ] y con los siguientes registros de CPU configurados cuando el cargador de arranque anterior (es decir, normalmente el BIOS o MBR, pero posiblemente otro cargador de arranque) le pasa la ejecución saltando a 0000h: en el modo real7C00h de la CPU .
Algunas BIOS de Compaq utilizan erróneamente 07C0h:0000h. Si bien esto se resuelve en la misma ubicación en la memoria en modo real, no es estándar y debe evitarse, ya que el código VBR que asume ciertos valores de registro o que no está escrito para ser reubicable podría no funcionar de otra manera.
- DL = unidad de arranque ( disquetes / superdisquetes :
00h= primero,01h= segundo, ...,7Eh; discos fijos / unidades extraíbles :80h= primero,81h= segundo, ...,FEh; los valores7FhyFFhestán reservados para ROM / unidades remotas y no deben usarse en disco ). [ 3 ] DL es compatible con las BIOS de IBM, así como con la mayoría de las demás BIOS. Se sabe que la BIOS de Toshiba T1000 no lo admite correctamente, y algunas BIOS antiguas de Wyse 286 usan valores DL mayores o iguales a 2 para discos duros. Las memorias USB configuradas como superdisquetes normalmente reciben una asignación de DL =00ho01h, sin embargo, algunas BIOS raras presentan erróneamente memorias USB configuradas como unidades extraíbles como DL =01htambién, en lugar de usar DL =80h. Tradicionalmente, solo los valores00hy80heran transmitidos por la BIOS durante el arranque, y muchos sectores de arranque estaban cableados para funcionar con valores fijos, de todos modos. La especificación Plug and Play BIOS y la especificación de arranque de BIOS (BBS) permiten que otros dispositivos también se conviertan en arrancables. [ 2 ] [ 4 ] Este último también recomienda que los códigos MBR y VBR utilicen DL en lugar de valores predeterminados internos. [ 2 ] (Nota: Los VBR de MS-DOS / PC DOS y OS/2 ignoran el valor DL proporcionado y, en su lugar, recuperan el valor almacenado en el desplazamiento del Bloque de Parámetros del BIOS Extendido (EBPB) o en el desplazamiento del sector en las versiones de DOS 3.2 a 3.31. Algunas versiones de DR-DOS utilizan DL a partir de la 7.02. Los VBR de DR-DOS 7.07 utilizan DL por defecto e ignoran el valor BPB, pero se pueden usar para invocar el comportamiento anterior de usar el valor BPB o incluso forzar que una unidad de arranque particular se almacene allí. [ 3 ] En volúmenes FAT32 , FreeDOS también aprovecha el valor DL, mientras que lo hace en volúmenes FAT12 / FAT16 solo si el valor BPB está configurado en .)+19h+1FDhSYS /O[:nnn]nnnFFh - DH bit 5 = 0: dispositivo compatible mediante INT 13h ; de lo contrario: no importa (debería ser cero). DH es compatible con algunas BIOS de IBM. Algunos códigos MBR y VBR conservan el valor de DH.
Los sistemas con soporte para BIOS Plug-and-Play o BBS proporcionarán un puntero a los datos PnP además de DL: [ 2 ] [ 4 ]
- DL = unidad de arranque (ver arriba)
- ES : DI = apunta a
$PnPla estructura de verificación de instalación " "
Esta información permite que el cargador de arranque (en el MBR o VBR) interactúe activamente con la BIOS o una superposición PnP/BBS residente en memoria para configurar el orden de arranque, etc. Sin embargo, la mayoría de los MBR y VBR estándar ignoran esta información. Idealmente, ES:DI se transmite, pero los sistemas operativos habilitados para PnP también suelen tener métodos de reserva para recuperar el punto de entrada de la BIOS PnP más adelante, por lo que la mayoría de los sistemas operativos no dependen de esto. La información en ES:DI puede usarse como una pista: según la especificación de la BIOS PnP, la estructura de verificación de instalación "$PnP" podría encontrarse buscando una firma de la cadena ASCII $PnP en la memoria del sistema desde F0000h hasta FFFFFh en cada límite de 16 bytes.
Con medios particionados, cuando el VBR es iniciado por el MBR (o un cargador de arranque diferente) en lugar de la BIOS, muchas implementaciones pasan información adicional al VBR además de solo DL (y a veces también DH y ES:DI):
- DS : SI = apunta a la entrada de la tabla de particiones MBR de 16 bytes (en el MBR reubicado) correspondiente con el VBR activado. PC-MOS 5.1 depende de esto para arrancar si ninguna partición en la tabla de particiones está marcada como arrancable. Junto con LOADER, los sectores de arranque de Multiuser DOS y REAL/32 usan esto para localizar el sector de arranque de la partición activa (u otro cargador de arranque como IBMBIO.LDR en una posición fija en el disco) si no se pudo encontrar el archivo de arranque (LOADER.SYS). PTS-DOS 6.5 y S/DOS 1.0 usan esto junto con su función de Partición Activa Avanzada (AAP). Además de la compatibilidad con LOADER y AAP, DR-DOS 7.07 puede usar esto para determinar el método de acceso INT 13h necesario cuando usa su código VBR dual CHS/LBA. El código MBR de OS/2, MS-DOS (anterior a la versión 7.0), PC DOS (hasta la versión 7.10) y Windows NT (hasta aproximadamente 2007) también proporciona esta misma interfaz, aunque estos sistemas no la utilizan. El MBR instalado por Windows NT 6.0 (y versiones posteriores) utiliza otros registros y, por lo tanto, ya no es compatible con estas extensiones. Si bien algunas extensiones solo dependen de la entrada de la tabla de particiones de 16 bytes, otras pueden requerir que también esté presente la tabla de particiones completa de 4 (o 5) entradas.
En DR-DOS 7.07, el MBR puede utilizar opcionalmente una interfaz extendida junto con LOADER:
- AX = firma mágica que indica la presencia de esta extensión (
0EDCh) - DL = unidad de arranque (ver arriba)
- DS:SI = apunta a la entrada de la tabla de particiones MBR de 16 bytes utilizada (ver más arriba)
- ES: BX = inicio del sector de arranque o
NEWLDRimagen de sector especial " " (normalmente 7C00h) - CX = reservado
En conjunto con las tablas de partición GUID (GPT), una propuesta de MBR híbrida de Enhanced Disk Drive Specification (EDD) 4 recomienda otra extensión a la interfaz MBR a VBR: [ 5 ]
- EAX =
54504721h("!GPT") - DL = unidad de arranque (ver arriba)
- ES:DI = apunta a
$PnPla estructura de verificación de instalación " " (ver arriba) - DS:SI = apunta a una estructura de transferencia MBR híbrida, que consiste en una entrada ficticia de tabla de particiones MBR de 16 bytes (con todos los bits activados excepto el indicador de arranque en el desplazamiento
+0hy el tipo de partición en el desplazamiento+4h) seguida de datos adicionales. Esto es parcialmente compatible con la extensión DS:SI anterior, si estas extensiones solo requieren la entrada de partición de 16 bytes, no la tabla de particiones completa.
Véase también
Notas
- ↑ La firma en el desplazamiento
+1FEhen los sectores de arranque es55h AAh, es decir,55hen el desplazamiento+1FEhyAAhen el desplazamiento+1FFh. Dado que se debe asumir la representación little-endian en el contexto de las máquinas compatibles con IBM PC , esto se puede escribir como una palabra de 16 bitsAA55hen programas para procesadores x86 (nótese el orden intercambiado), mientras que tendría que escribirse como55AAhen programas para otras arquitecturas de CPU que utilizan una representación big-endian . Dado que esto se ha confundido numerosas veces en libros e incluso en documentos de referencia originales de Microsoft,este artículo utiliza la representación en disco byte a byte basada en desplazamiento para evitar cualquier posible interpretación errónea.
Referencias
- 1 2 3 4 5 Paul, Matthias R. (1997-10-02) [1997-09-29]. "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT y BOOT.TXT - Una breve descripción de cómo se inicia OpenDOS" . Archivado del original el 4 de octubre de 2003. Recuperado el 29 de marzo de 2009 .
- 1 2 3 4 Compaq Computer Corporation ; Phoenix Technologies Ltd .; Intel Corporation (11 de enero de 1996). Especificación de arranque del BIOS 1.01 (PDF) . 1.01. Archivado del original (PDF) el 14 de abril de 2016.
- 1 2 Paul, Matthias R. (14-08-2017) [07-08-2017]. "La saga continua de Windows 3.1 en modo mejorado en OmniBook 300" . MoHPC - el Museo de Calculadoras HP . Archivado del original el 01-05-2018 . Recuperado el 01-05-2018 .
[…] SYS […] /O[:nnn] Anular la unidad de arranque informada por 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 superflop (unidad de arranque 0). Escribiendo el nuevo sector de arranque... […]
- 1 2 Compaq Computer Corporation ; Phoenix Technologies Ltd .; Intel Corporation (5 de mayo de 1994). Especificación del BIOS Plug and Play 1.0A (PDF) . 1.0A. Archivado del original (PDF) el 2 de febrero de 2018.
- ↑ Elliott, Robert (2010-01-04). "EDD-4 Hybrid MBR boot code annex" (PDF) . Hewlett-Packard , Comité Técnico T13. e09127r3. Archivado (PDF) del original el 2018-05-01 . Recuperado el 2018-05-01 .
Lecturas adicionales
- "Sectores de arranque de volumen" . Guía para PC .
- Sistemas de archivos informáticos
- BIOS
- Arranque