¿Por qué un BCD de Windows 7 clonado contiene datos incompletos (y, por lo tanto, evita el arranque)?

9

Tuve la desgracia de necesitar clonar una caja de Windows XP / 7 de arranque dual para reemplazar su disco duro por uno más pequeño. Tuve grandes problemas para arrancar y me gustaría entender qué está pasando y si podría estar haciendo algo mejor.

Antecedentes: la máquina tiene una unidad de 750 Gb con 3 particiones:

  • Windows XP
  • Windows 7
  • Datos

La instalación original se realizó de tal manera que no hay una partición de recuperación de Windows 7 separada. Espero que este hecho simplifique un poco las cosas.

Lo estoy reemplazando con una unidad de 80 Gb. Las particiones ya se han reducido desde Windows 7 para que quepan en el disco más pequeño.

Utilicé GParted(desde un PartedMagicLiveCD de Linux) para copiar las particiones. Marco la partición de Windows XP como la partición activa (igual que en el disco original).

No pude usar CloneZillao hacer una copia completa del disco debido a la transición de un disco más grande a uno más pequeño.

Después de copiar las particiones, copié manualmente el cargador de arranque (cuidando de no copiar la tabla de particiones):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

Quité el disco original, configuré el nuevo para que esté físicamente conectado igual que el original (maestro IDE del canal 1) e intenté arrancar. Esto presentó con éxito el menú de inicio pero falló al seleccionar cualquiera de las opciones (hay dos: una para XP y otra para Win7).

Hice una buena investigación que me permitió darme cuenta de que los datos de configuración de arranque de Windows 7 no contenían todo lo que debería. Comparé la salida BCD de los discos originales y nuevos y noté que las entradas del dispositivo en este último eran unknown. Así que los cambié manualmente para que coincidan con el original, así:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

y reiniciado. Esta vez pude arrancar tanto XP como Win7. Necesito hacer más pruebas porque parece haber otras diferencias entre los dos BCD, pero hacer los cambios anteriores al menos permitió el arranque.

Entonces, mi pregunta es realmente preguntar por qué el BCD en una partición clonada sería diferente al original y lo suficiente como para evitar el arranque.

¿Y un seguimiento de eso sería preguntar si debería estar haciendo esto de otra manera?

starfry
fuente

Respuestas:

13

Después de clonar particiones que contienen sistemas operativos Windows, es necesario reparar los datos de configuración de arranque si las particiones clonadas no están exactamente en la misma posición en el disco clonado que en el original.

El mecanismo de arranque de Windows, desde Windows Vista, almacena su configuración como "Datos de configuración de arranque" (BCD) y esto se refiere a particiones, no por números de partición sino por una firma de disco y desplazamiento de sector. La firma del disco es un valor de 32 bits incrustado en el Master Boot Record. Copiar los primeros 446 bytes del sector 0 copiará la firma del disco.

Si las actividades de clonación dan como resultado que las particiones de disco clonadas tengan direcciones de sector de inicio diferentes que las originales (muy probablemente a menos que se haya usado un clon de disco completo), entonces el clon probablemente no se iniciará hasta que se apliquen estos remedios.

Básicamente, las compensaciones del sector deben actualizarse y, para esto, deberá usar una consola de recuperación (está disponible en un DVD de instalación de Windows 7). Asegúrese de que solo la unidad clonada esté conectada y arranque desde un DVD de instalación de Windows 7. En la primera pantalla, haga selecciones de idioma y presione "siguiente". En la siguiente pantalla (donde se muestra "instalar ahora") presione MAYÚS + F10 para obtener un símbolo del sistema.

Primero, confirme las letras de unidad que están en su lugar y las particiones con las que se relacionan:

diskpart
list volume
exit

Además, si lo necesita, vuelva a confirmar la partición activa:

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

En un sistema BIOS, el BCD se almacena en un archivo X:\Boot\BCDdonde Xestá la letra de la unidad de la partición activa (para UEFI está en la partición del sistema EFI). Normalmente oculto, se puede ver con

dir /AH X:\Boot

Se puede hacer una copia de seguridad de esta manera:

bcdedit /export X:\path\to\bcd\backup

y restaurado

bcdedit /import X:\path\to\bcd\backup

Si un disco tiene varios sistemas operativos, puede haber varios BCD. El BCD activo es el que está \Boot\BCDen la partición marcada como activa: la partición activa . Para enumerar sus contenidos (en orden creciente de verbosidad :)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

Para arreglar el BCD activo, establezca las letras de unidad para las particiones correctas y haga:

bcdedit /set {default} osdevice partition=X:
bcdedit /set {default} device partition=X:
bcdedit /set {bootmgr} device partition=X:
bcdedit /set {memdiag} device partition=X:
bcdedit /set {ntldr} device partition=X:

o, para arreglar otro BCD (en "X: \ boot \ bcd" en estos ejemplos):

bcdedit /store X:\boot\bcd /set {default} osdevice partition=X:
bcdedit /store X:\boot\bcd /set {default} device partition=X:
bcdedit /store X:\boot\bcd /set {bootmgr} device partition=X:
bcdedit /store X:\boot\bcd /set {memdiag} device partition=X:
bcdedit /store X:\boot\bcd /set {ntldr} device partition=X:

Por ejemplo, mi sistema que tiene XP y 7 y muestran XP como encendido C:y 7 encendido D:y la partición activa es C:. entonces el BCD activo estará en c:\boot\BCD. El administrador de arranque se encontrará en C:\bootmgry el diagnóstico de memoria estará en C:\boot\memtest.exe, Los comandos requeridos serían:

bcdedit /set {ntldr} device partition=C:
bcdedit /set {memdiag} device partition=C:
bcdedit /set {bootmgr} device partition=C:
bcdedit /set {default} device partition=D:
bcdedit /set {default} osdevice partition=D:

Con esos cambios, reiniciar la computadora (al presionar Alt-F4 se logrará esto) y quitar el DVD permitió que el sistema se iniciara correctamente.

Otras lecturas:

(un clon de disco completo no debería sufrir estos problemas porque el diseño de la partición en la copia debe ser exactamente el mismo que el original)

starfry
fuente
Tenga en cuenta que bcdbootproporciona una manera más fácil de recrear una entrada de arranque, pero no estoy seguro de que sea adecuada en un escenario de arranque dual XP / W7.
Harry Johnston
Me encanta tu respuesta, pero ¿podrías por favor limpiarla un poco? Creo que hay mucha información extraña (como comandos de ejemplo, cuando tienes el comando real justo después, etc.).
Bigbio2002
Me alegra que te guste el Anser, pero no creo que haya mucha información extraña allí. Tengo una explicación general más un ejemplo real al final que realmente demuestra cómo determinar las particiones de cada entrada que necesita ser cambiada. Necesitaba todo el conocimiento anterior para arreglar mi sistema clonado y, por lo tanto, lo presenté como una respuesta completa para proporcionar tanta información a los demás.
Starfry
8

De acuerdo con esta documentación no oficial sobre componentes internos de BCD , las particiones en el almacén de BCD se identifican realmente por la firma del disco y el desplazamiento de la partición. Copió la firma del disco (MBR bytes 440–443), pero muy probablemente cambió las compensaciones de partición al colocar particiones en un disco más pequeño, por lo tanto, BOOTMGR ya no pudo encontrar estas particiones.

Sergey Vlasov
fuente
Eso es interesante y ciertamente explica por qué no funcionaría: las compensaciones de partición serían definitivamente diferentes. ¡Por qué, oh, por qué esto no está más formalmente documentado es una incógnita! ¿Existe una forma aceptada (oficial o no oficial) de "reparar" esto en un disco clonado?
Starfry
Supongo que la forma oficial es "iniciar desde un disco de reparación del sistema previamente preparado (o un medio de instalación real, si lo tiene y no un medio de recuperación de DOEM) y ejecutar Reparación de inicio ; si eso falla, reinstale el sistema operativo ". No estoy seguro si Startup Repair también recuperaría XP en su caso.
Sergey Vlasov
@starfry Existen muchos editores BCD, incluida la línea de comandos integrada one ( bcdedit). Estoy a favor de Visual BCD Editor yo mismo. Si puede acceder a un entorno de Windows, Visual BCD facilita la configuración del dispositivo de arranque. Puede hacer lo mismo desde el DVD de arranque abriendo el símbolo del sistema (creo que fue F11 o algo así) y utilizándolo bcdeditallí. Recomendaría contra la reparación del sistema si tiene ganas de arreglarlo manualmente, ya que la reparación del sistema eliminó el entorno de recuperación en disco antes.
Bob
Gracias sergey y @bob. He aceptado esta respuesta porque me llevó a comprender completamente lo que está sucediendo. He documentado lo que ahora sé en una respuesta separada.
Starfry
disculpe mi ignorancia, pero si @starfry es byte por byte copiando sobre sda ​​(no sda1 la partición), pero sda toda la unidad, entonces ¿por qué las compensaciones de partición serían diferentes?
barlop