Cuando muevo una partición NTFS de arranque con Windows en un desplazamiento de bloque diferente, ¿qué se necesita actualizar para volver a arrancar?
Antecedentes: planeo escribir un programa que realice las acciones necesarias , por eso no busco guías sobre cómo usar las herramientas de Microsoft arrancando desde un DVD de Windows. En cambio, necesito cómo modificar estas cosas yo mismo, para poder escribir una solución que sea más fácil para el usuario promedio de PC cuando quiere mover su sistema Windows a un disco duro más grande.
En particular, esto es lo que probé:
Tengo un disco con varias particiones, una de las cuales es la partición NTFS con Windows, y el disco usa el bloque MBR antiguo 0 para el diseño de particiones (no más de 4 particiones).
Ahora formateo y particiono un disco nuevo más grande. Allí hago espacio para la partición NTFS y copio el contenido de la partición Windows NTFS del disco anterior. Y hago la partición "activa".
Sin embargo, cuando intento arrancar desde este disco, recibo un mensaje de "error de lectura" inmediatamente y el arranque se detiene, el texto exacto es:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Verifiqué que ambos discos tienen el mismo código de sector de arranque en el bloque 0.
Me parece que algo más podría necesitar una actualización. Supongo que en algún lugar hay una referencia de bloque absoluta que necesito actualizar, probablemente apuntando al siguiente nivel de cargador o al núcleo NT.
Actualización: Encontré que este artículo profundiza bastante en lo que quiero saber. Sin embargo, dice que modifique boot.ini, pero tengo Windows 7 instalado aquí, donde tales cosas parecen haber cambiado: no boot.ini sino una carpeta llamada System Volume Information con GUID y otros datos que suenan relacionados con mi problema . Voy a seguir cavando ...
Actualización 2: Gracias al sitio web de aspecto terrible pero muy informativo de starman , pude descubrir el primer paso: el sector de arranque NTFS tiene un campo para sectores "ocultos". Este campo tiene que contener el número de sector del sector de arranque. Esto resuelve el mensaje de "error de lectura". Ahora, sin embargo, aparece el error "Falta BOOTMGR". Parece que hay otro lugar donde se debe ajustar un número de bloque, pero no puedo encontrar nada en el listado de código sobre esto.
Encuentro muchos sitios de ayuda que sugieren herramientas de Windows para solucionar este problema "BOOTMGR no se encuentra", pero ninguno parece saber qué sucede detrás de escena. Como sugiriendo reinstalar Windows cuando hay un pequeño problema con él. Al menos, esas correcciones parecen funcionar, principalmente involucrando las herramientas Bcdedit y Bootrec. Ahora, ¿quién sabe lo que hacen, especialmente el último, con respecto a una partición movida?
Actualización 3: después de muchos intentos de prueba y error, creo que ahora la solución se encuentra en el archivo de registro BCD-Template , que generalmente reside dentro de \ Windows \ System32 \ config. Si obtengo esto actualizado usando el comando "bcdboot", Windows se inicia desde allí. Ahora estoy en el medio de averiguar qué información contiene este registro relevante para la pregunta anterior. Cualquier puntero al contenido de este registro es bienvenido.
Actualización 4: Resulta que, si bien el archivo de plantilla BCD se reescribe y tiene un contenido binario diferente al de su predecesor, los valores que contiene no cambian. Por lo tanto, debe ser algo más que bcdboot.exe escribe. Anteriormente ya había verificado si cambia los primeros 32 bloques de arranque de la partición, pero parecen permanecer sin cambios. El mapa de Parititon tampoco cambia. Entonces, ¿qué es lo que modifica bcdboot además del registro BCD? ¿Algún consejo sobre cómo puedo rastrear eso? ¿Existen herramientas de bajo nivel que me muestren en qué archivos escribe un programa?
Actualización 5: La respuesta parece ser: c: \ Boot \ BCD también se cambia, y ese parece ser el archivo clave para el proceso del administrador de arranque. Investigaré esto más tarde ...
Actualización 6: Parece ser un detalle importante que originalmente tenía dos particiones creadas cuando instalé Windows 7: una pequeña partición de 204800 sectores que parece ser una partición de arranque, seguida de la partición real, grande, que contiene el sistema de Windows ( unidad C :). Cuando intenté transferir esta instalación a un disco nuevo más grande, mantuve las mismas dos particiones intactas en la nueva unidad, aunque terminaron en un desplazamiento diferente. Esto solo condujo al mensaje "BOOTMGR no se encuentra". Desde entonces, he usado bcdboot.exe solo en la partición de Windows, que agregóel archivo \ Boot \ BCD en esa partición. Ese archivo (y carpeta) originalmente solo existía en la partición más pequeña. Por lo tanto, este problema puede ser más complicado en mi caso, ya que una partición (la correa de arranque) se refiere a otra partición (la que contiene el sistema operativo), mientras que otras personas solo tienen que lidiar con una partición que contiene ambas, y tal vez allí la solución es más simple
Actualización 7: Encontré un detalle más: el archivo \ Boot \ BCD registra el número de serie del MBR. Si ese número no coincide, el sistema no se iniciará. A continuación, probaré si también hay una referencia de bloque absoluta almacenada allí.
\BCD\Boot
, y normalmente las editarías con bcdedit.exe
, no bcdboot
. Y sí, la partición separada para el fleje de arranque (que se requiere solo cuando usa la función de cifrado de disco completo, ya que el código de descifrado debe almacenarse fuera de la partición principal de Windows) controla el proceso de arranque, si existe.