Warum enthält eine geklonte Windows 7-BCD unvollständige Daten (und verhindert daher das Booten)?


9

Ich hatte das Unglück, eine doppelt bootende Windows XP / 7-Box klonen zu müssen, um ihre Festplatte durch eine kleinere zu ersetzen. Ich hatte große Probleme, es zu booten und würde gerne verstehen, was los ist und ob ich etwas besseres machen könnte.

Hintergrund: Die Maschine verfügt über ein 750-GB-Laufwerk mit drei Partitionen:

  • Windows XP
  • Windows 7
  • Daten

Die ursprüngliche Installation wurde so durchgeführt, dass keine separate Windows 7-Wiederherstellungspartition vorhanden ist. Ich hoffe, dass diese Tatsache die Dinge etwas vereinfacht.

Ich ersetze es durch ein 80-GB-Laufwerk. Die Partitionen wurden bereits in Windows 7 verkleinert, sodass sie auf die kleinere Festplatte passen.

Ich habe GParted(von einer PartedMagicLinux LiveCD) verwendet, um die Partitionen zu kopieren. Ich markiere die Windows XP-Partition als die aktive Partition (die gleiche wie auf der Originaldiskette).

CloneZillaAufgrund des Übergangs von einer größeren zu einer kleineren Festplatte konnte ich keine vollständige Disc kopieren.

Nach dem Kopieren der Partitionen habe ich den Bootloader manuell kopiert (wobei darauf geachtet wurde, die Partitionstabelle nicht zu kopieren):

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

Ich habe die Originaldiskette entfernt, die neue so eingestellt, dass sie physisch mit der Originaldiskette (IDE-Kanal 1-Master) identisch ist, und habe versucht zu booten. Dadurch wurde das Startmenü erfolgreich angezeigt, aber bei Auswahl einer der beiden Optionen ist dies fehlgeschlagen (es gibt zwei Optionen: eine für XP und eine für Win7).

Ich habe ein bisschen nachgeforscht und festgestellt, dass die Windows 7-Startkonfigurationsdaten nicht alles enthalten, was sie sollten. Ich verglich die BCD-Ausgabe der Original- und der neuen Festplatte und stellte fest, dass die Geräteeinträge auf letzterer vorhanden waren unknown. Also habe ich sie manuell geändert, um sie dem Original anzupassen - so:

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

und neu gestartet. Diesmal konnte ich sowohl XP als auch Win7 booten. Ich muss mehr Tests durchführen, da es andere Unterschiede zwischen den beiden BCDs zu geben scheint, aber die oben genannten Änderungen zumindest das Booten ermöglichten.

Meine Frage ist also wirklich, warum der BCD auf einer geklonten Partition anders als das Original aussieht und ausreichend, um das Booten zu verhindern.

Und eine Folge davon wäre zu fragen, ob ich das anders machen sollte?

Antworten:


13

Nach dem Klonen von Partitionen, die Windows-Betriebssysteme enthalten, müssen die Startkonfigurationsdaten repariert werden, wenn sich die geklonten Partitionen auf der geklonten CD nicht genau an der Position befinden, an der sie sich auf dem Original befinden.

Der Windows-Startmechanismus speichert seit Windows Vista seine Konfiguration als "Boot Configuration Data" (BCD). Dies bezieht sich auf Partitionen, nicht nach Partitionsnummern, sondern nach Datenträgersignatur und Sektorversatz. Die Datenträgersignatur ist ein 32-Bit-Wert, der in den Master Boot Record eingebettet ist. Durch Kopieren der ersten 446 Bytes von Sektor 0 wird die Plattensignatur kopiert.

Wenn Klonaktivitäten dazu führen, dass die geklonten Festplattenpartitionen andere Startsektoradressen haben als die ursprünglichen (höchstwahrscheinlich, sofern nicht ein Klon für die gesamte Festplatte verwendet wurde), kann der Klon höchstwahrscheinlich erst gestartet werden, nachdem diese Maßnahmen ergriffen wurden.

Grundsätzlich müssen die Sektor-Offsets aktualisiert werden. Dazu benötigen Sie eine Wiederherstellungskonsole (diese ist auf einer Windows 7-Installations-DVD verfügbar). Stellen Sie sicher, dass nur das geklonte Laufwerk angeschlossen ist, und starten Sie von einer Windows 7-Installations-DVD. Treffen Sie auf dem ersten Bildschirm eine Sprachauswahl und klicken Sie auf "Weiter". Drücken Sie im nächsten Bildschirm (in dem "Jetzt installieren" angezeigt wird) UMSCHALT + F10, um eine Eingabeaufforderung zu erhalten.

Überprüfen Sie zunächst die vorhandenen Laufwerksbuchstaben und die zugehörigen Partitionen:

diskpart
list volume
exit

Bestätigen Sie gegebenenfalls die aktive Partition erneut:

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

Auf einem BIOS - System wird der BCD in einer Datei zu gespeichert , X:\Boot\BCDwo Xdie Laufwerksbuchstabe der aktiven Partition (für UEFI es ist in der EFI - Systempartition). Normalerweise versteckt, kann es mit gesehen werden

dir /AH X:\Boot

Es kann folgendermaßen gesichert werden:

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

und restauriert

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

Wenn auf einer Festplatte mehrere Betriebssysteme installiert sind, befinden sich möglicherweise mehrere BCDs. Der aktive BCD ist derjenige in \Boot\BCDder Partition, der als aktiv markiert ist - die aktive Partition . Um seinen Inhalt aufzulisten (in aufsteigender Reihenfolge der Ausführlichkeit :)

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

Um den aktiven BCD zu reparieren, stellen Sie die Laufwerksbuchstaben für die richtigen Partitionen her und führen Sie folgende Schritte aus:

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:

oder, um einen anderen BCD zu reparieren (in diesen Beispielen unter "X: \ boot \ bcd"):

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:

Zum Beispiel, mein System, das XP und 7 hat und XP als eingeschaltet C:und 7 als eingeschaltet anzeigt D:und die aktive Partition ist C:. dann ist der aktive BCD auf c:\boot\BCD. Der Bootmanager befindet sich unter C:\bootmgrund die Speicherdiagnose unter C:\boot\memtest.exe. Die erforderlichen Befehle lauten:

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:

Mit diesen Änderungen konnte das System erfolgreich gestartet werden, indem der Computer neu gestartet wurde (durch Drücken von Alt-F4 wird dies erreicht) und die DVD entfernt wurde.

Weitere Lektüre:

(Ein Klon der gesamten Festplatte sollte diese Probleme nicht haben, da das Partitionslayout auf der Kopie genau dem Original entsprechen sollte.)


Beachten Sie, dass dies bcdbooteine einfachere Möglichkeit darstellt, einen Starteintrag neu zu erstellen. Ich bin jedoch nicht sicher, ob er in einem XP / W7-Dual-Boot-Szenario geeignet ist.
Harry Johnston

Ich liebe deine Antwort, aber könntest du es bitte ein bisschen aufräumen? Ich denke, es gibt eine Menge irrelevanter Informationen (wie Beispielbefehle, wenn Sie den tatsächlichen Befehl direkt danach haben, usw.).
Bigbio2002,

Ich bin froh, dass du den Anser magst, aber ich glaube nicht, dass da eine Menge irrelevanter Informationen drin sind. Ich habe eine allgemeine Erklärung und ein reales Beispiel am Ende, das tatsächlich zeigt, wie die Partitionen für jeden Eintrag ermittelt werden, der geändert werden muss. Ich brauchte alle oben genannten Kenntnisse, um mein geklontes System zu reparieren, und präsentierte es daher als vollständige Antwort, um möglichst viele Informationen für andere bereitzustellen.
Starfry

7

Gemäß dieser inoffiziellen Dokumentation zu BCD-Interna werden Partitionen im BCD-Speicher tatsächlich durch die Datenträgersignatur und den Partitionsoffset identifiziert. Sie haben die Datenträgersignatur (MBR-Bytes 440–443) kopiert, aber höchstwahrscheinlich die Partitionsversätze geändert, als Sie Partitionen auf eine kleinere Festplatte verschoben haben. Daher konnte BOOTMGR diese Partitionen nicht mehr finden.


Das ist interessant und erklärt sicherlich, warum es nicht funktionieren würde - die Partitionsversätze wären auf jeden Fall anders. Warum-oh-warum das nicht mehr formal dokumentiert ist, kann man nur vermuten! Gibt es eine akzeptierte (offizielle oder inoffizielle) Möglichkeit, dies auf einer geklonten Festplatte zu "reparieren"?
Starfry

Ich nehme an, dass die offizielle Methode darin besteht, von einer zuvor vorbereiteten Systemreparatur-CD (oder einem realen Installationsmedium, falls vorhanden, und nicht einem DOEM-Wiederherstellungsmedium) zu booten und Startup Repair auszuführen . Wenn dies fehlschlägt, installieren Sie das Betriebssystem neu. Ich bin mir nicht sicher, ob Startup Repair in Ihrem Fall auch XP wiederherstellen würde.
Sergey Vlasov

@starfry Es gibt viele BCD-Editoren, darunter die integrierte Befehlszeile one ( bcdedit). Ich selbst bevorzuge Visual BCD Editor. Wenn Sie in eine Windows-Umgebung gelangen, können Sie mit Visual BCD das Startgerät ganz einfach einstellen. Sie können dasselbe von der Boot-DVD aus tun, indem Sie die Eingabeaufforderung öffnen (ich glaube, es war F11 oder so) und bcdeditdort verwenden. Ich würde gegen die Systemreparatur raten, wenn Sie das Problem manuell beheben möchten, da bei der Systemreparatur zuvor die Umgebung für die Festplattenwiederherstellung entfernt wurde.
Bob

Danke sergey und @bob. Ich habe diese Antwort akzeptiert, weil es mich veranlasst hat zu verstehen, was los ist. Ich habe das, was ich jetzt weiß, in einer separaten Antwort dokumentiert.
Starfry

Entschuldigen Sie meine Unwissenheit, aber wenn @starfry Byte für Byte über sda kopiert (nicht über sda1 die Partition), sondern über sda das gesamte Laufwerk, warum sollten dann die Partitionsoffsets unterschiedlich sein?
Barlop
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.