¿Qué necesita actualizarse al mover una partición de arranque de Windows 7 (o Vista)?

9

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í.

SuperTempel
fuente
Solo me pregunto, ¿se aseguró de que la partición oculta del sistema se moviera correctamente?
Colum
¿A qué partición oculta te refieres? Acabo de agregar la actualización # 6, que habla sobre la partición de arranque adicional, y sí, también moví eso. También había otra área "oculta" entre el MBR y el inicio de la (s) partición (es) de Windows, pero eso no debería ser relevante; eso es solo una gota de datos (en mi caso: una partición HFS + mientras me muevo) una instalación de Boot Camp aquí). Las únicas cosas involucradas deben ser: el mapa de partición (MBR más el mapa de partición con esquema GUID a partir de entonces) y las dos particiones de Windows involucradas (el pequeño arranque y la partición C:). Actualicé todo correctamente, por supuesto. :)
SuperTempel
Ciertamente, las cosas importantes están almacenadas \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.
Ben Voigt
@Ben: sí, sé sobre bcdedit, pero no quiero editar nada, por lo que puedo decir, ya que no quiero cambiar ninguna de sus opciones, ya que estaban en su lugar antes de mover las particiones a un nuevo disco . Todo lo que quiero actualizar es cualquier número de bloque fijo y referencias de ID de disco, sin el uso de ningún ejecutable de Windows, si es posible.
SuperTempel
1
No es una pregunta de programación. Este es un conocimiento de dominio sobre el gestor de arranque de Windows.
Andrew Medico

Respuestas:

1

La forma mas facil?

Coloque el disco de instalación de Windows Vista o Windows 7 en la unidad de disco y luego inicie la computadora.
Presione una tecla cuando se le solicite.
Seleccione un idioma, una hora, una moneda, un teclado o un método de entrada, y luego haga clic en Siguiente.
Haz clic en Reparar tu computadora.
Haga clic en el sistema operativo que desea reparar y luego haga clic en Siguiente.
En el cuadro de diálogo Opciones de recuperación del sistema, haga clic en Símbolo del sistema.
Escriba Bootrec.exe y presione ENTRAR.

Opciones de Bootrec.exe
La herramienta Bootrec.exe admite las siguientes opciones. Use la opción que sea apropiada para su situación.

Nota Si reconstruir el BCD no resuelve el problema de inicio, puede exportar y eliminar el BCD y luego ejecutar esta opción nuevamente. Al hacer esto, se asegura de que el BCD esté completamente reconstruido.

Para ello, escriba los siguientes comandos en el símbolo del sistema de Windows RE:
bcdedit / export C: \ BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c: \ boot \ bcd bcd.old
bootrec / RebuildBcd

o / FixMbr o / FixBoot o / ScanOs o / RebuildBcd según la situación.

Consulte: Support.Microsoft.com para más detalles.

Essobi
fuente
1
Gracias por intentar ayudar, pero lo que dices es conocimiento estándar, como señalas. Necesito específicamente la información de "lo que está sucediendo" para lograr esto en mi propio programa escrito, no mediante el uso del software de Microsoft, que todavía es difícil de manejar para un usuario trivial. Quiero poder proporcionar una solución a un usuario de Mac con una instalación de Boot Camp, en caso de que necesite mover esto a otro disco. Y como efecto secundario de eso, también ayudaría a cualquier otro usuario de Windows, ya que las tareas serían las mismas.
SuperTempel
Si intentara hacer eso ... haría el disco antes y después y haría una comparación binaria entre los dos. Buena suerte.
Essobi
Estoy por delante de ti, otra vez. Mira, soy el autor de iBored, así que sé cómo hacer cosas así, y créeme, lo he intentado. Sin embargo, el nuevo formato es demasiado críptico para mí, y es por eso que hago esta pregunta aquí.
SuperTempel