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:

Esquema de la arquitectura 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).

21 thoughts on “Cómo funciona la herramienta Reparación de inicio de Windows Vista (Parte III)

  1. Hola Daniel.
    ¿Como determinar o “ver” que software y que controladores intervienen en el arranque del sistema operativo (Vista) para deshabilitar ante un posible fallo? Esto debido a la instalación previa de un programa que pueda dañar el sistema y en el siguiente inicio no tenga manera de arrancar y provoque “pantallazo”.

    Gracias.

  2. @Marcos: Si instalas algún programa y no puedes volver a iniciar el sistema por un pantallazo azul, puedes hacer uso de la opción avanzada de arranque “Última configuración buena conocida”.

    Lo que hace esta opción es restaurar la rama de Registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet con una copia de seguridad creada cuando tu sistema sí era capaz de arrancar. Si así logras arrancar el sistema, podrías comparar la rama que te comento con la correspondiente copia de seguridad (HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX, donde “XXX” es un número) para detectar qué controlador es el culpable.

    Para saber qué número debes asignar a “XXX”, echa un vistazo al valor “LastKnownGood” de la clave HKEY_LOCAL_MACHINE\SYSTEM\Select.

  3. Gracias.
    He probado con la opción “Ultima configuracion buena conocida” pero nada.
    ¿El comando regedit, que se ejecuta desde el simbolo de sistema en Reparacion de inicio de Windows Vista, carga el registro del sistema operativo?. Si fuese así, ¿serviría eliminar la entrada dentro de: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    para que no inicie el software en cuestion?
    Y otra duda, como te comentaba, ¿para deshabilitar servicios? ¿como procedería? en Xp mediante la Consola de recuperación tiene el comando Disable, ¿pero en Vista?.

  4. @Marcos: La clave de Registro que comentas carga elementos del inicio pero algo más tarde en la etapa de arranque.

    ¿Has probado a ejecutar la herramienta Reparación de inicio desde el DVD de Vista? Si no fuese capaz de solucionar el problema, habría que echar un vistazo a su LOG asociado en %WINDIR%\System32\LogFiles\Srt

  5. Lo tengo resuelto.
    Al final hice un chkdsk al disco duro y volví a ejecutar la herramienta de reparación, elegí un punto de restauración anterior a la instalación del software y todo perfecto, ha vuelto a arrancar.

    Muchas gracias por tu ayuda.
    Un saludo.

  6. La computadora daba pantallazo azul casi cada vez que se encendía registrando cada vez un error diferente. Decidí restaurarla al día que recibí el ordenador (donde casi nada se había instalado todavía) y ahora inicia pero aparece una pantalla gris que dice que el Reparador de Inicio no puede reparar automáticamente el equipo y no se puede hacer nada más que reiniciarla (ni siquiera entra al menú de usuario, me recomiendas instalar Vista desde el principio de nuevo con el CD de sistema operativo (y cómo hago eso?) o algun otro sistema operativo? Gracias!

  7. al ejecutar la herramienta de comprobación de memoria este se ejecuta y no encuentra ningun problema pero permanece entre las opciones del menu inicial de seleccion de sistemas operativos y no se quita nunca. ademas creo que debido a esto hace varios pitidos consecutivos antes de mostras las opciones de este menu. ¿como puedo eliminar esta entrada? gracias

  8. Carlos permiteme que te conteste yo mismo:
    …Con la utilidad BCDEDIT (necesitarás permisos elevados)
    Saludos a todos.
    Lo que hay que hacer es borrar ese objeto BCD, como bien explica Daniel.
    A cada objeto BCD se le asigna un ID, un nº de identificación que puedes ver con el comando BCDEDIT /v.
    Esa referencia ‘{ID}’ es la que debes utilizar para indicar a BCDEDIT que objeto eliminar: BCDEDIT /delete {ID}
    Usa BCDEDIT /? para obtener una lista de comandos.
    Se puede hacer casi de todo, Backups, crear copias de entradas existentes para despues experimentar sin riesgos, etc, etc…
    Recuerda que necesita privilegios para el BCDEDIT. Bajate de http://www.sevenforums.com/tutorials/783-elevated-command-prompt.html?ltr=E
    Es un rar que contienes un acceso a la consola de comandos con el que no tendrás problemas.

  9. Carlos permiteme que te conteste yo mismo:
    …Con la utilidad BCDEDIT (necesitarás permisos elevados)
    Saludos a todos.
    Lo que hay que hacer es borrar ese objeto BCD, como bien explica Daniel.
    A cada objeto BCD se le asigna un ID, un nº de identificación que puedes ver con el comando BCDEDIT /v.
    Esa referencia ‘{ID}’ es la que debes utilizar para indicar a BCDEDIT que objeto eliminar: BCDEDIT /delete {ID}
    Usa BCDEDIT /? para obtener una lista de comandos.
    Se puede hacer casi de todo, Backups, crear copias de entradas existentes para despues experimentar sin riesgos, etc, etc…
    Recuerda que necesita privilegios para el BCDEDIT. Bajate de http://www.sevenforums.com/tutorials/783-elevated-command-prompt.html?ltr=E
    Es un rar que contienes un acceso a la consola de comandos con el que no tendrás problemas.

  10. HOLA
    Tengo un problemilla, os cuento

    Monté un ordenador con tres discos duros, uno vacío y otros que ya tenía de otro ordenador. Instalé Windows 7 64 bits. Por omisión no se instalaba en el vacío, no hubo problema para instalar en el nuevo disco duro.

    Todo va casi perfectamente, tengo el que estaba vacío instalado el sistema operativo y los otros dos como almacén. Como el ordenador lo tengo casi todo el día encendido, en la opción de opciones de energía lo tengo como economizador, para que desactive los discos duros inactivos.

    El problema es que uno de estos dos discos duros está continuamente apagándose y encendiéndose. Intento por ejemplo en quitar hardware desactivar este disco duro y me indica que está en uso.

    He investigado y me he dado cuenta que la carpeta boot con la arquitectura de arranque BCD se encuentra en este disco duro (G:) por lo que Windows 7 no me lo deja desactivar.

    Aquí os dejo

    Windows Boot Manager
    ——————–
    identifier {9dea862c-5cdd-4e70-acc1-f32b344d4795}
    device partition=G:
    description Windows Boot Manager
    locale es-ES
    inherit {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
    default {308488f2-33a9-11df-bb2f-d84d9f951610}
    resumeobject {308488f1-33a9-11df-bb2f-d84d9f951610}
    displayorder {308488f2-33a9-11df-bb2f-d84d9f951610}
    toolsdisplayorder {b2721d73-1db4-4c62-bf78-c548a880142d}
    timeout 30

    La pregunta es si hay forma (sin volver a instalar el sistema operativo) de traspasar el Windows Boot Manager de G: a C:

    Muchísimas gracias por la ayuda.

    UN SALUDO

  11. Holaaa, mi problema es que de un día a otro el ordenador no me encendia. Me dice “reparacion de inicio” pero no encuentra el problema y tampoco me deja restaurar el sistema. No tengo ninguna copia de seguridad. Habría alguna forma de recuperar los datos del equipo??

    Espero su ayuda. Tamto sobre los datos como lo del ordenador.

    Graciasssssssss

  12. Holaaa, tengo un problema con el ordenador. Resulta que no se enciende, me sale “reparacion de inicio”. Y no me dá ningún resultado hasciendo la recuperacion de inicio, ni puedo hacer restaurar el sistema. No tengo copias de seguridad. Cómo puedo recuperar los datos??

    Un saludo a todos y espero que me ayudeis

  13. Hola, tengo un portátil Pavilion dv5 de HP, con win vista, no arranca y entra en “reparación de inicio”, he leído en el informe final que la causa principal encontrada es: Un archivo de arranque imprescindible está dañado, c:\windows\system32\drivers\uqicw.sys,
    ¿Cómo puedo recuperarlo?, he probado diferentes opciones a partir los modos de inicio (por F8) y no ha servido ninguno.

    GRACIAS POR TU RESPUESTA

  14. @Rafaerty: Si el nombre del controlador está bien escrito, es bastante sospechoso. No hay referencias claras en Internet así que no descartes que se trate de algún tipo de virus o rootkit.

  15. @Rafaerty: Suponiendo que el sistema afectado es el sistema por defecto, se puede desactivar Reparación del inicio usando este comando:

    bcdedit /set {default} recoveryenabled No

    Cuando ocurra el error, podrás ver el correspondiente mensaje y el arranque se detendrá.

Leave a Reply

Your email address will not be published. Required fields are marked *