Was muss aktualisiert werden, wenn eine bootfähige Windows 7- (oder Vista-) Partition verschoben wird?


9

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.


Haben Sie sich nur gefragt, ob Sie sichergestellt haben, dass die versteckte Systempartition korrekt verschoben wurde?
Colum

Welche versteckte Partition meinst du? Ich habe gerade das Update Nr. 6 hinzugefügt, das sich mit der zusätzlichen Boot-Partition befasst, und ja, das habe ich auch verschoben. Es gab auch einen anderen "versteckten" Bereich zwischen dem MBR und dem Start der Windows-Partition (en), aber das sollte nicht relevant sein - das ist nur ein Datenklumpen (in meinem Fall: Eine HFS + -Partition, während ich mich bewege eine Boot Camp Installation hier). Die einzigen beteiligten Dinge sollten sein: Die Partitionszuordnung (MBR plus GUID-Partitionszuordnung danach) und die beiden beteiligten Windows-Partitionen (der kleine Booter und die C: -Partition). Ich habe natürlich alles richtig aktualisiert. :)
SuperTempel

Mit Sicherheit sind die wichtigen Dinge in gespeichert \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.
Ben Voigt

@Ben: Ja, ich weiß über bcdedit Bescheid - aber ich möchte nichts bearbeiten, soweit ich das beurteilen kann, da ich keine der vorhandenen Optionen ändern möchte, bevor ich die Partitionen auf eine neue Festplatte verschoben habe . Alles, was ich aktualisieren möchte, sind feste Blocknummern und Festplatten-ID-Referenzen, wenn möglich ohne Verwendung von ausführbaren Windows-Dateien.
SuperTempel

1
Keine Programmierfrage. Dies ist Domänenwissen über den Windows-Bootloader.
niemand

Antworten:


1

Der einfachere Weg?

Legen Sie die Windows Vista- oder Windows 7-Installations-CD in das 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 Bootrec.exe-Tool unterstützt die folgenden Optionen. Verwenden Sie die für Ihre Situation geeignete Option.

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


Geben Sie dazu an der Windows RE-Eingabeaufforderung die folgenden Befehle 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.

Weitere Informationen finden Sie unter: Support.Microsoft.com .


1
Vielen Dank, dass Sie versucht haben zu helfen, aber was Sie sagen, ist Standardwissen, wie Sie betonen. Ich benötige speziell die Informationen "Was ist los?", Um dies in meinem eigenen schriftlichen Programm zu erreichen, und nicht mithilfe der Microsoft-Software, die für einen trivialen Benutzer immer noch schwer zu handhaben ist. Ich möchte einem Mac-Benutzer mit einer Boot Camp-Installation eine Lösung anbieten können, falls er diese auf eine andere Festplatte verschieben muss. Und als Nebeneffekt würde es auch jedem anderen Windows-Benutzer helfen, da die Aufgaben dieselben wären.
SuperTempel

Wenn ich das versuchen würde ... würde ich die Festplatte vorher und nachher dd und einen binären Vergleich zwischen den beiden durchführen. Viel Glück.
Essobi

Ich bin wieder vor dir. Ich bin der Autor von iBored, also weiß ich, wie man solche Dinge macht, und glaube mir, ich habe es versucht. Das neue Format ist mir jedoch zu kryptisch, und deshalb stelle ich diese Frage hier.
SuperTempel
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.