Was muss aktualisiert werden, um eine bootfähige NTFS-Partition mit Windows auf einen anderen Blockversatz zu verschieben, damit sie wieder bootfähig ist?
Hintergrund: Ich habe vor, ein Programm zu schreiben, das die erforderlichen Aktionen ausführt. Deshalb suche ich nicht nach Anleitungen zur Verwendung der Microsoft-Tools durch Booten von einer Windows-DVD. Stattdessen muss ich diese Dinge selbst ändern, 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.
Insbesondere habe ich Folgendes versucht:
Ich habe eine Festplatte mit mehreren Partitionen, von denen eine die NTFS-Partition mit Windows ist, und die Festplatte verwendet den einfachen alten MBR-Block 0 für das Partitionslayout (nicht mehr als 4 Partitionen).
Jetzt formatiere und partitioniere ich eine neue, größere Festplatte. Dort mache ich Platz für die NTFS-Partition und kopiere den Inhalt von der NTFS-Windows-Partition der alten Festplatte in. Und ich mache die Partition "aktiv".
Wenn ich jedoch versuche, von dieser Festplatte zu booten, wird sofort die Meldung "Lesefehler" angezeigt, und der Startvorgang wird beendet. Der genaue Text lautet:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Ich habe überprüft, dass beide Festplatten in Block 0 denselben Bootsektorcode haben.
Es scheint mir, dass etwas anderes aktualisiert werden muss. Ich vermute, dass es irgendwo eine absolute Blockreferenz gibt , die ich aktualisieren muss, wahrscheinlich auf den Loader der nächsten Ebene oder auf den NT-Kernel.
Update: Ich habe festgestellt, dass dieser Artikel ziemlich tief in das eingeht, was ich wissen möchte. Es heißt jedoch, boot.ini zu ändern, aber ich habe Windows 7 hier installiert, wo sich anscheinend Folgendes geändert hat: Keine boot.ini, sondern ein Ordner namens System Volume Information mit GUID und anderen Daten, die sich auf mein Problem beziehen . Ich werde weiter graben ...
Update 2: Dank der schrecklich aussehenden, aber sehr informativen Website von starman konnte 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 erhalte ich jedoch stattdessen den Fehler "BOOTMGR fehlt". Es sieht so aus, als ob es einen anderen Ort gibt, an dem eine Blocknummer angepasst werden muss, aber ich kann nichts in der Codeliste dazu finden.
Ich finde viele Hilfeseiten, die Windows-Tools zur Behebung dieses Problems "BOOTMGR fehlt" vorschlagen, aber keiner scheint zu wissen, was sich hinter den Kulissen abspielt. Ein bisschen wie der Vorschlag, Windows neu zu installieren, wenn es ein kleines Problem gibt. Zumindest scheinen diese Korrekturen zu funktionieren, hauptsächlich mit den Tools Bcdedit und Bootrec. Wer weiß nun, was sie in Bezug auf eine verschobene Partition tun, insbesondere letztere?
Update 3: Nach vielen Versuch-und-Irrtum-Versuchen glaube ich jetzt, dass die Lösung in der BCD-Template- Registrierungsdatei liegt, die sich normalerweise in \ Windows \ System32 \ config befindet. Wenn ich dies mit dem Befehl "bcdboot" aktualisiere, startet Windows damit. Ich bin gerade dabei herauszufinden, welche Informationen diese Registrierung für die obige Frage relevant enthält. Hinweise auf den Inhalt dieser Registrierung sind willkommen.
Update 4: Es stellt sich heraus, dass sich die darin enthaltenen Werte nicht ändern, während die BCD-Template-Datei neu geschrieben wird und einen anderen Binärinhalt als der Vorgänger hat. Es muss also etwas anderes sein, das bcdboot.exe schreibt. Ich hatte zuvor bereits geprüft, ob die ersten 32 Startblöcke der Partition geändert werden, aber sie scheinen unverändert zu bleiben. Die Parititon-Karte wird ebenfalls nicht geändert. Was ändert bcdboot neben der BCD-Registrierung? Irgendwelche Tipps, wie ich das verfolgen kann? Gibt es Tools auf niedriger Ebene, die mir zeigen, in welche Dateien ein Programm schreibt?
Update 5: Die Antwort scheint zu lauten: c: \ Boot \ BCD wird ebenfalls geändert, und dies scheint die Schlüsseldatei für den Prozess des Bootmanagers zu sein. Ich werde das später untersuchen ...
Update 6: Es scheint ein wichtiges Detail zu sein, dass ich ursprünglich zwei Partitionen erstellt habe, als ich Windows 7 installiert habe: Eine kleine Partition mit 204800 Sektoren, die anscheinend eine Bootstrap-Partition ist, gefolgt von der tatsächlichen 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 zwei Partitionen auf dem neuen Laufwerk intakt gehalten, obwohl sie einen anderen Versatz hatten. Dies allein führte zur Meldung "BOOTMGR fehlt". Seitdem habe ich bcdboot.exe nur auf der Windows-Partition verwendet, die hinzugefügt wurdedie \ Boot \ BCD-Datei auf dieser Partition. Diese Datei (und dieser Ordner) waren ursprünglich nur auf der kleineren Partition vorhanden. Daher kann dieses Problem in meinem Fall komplizierter sein, da sich eine Partition (der Bootstrapper) auf eine andere Partition bezieht (die das Betriebssystem enthält), während andere Personen möglicherweise nur mit einer Partition arbeiten müssen, die beide enthält, und möglicherweise dort die Lösung ist einfacher.
Update 7: Ein weiteres Detail gefunden: In der Datei \ Boot \ BCD wird die Seriennummer des MBR aufgezeichnet. Wenn diese Nummer nicht übereinstimmt, startet das System nicht. Als nächstes werde ich testen, ob dort auch eine absolute Blockreferenz gespeichert ist.
\BCD\Boot
, und Sie würden das normalerweise mit bearbeiten bcdedit.exe
, nicht mit bcdboot
. Und ja, die separate Partition für das Boot-Strapping (die nur erforderlich ist, wenn Sie die Vollplattenverschlüsselungsfunktion verwenden, da der Entschlüsselungscode dann außerhalb der Windows-Hauptpartition gespeichert werden muss) steuert den Startvorgang, falls vorhanden.