Cómo funciona la herramienta Reparación de inicio de Windows Vista (Parte III)
En este artículo se va a describir el arranque de los sistemas operativos Windows Vista y Windows 7. Antes de comenzar, es necesario que veamos unas pinceladas del arranque de sistemas operativos anteriores, para poner el nuevo sistema de arranque en contexto.
El proceso de arranque en Windows XP y anteriores
El proceso de arranque comienza cuando la BIOS de la máquina lee el primer sector del disco duro. Este sector (el sector de arranque), típicamente contiene una porción de código denominada MBR (Master Boot Record), pero podría contener cualquier otro código ejecutable. En sistemas Windows XP y anteriores sistemas NT, dicho código apunta al fichero Ntldr mediante una cadena de tipo Unicode situada en una posición fija de dicho primer sector del disco duro. El archivo Ntldr es el encargado de leer el fichero Boot.ini, que contiene información importante sobre los sistemas que están instalados y cómo se debe arrancar cada uno de ellos. Si procede, Ntldr muestra al usuario una lista de sistemas operativos para que elija alguno mediante las flechas de dirección.
La nueva arquitectura de arranque
El problema principal de este esquema primitivo de arranque es que se trata de un esquema enormemente dependiente del hardware. Este problema se hizo patente cuando Intel desarrolló, a mediados de los años 90, una nueva especificación para sus máquinas Itanium, con el objetivo de evitar las limitaciones impuestas por el ya vetusto sistema PC BIOS. Esta especificación se denominó EFI (Extended Firmware Interface) y básicamente consiste en una interfaz entre el sistema operativo y el firmware de la máquina. EFI soporta tanto el esquema clásico de particiones basado en MBR como el nuevo esquema GPT (Guid Partition Table). La principal ventaja de este nuevo esquema es que no se ve afectado por las limitaciones de MBR, tales como el límite de 4 particiones primarias por disco y los 2TB como máximo por partición.
Con la salida al mercado de Windows Vista, Microsoft introdujo un nuevo almacén de configuración de arranque denominado almacén BCD (Boot Configuration Data). Podríamos decir que este almacén realiza las mismas funciones que el fichero Boot.ini realiza en sistemas Windows XP o anteriores. La diferencia fundamental reside en que el almacén BCD es independiente del hardware y es capaz de arrancar tanto sistemas PC BIOS tradicionales como sistemas basados en EFI. En el futuro podría darse soporte a nuevos esquemas de arranque.
La arquitectura del BCD está formada por tres componentes bien diferenciados: almacén BCD, objeto BCD y elemento BCD.
Almacén BCD
El almacén BCD es un contenedor de objetos BCD, entidad que a su vez contiene elementos BCD. Físicamente es un fichero binario con una estructura similar a los ficheros binarios que representan ramas del Registro del sistema. Su nombre es BCD y está situado en el directorio \Boot (en un sistema PC BIOS) o \EFI\Microsoft\Boot (en un sistema EFI) de la partición activa del disco.
Objetos BCD
Por defecto, el almacén BCD contiene los siguientes objetos BCD:
- Administrador de arranque de Windows: Este objeto contiene entradas correspondientes a cada uno de los sistemas operativos instalados en la máquina. También existen parámetros adicionales, tales como el tiempo de espera hasta que se seleccione la entrada por defecto de dicho menú o la ordenación de la lista de sistemas operativos. Podríamos decir que este objeto BCD reemplaza la funcionalidad de la porción [boot loader] del fichero Boot.ini.
- Cargador de arranque de Windows: Existe un objeto BCD de este tipo por cada sistema Windows Vista/Windows 7 que esté instalado en el equipo. Se podría decir que este objeto reemplaza la funcionalidad de la sección [operating systems] del fichero Boot.ini.
- Ntldr: Este objeto BCD es opcional y contiene la información necesaria para arrancar sistemas Windows XP o anteriores. Nótese que el fichero Ntldr no sirve para nada en Windows Vista/Windows 7, excepto para arrancar sistemas anteriores.
Además de estos objetos BCD, las aplicaciones pueden crear sus propios objetos utilizando la interfaz de programación del almacén BCD. Por ejemplo, la utilidad de comprobación de memoria RAM incluida en el entorno de recuperación de Windows Vista/Windows 7 programa un análisis de RAM mediante el ejecutable Mdsched.exe, que crea un nuevo objeto BCD que apunta al ejecutable \Boot\Memtest.exe (en sistemas PC BIOS) o \EFI\Microsoft\Boot\Memtest.efi (en sistemas EFI). Otras aplicaciones de terceros podrían crear sus propios objetos en el BCD.
Elementos BCD
Los elementos BCD guardan los parámetros de configuración de cada uno de los objetos BCD. Estos parámetros, como ya se ha comentado, pueden ser la existencia de un depurador de kernel, el sistema operativo que iniciará por defecto, si se han activado las PAE (Physical Address Extensions), etc.
Este diagrama proporciona una visión global de la arquitectura del BCD:

Cada uno de los objetos BCD anteriores enlaza con un ejecutable diferente. Como ya se comentó, el objeto BCD correspondiente al análisis de memoria RAM enlaza con el ejecutable Memtest.exe o Memtest.efi. La entrada correspondiente al arranque de un sistema Windows Vista/Windows 7 enlaza con el ejecutable Winload.exe o Winload.efi, encargado de inicializar el núcleo del sistema operativo mediante Ntoskrnl.exe y cargar algunos controladores de arranque. Si el sistema hibernó por última vez, un objeto BCD apuntará al ejecutable Winresume.exe o Winresume.efi, que es el encargado de reanudar el sistema operativo para dejarlo tal cual estaba antes de ser hibernado.
¿Qué hace la herramienta Reparación de inicio si se encuentra con algún problema?
Si alguna de las estructuras comentadas anteriormente se ha dañado, el sistema no podrá arrancar. La herramienta Reparación del inicio habrá obtenido toda la información mediante su conjunto inicial de pruebas. Si la tabla de particiones, sector de arranque o almacén BCD estuviera dañado, el ejecutable BCDMD (Boot Critical Disk Meta-data Repair) se encarga de regenerar toda esta información. Esta herramienta básicamente realiza un análisis en busca de sistemas operativos, a la vez que compara esta información con la residente en el almacén BCD. Si la información del BCD no fuera coherente, esta herramienta es capaz de modificarla para que lo sea. Si los ficheros Winload.exe o Bootmgr no estuvieran o estuvieran dañados, Reparación de inicio puede recuperarlos en ciertas circunstancias, como ya vimos, mediante el comando Bfsvc.exe /nosetupcheck.
Otro de los problemas que puede afectar al arranque del sistema, como ya vimos, es una corrupción de los ficheros de sistema o bien un problema de permisos sobre ciertos ficheros importantes. Para el primer caso, Reparación del inicio ejecuta el comando Sfc.exe, cuyo funcionamiento se describió en un anterior artículo. Para el segundo caso, la herramienta reconstruye los permisos correctos, teniendo en cuenta que los ficheros del sistema operativo tienen una serie de permisos por defecto, para evitar su accidental eliminación o sobreescritura.
Si el Registro resultara estar corrupto, se puede recuperar a partir de la copia de seguridad del directorio %windir%\system32\config\RegBack. Si dicha copia tampoco estuviera en buen estado, se recurre a la copia con extensión .old que hay en el mismo directorio. Sin embargo, ante una corrupción del Registro la restauración del sistema se intenta aplicar siempre en primer lugar. El motivo es claro, las ramas de Registro del punto de restauración probablemente serán más recientes que las que hay en la carpeta RegBack. Solo se recurre a esta carpeta si no hubiera puntos de restauración disponible o estos no hubieran solucionado el problema.
Haciendo referencia a los puntos de restauración, la herramienta elige el más reciente que sea anterior a la causa que ha producido el fallo. Por ejemplo, si el usuario instaló un controlador y el sistema dejó de iniciar, Reparación del inicio intentará usar el punto de restauración más reciente anterior a la instalación del controlador. Para el caso de un Registro corrupto, la herramienta prueba con el punto de restauración más reciente que haya disponible.
Espero que toda esta información sobre el arranque de Windows Vista/Windows 7 y la herramienta Reparación del inicio les sirva para comprender un poco mejor cómo arranca el sistema operativo, qué estructuras están asociadas al arranque, qué problemas pueden surgir y cómo los aborda la herramienta de Reparación del inicio.
(Esta entrada ha sido programada. Daniel está en estos momentos en Redmond, Washington).