Einleitung
Die hier beschriebenen Befehle und Vorgehensweisen setzen eine umfangreiche Fachkentniss voraus und sollten nur von entsprechenden Personen genutzt werden. Die Benutzung geschieht auf eigene Gefahr und unter Ausschluß jeglicher Haftung. Insbesondere wird darauf hin gewießen, dass durch die hier genannten Befehle ein totaler Datenverlust möglich ist. Ein aktuelles Backup der Systeme sollte wo möglich immer vorhanden sein.
Leider zeigt die Praxis, dass auf IT-Systemen manchmal das Thema Backup schändlich vernachlässigt wird und dann Wiederherstellungsmaßnahmen wie hier beschrieben die einzige Rettung darstellen. Sollte der Leser die hier dargestellten Verfahren nicht vollumfänglich verstehen ist es jedoch sinnvoller professionele Hilfe hinzu zu ziehen.
Einzelne Punkte können hier übersprungen werden, sodass der Leser stets dort einsteigen kann wo es für Ihn und sein Fehlerszenario am sinnvollsten erscheint.
Wenn die Befehle unter Windows PE (bspw. von der Windows DVD) abgesetzt werden empfiehlt es sich zur Beschleunigung zunächst das Powerschema auf High Performance zu setzen:
# Powerschema auf High Performance setzen powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635
Begriffsdefinition
Systempartition = Partition auf welcher die Systemstartumgebung (Bootloader) liegt; kann unter BIOS-basierten Systemen identisch mit der Startpartition sein; wird auf EFI-basierten Systemen auch als ESP (EFI System Partition) bezeichnet
Startpartition = Partition auf welcher die Startumgebung (das Windows) liegt
MSR = Microsoft Reserved-Partition; Leere Partition laut Microsofts Partitionsschema vorgeschrieben
Recoverypartition = Partition mit Windows RE (Recovery Environment) für Wiederherstellungsoptionen
Systemart prüfen
Zunächst ist zur prüfen, ob es sich um ein BIOS-basiertes System oder ein UEFI-basiertes System handelt. Bei UEFI-basierten Systemen ist es zwingend erforderlich, dass die Windows Systempartition und die Windows Startpartition auf einer GPT-formartierten Festplatte (mit GUID-Partitionstabelle) liegt. Auf BIOS-basierten Systemen ist die Festplatte MBR-formartiert. Dies sowie auch die Einstellungen im BIOS oder EFI können Anhaltspunkt über die Systemart geben.
Hinweis: Nur das Vorhandensein von EFI garantiert nicht, dass das System auch als UEFI-basiertes System angelegt ist. Im Legacy Mode kann trotzdem ein BIOS-basiertes System gebootet werden.
Systempartition reparieren
Seit Windows 7 unterhält Windows in der Regel eine ca. 100 MB große Systempartition welche den Bootloader enthält. In seltenen Fällen kann auf BIOS-basierten Systemen diese Partition entfallen sein und liegt dann auf einer anderen Partition; dann muss der Laufwerksbuchstabe selbst ermittelt werden. Um die Systempartition und damit auch den Bootloader zu reparieren muss die separate Systempartition zuerst mit einem Laufwerksbuchstaben ausgestattet werden um dann darauf zugreifen zu können:
diskpart list disk # Korrekte Boot-Festplatte ermitteln und ihren Index nachfolgend als N einsetzen sel disk N list part # Die Systempartition ermitteln und nachfolgend als M einsetzen sel part M # Den Laufwerksbuchstaben V: zuweisen assign letter=V: exit
Der Laufwerksbuchstabe kann (und sollte auch unbedingt) später (ggf. in Windows) wieder entfernt werden.
Systempartition als aktiv markieren (nur BIOS-basierte Systeme mit MBR)
diskpart list disk # Korrekte Boot-Festplatte ermitteln und ihren Index nachfolgend als N einsetzen sel disk N list part # Die Systempartition ermitteln und nachfolgend als M einsetzen sel part M # Bei BIOS-basierten Systemen die Partition als Startpartition markieren active exit
Der Befehl active sorgt dafür, dass die Partition als Startpartition in der Partitionstabelle markiert wird und ist nur für BIOS-basierte Systeme, nicht für UEFI-basierte Systeme relevant.
Systempartition erstellen
Sollte eine Systempartition komplett fehlen kann sie aus freiem Speicherplatz erstellt werden. Achtung: Es muss genügend freier, nicht zugewiesener Speicherplatz vorhanden sein! Ggf. ist dieser über andere Tools und Mechanismen zuerst zu schaffen.
Laut Microsofts Partitionslayout soll die Systempartition stets zu Beginn der Festplatte angelegt werden. Hinter ihr existiert nur auf UEFI-basierten Systemen eine 16 MB große MSR (Microsoft Reserved-Partition) ohne Inhalt. Es folgt dann die Startpartition (ugs.: Windows Partition). Am Ende der Festplatte soll dann die Recoverypartition angelegt sein.
Die Partitionsgröße der Systempartition beträgt mindestens 100 MB (Achtung: auf 4K Laufwerken mindestens 256 MB; auf 4K Laufwerken mit Advanced Format 512e-Erweiterung allerdings wieder nur mindestens 100 MB). Es spricht nichts dagegen die Systempartition größer anzulegen ist aber eigentlich unnötige Verschwendung von Speicherplatz.
UEFI-basierte Systeme
Die EFI-Systempartition (auch ESP genannt) ist vom MBR Partitionstyp 0xEF00 und hat den GPT Partitionstyp C12A7328-F81F-11D2-BA4B-00A0C93EC93B. Sie wird wie folgt erstellt:
diskpart list disk # Korrekte Festplatte ermitteln und ihren Index nachfolgend als N einsetzen sel disk N # Partition vom Typ EFI erzeugen create partition EFI size=100
Die Mindestgröße der ESP beträgt 100 MB (Achtung: auf 4K Laufwerken ohne Advanced Format 512e-Erweiterung 256 MB).
Auf bereits bestehenden Systemen muss ggf. über den Parameter offset= der Punkt angegeben werden (in Kilobyte) an welchem die Partition erstellt werden soll.
Auf UEFI-basierten Systemen muss auch geprüft werden ob die MSR (GPT Partitionstyp: E3C9E316-0B5C-4DB8-817D-F92DF00215AE ) existiert und ggf. erstellt werden:
# Partition vom Typ MSR erzeugen create partition MSR size=16
Die Mindestgröße der MSR beträgt 16 MB.
Auf bereits bestehenden Systemen muss ggf. über den Parameter offset= der Punkt angegeben werden (in Kilobyte) an welchem die Partition erstellt werden soll.
BIOS-basierte Systeme
diskpart list disk # Korrekte Festplatte ermitteln und ihren Index nachfolgend als N einsetzen sel disk N # Partition vom Typ MBR primär erzeugen create partition primary size=100
Die Mindestgröße der Systempartition beträgt 100 MB (Achtung: auf 4K Laufwerken ohne Advanced Format 512e-Erweiterung 256 MB).
Auf bereits bestehenden Systemen muss ggf. über den Parameter offset= der Punkt angegeben werden (in Kilobyte) an welchem die Partition erstellt werden soll.
Die Systempartition muss anschließend formatiert und befüllt werden. Dies wird im übernächsten Abschnitt erläutert.
Komplettes Partitionsschema erstellen
Im Falle einer kompletten Neuinstallation ist ein sauberes Partitionsschema neu zu erstellen. Dies sieht wie folgt aus:
UEFI-basierte Systeme
rem == CreatePartitions-UEFI.txt == rem == These commands are used with DiskPart to rem create four partitions rem for a UEFI/GPT-based PC. rem Adjust the partition sizes to fill the drive rem as necessary. == select disk 0 clean convert gpt rem == 1. System partition ========================= create partition efi size=100 rem ** NOTE: For Advanced Format 4Kn drives, rem change this value to size = 260 ** format quick fs=fat32 label="System" assign letter="S" rem == 2. Microsoft Reserved (MSR) partition ======= create partition msr size=16 rem == 3. Windows partition ======================== rem == a. Create the Windows partition ========== create partition primary rem == b. Create space for the recovery tools === shrink minimum=500 rem ** NOTE: Update this size to match the rem size of the recovery tools rem (winre.wim) ** rem == c. Prepare the Windows partition ========= format quick fs=ntfs label="Windows" assign letter="W" rem === 4. Recovery tools partition ================ create partition primary format quick fs=ntfs label="Recovery tools" assign letter="R" set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac" gpt attributes=0x8000000000000001 list volume exit
BIOS-basierte Systeme
rem == CreatePartitions-BIOS.txt == rem == These commands are used with DiskPart to rem create three partitions rem for a BIOS-based PC. rem Adjust the partition sizes to fill the drive rem as necessary. == select disk 0 clean convert mbr rem == 1. System partition ========================= create partition primary size=100 rem ** NOTE: For Advanced Format 4Kn drives, rem change this value to size = 260 ** format quick fs=fat32 label="System" assign letter="S" active rem == 2. Windows partition ======================== rem == a. Create the Windows partition ========== create partition primary rem == b. Create space for the recovery tools === shrink minimum=500 rem ** NOTE: Update this size to match the rem size of the recovery tools rem (winre.wim) ** rem == c. Prepare the Windows partition ========= format quick fs=ntfs label="Windows" assign letter="W" rem === 3. Recovery tools partition ================ create partition primary format quick fs=ntfs label="Recovery tools" assign letter="R" set id=27 list volume exit
Systempartition bereinigen
Um den Bootloader komplett zu löschen und neu anzulegen muss die Systempartition wie folgt formartiert werden:
# Systempartition formatieren format V: /FS:FAT32 /V:"System" # Dateisystem erzeugen (für BIOS-basierte Systeme) md \Boot # Dateisystem erzeugen (für UEFI-basierte Systeme) md \EFI\Microsoft\Boot cd /d V:\EFI\Microsoft\Boot\
Es können ohne Probleme beide Verzeichnise (BIOS-basiert und UEFI-basiert) angelegt werden.
MBR neu schreiben / Startsektor neu schreiben (nur BIOS-basierte Systeme mit MBR)
Nun kann ein neuer Startsektor in die Systempartition sowie ein neuer MBR auf die Festplatte geschrieben werden:
# Ab Windows 8 / Windows Server 2012 bootsect /nt60 SYS V: /mbr # Vor Windows 8 / Windows Server 2012 bootrec /FixBoot bootrec /FixMBR
Diese Vorgehensweise ist nur relevant für BIOS-basierte Systeme. UEFI-basierte Systeme verwenden eine andere Art der Erkennung des Bootloaders (siehe nächster Abschnitt). Es schadet jedoch nicht die BIOS-relevanten Befehele trotzdem zu setzen. Die Tools erkennen, welches Partitionierungsschema vorliegt (MBR oder GPT).
Startumgebung neu anlegen
Jetzt kann die Startumgebung neu erzeugt werden. Hierzu kopiert das Tool bcdboot die nötigen Startumgebungsdateien aus einem bereits installierten Windows Image.
Auf UEFI-basierten System fügt bcdboot im NVRAM automatisch einen Firmwareeintrag hinzu, um auf den Windows-Start-Manager zu zeigen. Standardmäßig wird dieser Eintrag als das erste Element in der Startliste platziert.
bcdboot C:\Windows /l de-de /s V: /f ALL
Der Pfad C:\Windows beschreit das Windows Image aus welchem die Startumgebungsdateien extrahiert werden.
Der Parameter /l beschreibt die Gebietsschemaeinstellung (Sprache) der Startumgebung
Der Patameter /s gibt den Laufwerksbuchstaben der Systempartition an
Der Parameter /f steuert den Firmwaretyp. Durch den Parameter ALL werden auf der Systempartition die nötigen Dateien für BIOS-basierte und UEFI-basierte Systeme angelegt. Er kann durch die Parameter UEFI oder BIOS ersetzt werden.
Für UEFI-basierte Systeme wird der Pfad \Efi\Microsoft\Boot auf der Systempartition erstellt und die nötigen Startumgebungsdateien dorthin kopiert.
Für BIOS-basierte Systeme wird der Pfad \Boot auf der Systempartition erstellet und alle nötigen Startumgebungsdateien dorthin kopiert.
Es können ohne Probleme beide Startumgebungsdateien (BIOS-basiert und UEFI-basiert) kopiert werden.
Windows Image prüfen und wiederherstellen
Ab Windows Server 2012 und Windows 8 muss zunächst eine Image-Reparatur erfolgen:
# Check the image state dism /Image:C:\ /Cleanup-Image /ScanHealth # Show the image state dism /Image:C:\ /Cleanup-Image /CheckHealth
Der Parameter /Image:C:\ gibt den Root Pfad zum zu prüfenden Betriebssystem-Image an. Er kann durch den Parameter /Online ersetzt werden. /Online prüft das aktuell geladene Image. Im Fall eines geladenen Windows PE (bspw. von der Windows DVD) handelt es sich hierbei um das Image des Windows PE. Der Parameter /Online macht also nur bei Ausführung der Befehle in einem gebooteten Windows Sinn.
Nur wenn die Ausgabe repairable lautet kann eine Reparatur versucht werden. Im Falle der Ausgabe healthy kann direkt ein Integritätsscan der Systemdateien durchgeführt werden (siehe nächster Abschnitt). Lautet die Ausgabe non-repairable ist das Image leider gänzlich unbrauchbar.
dism /Image:C:\ /Cleanup-Image /RestoreHealth /LimitAccess /Source:$SOURCE /ScratchDir:C:\temp\
Für den Parameter /Image bzw. /Online gilt wie oben beschrieben.
Der Parameter /ScratchDir beschreibt das temporäre Verzeichnis zum entpacken des unter Source beschriebenen WIM Images und ggf. der Dateien aus dem Betriebssystem-Image. Unter Windows PE würde ohne Angabe dieses Parameters die (zu kleine) RAM-Disk verwendet werden. Das hier angegebene Verzeichnis muss existieren und sollte genug Speicher (>= 16 GiB) aufweisen.
Der Parameter /LimitAccess verhindert die Nutzung von Windows Update und sollte mit dem Parameter /Source verwendet werden, da Windows Update die Standardquelle ist.
Der Parameter /Source beschreibt von woher die Reparatur durchgeführt werden soll. Dies kann eine der folgenden Quellen sein:
- Der Pfad zu einem bereits vorher händisch gemountetem WIM file (bspw.: C:\mount\Windows)
- Eine laufende Windows-Installation (bspw.: C:\Windows)
- Ein Windows side-by-side Ordner von einem Installationsmedium (bspw.: Z:\sources\SxS)
- Ein WIM file unter Angabe des editionsspezifischen Indexes und dem Präfix WIM: (bspw.: WIM: Z:\sources\install.wim:1)
Für alle Pfade können auch Netzwerkfreigaben in SMB-Schreibweise verwendet werden.
Um den korrekten Index eines WIM files ermitteln zu können müssen dessen enthaltene Editionen zuvor wie folgt angezeigt werden:
dism /get-wiminfo /wimfile:"FILE"
Windows Systemdateien auf Integrität prüfen und wiederherstellen
Ab Windows Server 2012 und Windows 8 muss zunächst eine Prüfung und ggf. Reparatur des Windows Image erfolgen. Bei den Vorgängerbetriebssystemen (Windows 7, Windows Vista, Windows Server 2008 R2 oder Windows Server 2008) kann direkt hier fortgefahren werden.
Die Integritätsprüfung der Systemdateien wird wie folgt gestartet:
sfc /scannow
Mit dem Befehl sfc /scannow werden alle geschützten Systemdateien überprüft und die beschädigten Dateien durch eine zwischengespeicherte Kopie ersetzt, die sich in einem komprimierten Ordner unter %WinDir%\System32\dllcache befindet.
Da wir unter Windows PE wie oben beschrieben wieder nur die Systemdateien des Windows PE prüfen würden müssen wir auch hier den korrekten Pfad zum Betriebssystem angeben.
sfc /scannow /OffBootDir=C:\ /OffWinDir=C:\Windows
Der Parameter /OffBootDir entspricht dem Pfad zum Datenträger wo sich die Bootdateien befinden. Der Parameter /OffWinDir entspricht dem Root Pfad zum Windows Ordner.
Das Ergebnis der Integritätsprüfung kann im Gutfall eines der folgenden sein:
- Der Windows-Ressourcenschutz hat keine Integritätsverletzungen gefunden.
- Der Windows-Ressourcenschutz hat beschädigte Dateien gefunden und erfolgreich repariert.
Im Schlechtfall wird es einer der folgenden sein:
- Der Windows-Ressourcenschutz konnte den angeforderten Vorgang nicht ausführen.
- Der Windows-Ressourcenschutz hat beschädigte Dateien gefunden und konnte einige der Dateien nicht reparieren.
In ersterem Fall müssen wir händisch sicherstellen, dass die Ordner PendingDeletes und PendingRenames unter dem Ordner %WinDir%\WinSxS\Temp vorhanden sind und es danach erneut versuchen.
Im zweiten Fall müssen die beschädigten Dateien händisch repariert werden. Welche es sind findet sich in diesem Log: %WinDir%\Logs\CBS\CBS.log
Windows Systemdateien manuell reparieren
Wenn durch das Tool sfc Dateien nicht repariert werden können ist eine manuelle Reparatur nötig. Die entsprechenden Dateien können aus dem Log %WinDir%\Logs\CBS\CBS.log wie folgt extrahiert werden:
findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >"C:\sfcdetails.txt"
Ein Eintrag in der nun erstellten Datei sfcdetails.txt sieht wie folgt aus:
2007-01-12 12:10:42, Info CSI 00000008 [SR] Cannot repair member file [l:34{17}]"Accessibility.dll" of Accessibility, Version = 6.0.6000.16386, pA = PROCESSOR_ARCHITECTURE_MSIL (8), Culture neutral, VersionScope neutral, PublicKeyToken = {l:8 b:b03f5f7f11d50a3a}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing
Es ist darauf zu achten, dass die Einträge das korrekte Datum aufweisen.
Die fehlerhaften Dateien müssen aus einem bestehenden Windows gleicher Versionierung und Edition kopiert werden. Anschließend können die Dateien wie folgt überschrieben werden:
takeown /f C:\Windows\system32\dummy.dll icacls C:\Windows\system32\dummy.dll /GRANT ADMINISTRATORS:F copy E:\dummy.dll C:\Windows\system32\dummy.dll
Windows RE / Recovery Partition prüfen
Recovery Partition erstellen
Die Windows Recovey Partition muss zunächst existieren. Nach Microsoft Partitionierungsschema soll die Recovery Partition am Ende der Partitionstabelle als letzte Partition angelegt sein. Existiert sie nicht wird sie wie folgt angelegt:
BIOS-basierte Systeme
create partition primary size=500 format quick fs=ntfs label="Recovery tools" assign letter="R" set id=27
UEFI-basierte Systeme
create partition primary size=500 format quick fs=ntfs label="Recovery tools" assign letter="R" set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac" gpt attributes=0x8000000000000001
Recovery Partition vorbereiten
Anschließend muss die Partition temporär mit einem Laufwerksbuchstaben ausgestattet werden:
diskpart list disk # Korrekte Boot-Festplatte ermitteln und ihren Index nachfolgend als N einsetzen sel disk N list part # Die Recovery Partition ermitteln und nachfolgend als M einsetzen sel part M # Den Laufwerksbuchstaben R: zuweisen assign letter=R: exit
Windows RE erstellen und bekannt machen
Nun kann das Windows RE auf die Recovery Partition kopiert werden:
md R:\Recovery\WindowsRE xcopy /h C:\Windows\System32\Recovery\winre.wim R:\Recovery\WindowsRE\winre.wim
Der Pfad kann auch auf C:\Recovery\winre.wim lauten sofern keine Recovery Partition bei der ursprünglichen Betriebssysteminstallation erstellt wurde. Die Kopie muss mir xcopy /h erfolgen um das Hidden Attribute nicht zu kopieren.
Wenn das winre.wim komplett fehlt muss es aus einem Installations Image extrahiert werden. Dazu benötigt man ein Installationsmedium (konkret die install.wim):
# Temporäres Verzeichnis erstellen (Achtung: Genügend Speicherplatz wird benötigt!) md C:\temp\win_install # Editionen anzeigen und Index ermitteln dism /get-wiminfo /wimfile:"D:\sources\install.wim" # install.wim mit passendem Editions-spezifischem Index in das temporäre Verzeichnis extrahieren dism /Mount-Wim /WimFile:"D:\sources\install.wim" /index:2 /MountDir:"C:\temp\win_install" /readonly # WinRE.wim kopieren cd C:\temp\win_install\Windows\System32\Recovery xcopy /h winre.wim R:\Recovery\WindowsRE\winre.wim # install.wim wieder unmounten dism /unmount-wim /mountdir:"C:\temp\win_install" /discard
Das nun erstellte Windows RE muss dem Betriebssystem (dem tatsächlichen Windows) bekannt gemacht werden:
reagentc /setreimage /path R:\Recovery\WindowsRE /target C:\Windows
Der Parameter /path beschreibt den Pfad in welchem das winre.wim liegt
Der Parameter /target beschreibt das Windowsverzeichnis des Betriebsssystems dem das Windows RE bekannt gemacht werden soll
Um zu verifizieren ob der Eintrag erfolgreich war kann er wie folgt angezeigt werden:
reagentc /Info /Target C:\Windows
Die Ausgabe sollte in etwa so aussehen:
Windows Recovery Environment (Windows RE) and system reset configuration Information: Windows RE status: Enabled Windows RE location: \\?\GLOBALROOT\device\harddisk6\partition1\Recovery\WindowsRE Boot Configuration Data (BCD) identifier: 8e3fa2e7-f17b-11e6-bab9-ba9032f067f3 Recovery image location: \\?\GLOBALROOT\device\harddisk6\partition5\Recovery\WindowsRE Recovery image index: 1 Custom image location: Custom image index: 0
Bootloadereintrag prüfen und erstellen
Im Bootloader sollte auch ein Eintrag für das Windows RE vorhanden sein welcher auf die Recovery Partition zeigt. Der Eintrag kann mit dem Befehl bcdedit /enum osloader geprüft werden. Die Ausgabe sollte in etwa so aussehen:
Windows-Startladeprogramm ------------------------- Bezeichner {8e3fa2e7-f17b-11e6-bab9-ba9032f067f3} device ramdisk=[\Device\HarddiskVolume1]\Recovery\WindowsRE\Winre.wim,{8e3fa2e8-f17b-11e6-bab9-ba9032f067f3} path \windows\system32\winload.exe description Windows Recovery Environment locale de-DE inherit {bootloadersettings} displaymessage Recovery displaymessageoverride Recovery osdevice ramdisk=[\Device\HarddiskVolume1]\Recovery\WindowsRE\Winre.wim,{8e3fa2e8-f17b-11e6-bab9-ba9032f067f3} systemroot \windows nx OptIn bootmenupolicy Standard winpe Yes
Der Parameter identifier sollte sich gemerkt werden da er gleich noch benötigt wird.
Bootloaderreferenz prüfen und erstellen
Das Betriebssystem selbst muss im Bootloader eine Referenz auf den Bootloadereintrag für das Windows RE haben. Die Referenz GUID kann wie folgt ermittelt werden:
bcdedit /enum {current}
Aus der Ausgabe kann die Referenz GUID ausgelsen werden:
Windows Boot Loader ------------------- identifier {current} device partition=C: path \Windows\system32\winload.exe description Windows 7 locale de-DE inherit {bootloadersettings} recoverysequence {d1758ad0-da09-11de-87b2-fe21320b6b8c} recoveryenabled Yes osdevice partition=C: systemroot \Windows resumeobject {d1758ace-da09-11de-87b2-fe21320b6b8c} nx OptIn
Die unter dem Parameter recoverysequence angegebene GUID muss dem Paraeter identifier des Windows RE wie zuvor ermittelt entsprechen. Tut es das nicht kann die recoverysequence durch die korrekte GUID überschrieben werden:
bcdedit /set {current} recoverysequence {8e3fa2e7-f17b-11e6-bab9-ba9032f067f3}
Windows RE reaktivieren
Wenn alle Einstellungen bereits von vornherein korrekt waren. das Windows RE aber nicht startet so hilft es manchmal das RE einfach neu zu aktivieren:
reagentc /disable /Target C:\Windows\ reagentc /enable /Target C:\Windows\