Was muss beim Verschieben einer bootfähigen Windows 7- (oder Vista-)Partition aktualisiert werden?

Was muss beim Verschieben einer bootfähigen Windows 7- (oder Vista-)Partition aktualisiert werden?

Wenn ich eine bootfähige NTFS-Partition mit Windows darauf an einen anderen Block-Offset verschiebe, was muss aktualisiert werden, damit sie wieder bootfähig ist?

Hintergrund: Ich habe vor, ein Programm zu schreiben, das die notwendigen Aktionen ausführt, deshalb suche ich nicht nach Anleitungen, wie man Microsoft-Tools beim Booten von einer Windows-DVD verwendet. Stattdessen brauche ich Anleitungen, wie ich diese Dinge selbst ändern kann, damit ich eine Lösung schreiben kann, die für den durchschnittlichen PC-Benutzer einfacher ist, wenn er sein Windows-System auf eine größere Festplatte verschieben möchte.

Im Einzelnen habe ich Folgendes versucht:

Ich habe eine Festplatte mit mehreren Partitionen, eine davon ist die NTFS-Partition mit Windows, und die Festplatte verwendet den guten alten MBR-Block 0 für das Partitionslayout (nicht mehr als 4 Partitionen).

Nun formatiere und partitioniere ich eine neue, größere Platte. Dort mache ich Platz für die NTFS-Partition und kopiere den Inhalt der NTFS-Windows-Partition der alten Platte hinein. Und ich mache die Partition "aktiv".

Wenn ich jedoch versuche, von dieser Diskette zu booten, erhalte ich sofort die Meldung „Lesefehler“ und der Bootvorgang wird abgebrochen. Der genaue Text lautet:

  A disk read error occurred
  Press Ctrl+Alt+Del to restart

Ich habe überprüft, dass beide Festplatten im Block 0 denselben Bootsektorcode haben.

Mir scheint, dass etwas anderes aktualisiert werden muss. Ich vermute, dass es irgendwo einabsolutBlockverweis, den ich aktualisieren muss, zeigt wahrscheinlich auf den Loader der nächsten Ebene oder auf den NT-Kernel.

Aktualisieren:ich fandDasArtikel, der ziemlich in die Tiefe dessen geht, was ich wissen möchte. Allerdings heißt es, boot.ini zu ändern, aber ich habe hier Windows 7 installiert, wo sich solche Dinge anscheinend geändert haben: Keine boot.ini, sondern ein Ordner namensInformationen zum Systemvolumenmit GUID und anderen Daten darin, die mit meinem Problem in Zusammenhang zu stehen scheinen. Ich werde weiter graben ...

Aktualisierung 2:Dank der schrecklich aussehenden, aber sehr informativenWebsite vonSternenmannkonnte ich den ersten Schritt herausfinden: Der NTFS-Bootsektor hat ein Feld für "versteckte" Sektoren. Dieses Feld muss die Sektornummer des Bootsektors enthalten. Dies löst die Meldung "Lesefehler". Jetzt bekomme ich jedoch stattdessen einen "BOOTMGR fehlt"-Fehler. Es sieht so aus, als ob es noch eine andere Stelle gibt, an der eine Blocknummer angepasst werden muss, aber ich kann im Code-Listing nichts dazu finden.

Ich finde zwar viele Hilfeseiten, die Windows-Tools zur Behebung des Problems „BOOTMGR fehlt“ empfehlen, aber keine davon scheint zu wissen, was hinter den Kulissen passiert. Das ist so, als würde man vorschlagen, Windows neu zu installieren, wenn es ein kleines Problem damit gibt. Zumindest scheinen diese Korrekturen zu funktionieren, hauptsächlich mit den Tools Bcdedit und Bootrec. Wer weiß nun, was diese Tools, insbesondere letzteres, in Bezug auf eine verschobene Partition tun?

Aktualisierung 3:Nach vielen Versuchen und Irrtümern glaube ich nun, dass die Lösung darin liegt,BCD-VorlageRegistrierungsdatei, die sich normalerweise unter \Windows\System32\config befindet. Wenn ich diese mit dem Befehl „bcdboot“ aktualisiere, startet Windows von dort aus. Ich bin gerade dabei herauszufinden, welche Informationen diese Registrierung enthält, die für die obige Frage relevant sind. Hinweise zum Inhalt dieser Registrierung sind willkommen.

Aktualisierung 4:Es stellt sich heraus, dass die BCD-Vorlagendatei zwar neu geschrieben wird und einen anderen Binärinhalt als ihr Vorgänger hat, die Werte darin sich jedoch nicht ändern. Es muss also etwas anderes sein, das bcdboot.exe schreibt. Ich hatte zuvor bereits überprüft, ob es die ersten 32 Bootblöcke der Partition ändert, aber sie scheinen unverändert zu bleiben. Auch die Partitionszuordnung wird nicht geändert. Was also ändert bcdboot außer der BCD-Registrierung? Irgendwelche Tipps, wie ich das nachverfolgen kann? Gibt es Low-Level-Tools, die mir zeigen, in welche Dateien ein Programm schreibt?

Aktualisierung 5:Die Antwort scheint zu sein: c:\Boot\BCD wurde ebenfalls geändert, und das scheint die Schlüsseldatei für den Prozess des Bootmanagers zu sein. Ich werde das später untersuchen ...

Aktualisierung 6:Es scheint ein wichtiges Detail zu sein, dass ich ursprünglich zwei Partitionen erstellt hatte, als ich Windows 7 installierte: Eine kleine Partition mit 204800 Sektoren, die eine Bootstrap-Partition zu sein scheint, gefolgt von der eigentlichen, großen Partition, die das Windows-System enthält (Laufwerk C:). Als ich versuchte, diese Installation auf eine neue, größere Festplatte zu übertragen, hatte ich dieselben beiden Partitionen auf der neuen Festplatte intakt gelassen, obwohl sie an einem anderen Offset landeten. Dies allein führte zu der Meldung „BOOTMGR fehlt“. Seitdem habe ich bcdboot.exe nur auf der Windows-Partition verwendet, washinzugefügtdie Datei \Boot\BCD auf dieser Partition. Diese Datei (und dieser Ordner) existierten ursprünglich nur auf der kleineren Partition. Daher ist dieses Problem in meinem Fall möglicherweise komplizierter, da eine Partition (der Bootstrap) auf eine andere Partition (die mit dem Betriebssystem) verwies, während andere Leute möglicherweise nur mit einer Partition zu tun haben, die beides enthält, und dort ist die Lösung vielleicht einfacher.

Aktualisierung 7:Noch ein Detail gefunden: In der Datei \Boot\BCD ist die Seriennummer des MBR gespeichert. Wenn diese Nummer nicht übereinstimmt, bootet das System nicht. Als nächstes werde ich testen, ob dort auch eine absolute Blockreferenz gespeichert ist.

Antwort1

Der einfachere Weg?

Legen Sie die Installations-CD für Windows Vista oder Windows 7 in das CD-Laufwerk ein und starten Sie den Computer.
Drücken Sie eine Taste, wenn Sie dazu aufgefordert werden.
Wählen Sie eine Sprache, eine Uhrzeit, eine Währung, eine Tastatur oder eine Eingabemethode aus und klicken Sie dann auf Weiter.
Klicken Sie auf Computer reparieren.
Klicken Sie auf das Betriebssystem, das Sie reparieren möchten, und klicken Sie dann auf Weiter.
Klicken Sie im Dialogfeld Systemwiederherstellungsoptionen auf Eingabeaufforderung.
Geben Sie Bootrec.exe ein und drücken Sie die EINGABETASTE.

Bootrec.exe-Optionen
Das Tool Bootrec.exe unterstützt die folgenden Optionen. Verwenden Sie die Option, die für Ihre Situation geeignet ist.

Hinweis: Wenn das Neuaufbauen des BCD das Startproblem nicht behebt, können Sie das BCD exportieren und löschen und diese Option dann erneut ausführen. Auf diese Weise stellen Sie sicher, dass das BCD vollständig neu aufgebaut wird.

Geben Sie dazu die folgenden Befehle in die Windows RE-Eingabeaufforderung ein:
bcdedit /export C:\BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /RebuildBcd

oder /FixMbr oder /FixBoot oder /ScanOs oder /RebuildBcd, je nach Situation.

Sehen:Support.Microsoft.comfür mehr Details.

verwandte Informationen