Perché un BCD clonato di Windows 7 contiene dati incompleti (e, quindi, impedisce l'avvio)?


9

Ho avuto la sfortuna di dover clonare un box Windows XP / 7 a doppio avvio per sostituire il suo disco rigido con uno più piccolo. Ho avuto grossi problemi ad avviarlo e vorrei capire cosa sta succedendo e se potrei fare qualcosa di meglio.

Sfondo: la macchina ha un disco da 750 Gb con 3 partizioni:

  • Windows XP
  • Windows 7
  • Dati

L'installazione originale è stata eseguita in modo tale che non vi sia alcuna partizione di ripristino di Windows 7 separata. Spero che questo fatto semplifichi un po 'le cose.

Lo sto sostituendo con un disco da 80 GB. Le partizioni sono già state ridotte da Windows 7 in modo da adattarsi al disco più piccolo.

Ho usato GParted(da un PartedMagicLiveCD Linux) per copiare le partizioni. Contrassegno la partizione di Windows XP come partizione attiva (la stessa del disco originale).

Non sono stato in grado di utilizzare CloneZillao eseguire un'intera copia del disco a causa del passaggio da un disco più grande a uno più piccolo.

Dopo aver copiato le partizioni, ho copiato manualmente il boot loader (facendo attenzione a non copiare la tabella delle partizioni):

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

Ho rimosso il disco originale, impostato quello nuovo in modo che sia fisicamente collegato come l'originale (IDE canale 1 master) e ho provato l'avvio. Questo ha presentato con successo il menu di avvio ma non è riuscito selezionando un'opzione (ce ne sono due: uno per XP e uno per Win7).

Ho fatto un bel po 'di ricerche che mi hanno permesso di realizzare che i dati di configurazione di avvio di Windows 7 non contenevano tutto ciò che dovrebbe. Ho confrontato l'uscita BCD dai dischi originali e nuovi e ho notato che le voci del dispositivo su quest'ultimo erano unknown. Quindi li ho cambiati manualmente per abbinare l'originale - in questo modo:

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

e riavviato. Questa volta ho potuto avviare sia XP che Win7. Ho bisogno di fare più test perché sembrano esserci altre differenze tra i due BCD, ma apportare le modifiche di cui sopra ha almeno permesso l'avvio.

Quindi la mia domanda è davvero chiedermi perché il BCD su una partizione clonata sembrerebbe diverso dall'originale e sufficientemente per impedire l'avvio?

E un seguito sarebbe quello di chiedere se dovrei farlo in un altro modo?

Risposte:


13

Dopo la clonazione di partizioni contenenti sistemi operativi Windows, è necessario correggere i dati di configurazione di avvio se le partizioni clonate non si trovano esattamente nella stessa posizione sul disco clonato rispetto all'originale.

Il meccanismo di avvio di Windows, dal momento che Windows Vista, memorizza la sua configurazione come "Dati di configurazione di avvio" (BCD) e questo si riferisce alle partizioni, non per numeri di partizione ma per firma del disco e offset di settore. La firma del disco è un valore a 32 bit incorporato nel Master Boot Record. La copia dei primi 446 byte del settore 0 copierà la firma del disco.

Se le attività di clonazione comportano che le partizioni del disco clonato abbiano indirizzi di settore di partenza diversi rispetto a quelli originali (molto probabilmente a meno che non sia stato utilizzato un clone di tutto il disco), molto probabilmente il clone non si avvierà fino a quando non verranno applicati questi rimedi.

Fondamentalmente, gli offset di settore devono essere aggiornati e, per questo, è necessario utilizzare una console di ripristino (disponibile su un DVD di installazione di Windows 7). Assicurarsi che sia collegata solo l'unità clonata e avviare da un DVD di installazione di Windows 7. Alla prima schermata, seleziona la lingua e premi "Avanti". Nella schermata successiva (dove viene visualizzato "Installa ora") premere MAIUSC + F10 per ottenere un prompt dei comandi.

Innanzitutto, conferma le lettere di unità che sono in atto e le partizioni a cui si riferiscono:

diskpart
list volume
exit

Inoltre, se necessario, riconfermare la partizione attiva:

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

Su un sistema BIOS, il BCD è archiviato in un file in X:\Boot\BCDcui si Xtrova la lettera di unità della partizione attiva (per UEFI è nella partizione di sistema EFI). Normalmente nascosto, può essere visto con

dir /AH X:\Boot

È possibile eseguire il backup in questo modo:

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

e restaurato

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

Se su un disco sono presenti più sistemi operativi, potrebbero essere presenti più BCD. Il BCD attivo è quello in at \Boot\BCDsulla partizione contrassegnata come attiva: la partizione attiva . Per elencare i suoi contenuti (in ordine crescente di verbosità :)

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

Per correggere il BCD attivo, stabilire le lettere di unità per le partizioni corrette ed eseguire:

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:

oppure, per correggere un altro BCD (in "X: \ boot \ bcd" in questi esempi):

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:

Ad esempio, il mio sistema che ha XP e 7 e mostra XP come acceso C:e 7 acceso D:e la partizione attiva è C:. allora il BCD attivo sarà a c:\boot\BCD. Il boot manager si troverà in C:\bootmgre la diagnostica della memoria sarà in C:\boot\memtest.exe, I comandi richiesti sarebbero:

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 queste modifiche, il riavvio del computer (premendo Alt-F4 lo farà) e la rimozione del DVD ha permesso al sistema di avviarsi correttamente.

Ulteriori letture:

(un clone dell'intero disco non dovrebbe presentare questi problemi perché il layout della partizione sulla copia dovrebbe essere esattamente lo stesso dell'originale)


Si noti che bcdbootfornisce un modo più semplice per ricreare una voce di avvio, ma non sono sicuro che sarebbe adatto in uno scenario a doppio avvio XP / W7.
Harry Johnston,

Adoro la tua risposta, ma potresti per favore pulirla un po '? Penso che ci siano molte informazioni estranee (come comandi di esempio, quando hai subito il comando vero e proprio, ecc.).
Bigbio2002,

Sono contento che ti piaccia la risposta, ma non credo che ci siano molte informazioni estranee lì dentro. Ho una spiegazione generale più un vero esempio alla fine che in realtà dimostra come determinare le partizioni per ogni voce che deve essere modificata. Avevo bisogno di tutte le conoscenze di cui sopra per sistemare il mio sistema clonato e, quindi, lo ho presentato come una risposta completa per fornire quante più informazioni agli altri.
Starfry,

8

Secondo questa documentazione non ufficiale sugli interni BCD , le partizioni nell'archivio BCD sono effettivamente identificate dalla firma del disco e dall'offset della partizione. Hai copiato la firma del disco (byte MBR 440–443), ma molto probabilmente hai cambiato gli offset delle partizioni quando hai inserito le partizioni su un disco più piccolo, quindi BOOTMGR non è più riuscito a trovare queste partizioni.


È interessante e certamente spiega perché non funzionerebbe: gli offset delle partizioni sarebbero sicuramente diversi. Perché-oh-perché questo non è più formalmente documentato è un'ipotesi di nessuno! Esiste un modo accettato (ufficiale o non ufficiale) di "ripararlo" su un disco clonato?
Starfry,

Suppongo che il modo ufficiale sia "avviare da un disco di riparazione del sistema precedentemente preparato (o un supporto di installazione reale, se lo si possiede e non un supporto di ripristino DOEM) ed eseguire Startup Repair ; in caso contrario, reinstallare il sistema operativo ”. Non sono sicuro se anche Startup Repair ripristinerà XP nel tuo caso.
Sergey Vlasov,

@starfry Esistono molti editor BCD, incluso quello incorporato da riga di comando ( bcdedit). Prediligo personalmente Visual BCD Editor. Se riesci a entrare in un ambiente Windows, Visual BCD rende abbastanza facile impostare il dispositivo di avvio. Puoi fare lo stesso dal DVD di avvio aprendo il prompt dei comandi (penso che fosse F11 o qualcosa del genere) e utilizzandolo bcdeditlì. Vorrei sconsigliare la riparazione del sistema se si ha voglia di ripararlo manualmente, dal momento che ho avuto la riparazione del sistema rimuovere l'ambiente di recupero su disco prima.
Bob

Grazie sergey e @bob. Ho accettato questa risposta perché mi ha spinto a comprendere appieno cosa sta succedendo. Ho documentato ciò che ora so in una risposta separata.
Starfry,

scusa la mia ignoranza, ma se @starfry è byte per byte copiando su sda (non sda1 la partizione), ma sda l'intera unità, allora perché gli offset della partizione sarebbero diversi?
barlop
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.