Windows 8.(1): in VHD-Disk inkl. diff-Disk installieren (SteadyState)

0

Jeder, der seinen Rechner nicht nur zum Arbeiten verwendet, probiert über kurz oder lang auch mal Dinge an seinem Rechner aus, die sich später evtl. als nicht sehr hilfreich herausstellen. Für Windows 7 gibt es eine Anleitung, wie man einen Rechner in eine virtuelle Festplatte installiert, um anschließend mit einer differencing disk zu arbeiten. Dies ermöglicht es, jederzeit zum Ursprungszustand zurück zu kehren und das binnen Sekunden. Gefallen hat mir an der für Windows 7 beschriebenen Lösungen, dass man die Änderungen auf der differencing disk mittels WinPE auch jederzeit in das Basis-System überführen kann. Leider lässt sich dieses Vorgehen jedoch nicht 1:1 auf Windows 8 übertragen. Daher habe ich mir mal die Mühe gemacht, die ursprüngliche Anleitung für Windows 8.(1) anzupassen.

Das Ziel ist, wie gesagt, Windows in eine virtuelle Festplatte zu installieren (c:win8.vhd), um anschließend Änderungen nur noch in die differencing disk (c:temp.vhd) fließen zu lassen. Mittels WinPE können die Änderungen (c:temp.vhd) jedoch relativ einfach in das Basis-Abbild (c:win8.vhd) übernommen werden.

Im Verlauf meiner Anleitung tauchen mehrere GUIs für die einzelen Boot-Einträge auf. Einfachheitshalber empfehle ich, die entsprechenden IDs parallel zu notieren, da diese mind. noch immer ein zweites Mal gebraucht werden. An der jeweiligen Stelle werden die erfoderlichen GUIDs dann durch {GUID-Name} benannt.

  • Win8Temp-GUID:
  • Win8-GUID:
  • RAMDISK-GUID:
  • WinPE-GUID:

Da in meiner Anleitung einige Tätigkeiten auf der zu installierenden Maschine (Test-PC) und einige auf einem anderen Windows 8 System (Arbeits-PC) durchgeführt werden, steht im Titel jedes Schrittes, auf welcher Maschine ich diese durchgeführt habe.

VHDs erstellen und Windows installieren (Test-PC)

Im ersten Schritt werden die Eingangs genannten VHD-Dateien erstellt.

  • c:win8.vhd: Master-VHD-Datei, welche den "statischen" Zustand darstellt
  • c:temp.vhd: differencing disk, deren Änderungen bei Bedarf verworfen werden können

Starten Sie den Rechner mit der Windows 8 Setup-DVD. Wählen Sie im Willkommensbildschirm:

Weiter – Computerreparaturoptionen – Problembehandlung – Erweiterte Optionen – Eingabeaufforderung

Führen Sie in der Kommandozeile folgende Befehle aus um die VHD-Dateien zu erstellen

diskpart
select disk 0
clean
create partition primary
select partition 1
active
format fs=ntfs quick
assign letter=C
create vdisk file=”c:win8.vhd” maximum=20480 type=expandable
create vdisk file=”c:temp.vhd” parent=”c:win8.vhd”
select vdisk file=”c:win8.vhd”
attach vdisk
exit

copy c:temp.vhd c:temp.vhd.orig
X:setup

Achten Sie darauf, dass auf dem physikalischen Datenträger genug Speicherplatz ist, um dort die Master-VHD sowie die Diff-Disk (mind. 6 GB) ablegen zu können. Installieren Sie Windows anschließend in den zweiten aufgeführte Datenträger.

 

win8.vhd

temp.vhd einrichten (Test-PC)

Wundern Sie sich nicht, dass nach der Installation Windows 8 auf Laufwerk c: installiert ist. Im laufenden System liegen die VHD-Dateien auf Laufwerk d:. Um später neben dem statischen Zustand (c:win8.vhd) auch den temporären (c:temp.vhd) starten zu können, ist es notwendig, die Boot-Dateien auf Laufwerk d: auszulagern, da nur dieses Laufwerk beim Starten direkt verfügbar ist.

bcdboot C:windows /s d:

Nun wird die GUI vom aktuell laufenden System benötigt. Durch den nachfolgenden Befehl kann diese angezeigt werden. Im weiteren Verlauf diese GUID als {Win8-GUID} bezeichnet. Bitte die GUI notieren 😉

bcdedit -store d:BootBCD /enum all /v

[...]
Windows-Startladeprogramm
-------------------------
Bezeichner              {906e0d13-0f91-11e4-971a-080027b1c34f}
device                  vhd=[D:]win8.vhd,locate=custom:12000002
path                    windowssystem32winload.exe
description             Windows 8.1
[...]

Den vorhandenen Boot-Eintrag für Windows 8 (c:win8.vhd) benennen Sie der Übersichtlichkeit halber noch um:

bcdedit -store d:bootBCD /set {Win8-GUID} description "Windows 8 Base"

Nun wird für die differencing disk ein neuer Boot-Eintrag erzeugt. Einfachheitshalber wird aber der gerade notierte ersteinmal kopiert:

bcdedit -store d:BootBCD -copy {Win8-GUID} /d "Windows 8 Differencing"

Notieren Sie sich die zurückgegebene GUI als {Win8Temp-GUID}.

Nun wird für diesen Eintrag die Bootquelle von d:win8.vhd auf d:temp.vhd geändert. Bitte hier die GUID entsprechend ersetzen.

bcdedit -store d:BootBCD -set {Win8Temp-GUID} device vhd=[d:]temp.vhd
bcdedit -store d:BootBCD -set {Win8Temp-GUID} osdevice vhd=[d:]temp.vhd

WinPE erstellen und anpassen (Arbeits-PC)

  1. Laden Sie sich das Windows 8.1 AIK herunter und installieren dies.
  2. Starten Sie anschließend die "Umgebung für Bereitstellungs- und Imageerstellungstools" als Administartor
  3. Nun wird das x86 Setup-Image für die Erstellung von WinPE umkopiert, da das Original aus dem AIK nicht verändert werden sollte.
    Anschließend werden einige Änderungen an dem Image (boot.wmi) vorgenommen, wie z.B. das Hinzufügen der deutschen Sprache und das Hinterlegen von einigen Skripten.
    Anhand der Skripte kann später die differencing disk entweder verworfen oder in das Basis-Abbild übernommen werden. Zusätzlich gibt es noch die Option, das Basis-Image zu packen, damit die VHD-Datei nicht unaufhörlich wächst. Im nachfolgenen Abschnitt werden die Skripte mittels notepad geöffnet. Die darauf folgenden Zeilen müssen anschließend hineinkopiert werden.
# Image kopieren
copype x86 c:winpe_x86
md c:mount

# Image mounten
dism /Mount-Wim /MountDir:C:mount /wimfile:C:WinPE_x86mediasourcesboot.wim /index:1

# Deutsche Sprache einbinden
dism /image:C:mount /Add-Package /PackagePath:"%programfiles(x86)%Windows Kits8.1Assessment and Deployment KitWindows Preinstallation Environmentx86WinPE_OCsde-delp.cab"
dism /image:C:mount /Set-AllIntl:de-DE

# Skripte hinterlegen
notepad C:mountWindowsSystem32winpeshl.ini
[LaunchApps]
%SYSTEMROOT%system32winpe.bat

notepad C:mountWindowsSystem32winpe.bat
@echo off
cls
set /p UserInputPath=(D)iscard or (M)erge (C)ompact?
cmd /k %UserInputPath%.bat

notepad C:mountWindowsSystem32d.bat
@echo off
cls
copy /y c:temp.vhd.orig c:temp.vhd
bcdedit -default {Win8Temp-GUID}
exit

notepad C:mountWindowsSystem32m.bat
@echo off
cls
echo select vdisk file=c:temp.vhd > vhdmerge.s
echo merge vdisk depth=1 >> vhdmerge.s
diskpart -s vhdmerge.s
copy /y c:temp.vhd.orig c:temp.vhd
bcdedit -default {Win8Temp-GUID}
exit

notepad C:mountWindowsSystem32c.bat
@echo off
cls
bcdedit /default {Win8Temp-GUID}
echo "Compacting disk..."
cls
diskpart /s compact.txt
winpe.bat

notepad C:mountWindowsSystem32compact.txt
select vdisk file=C:win8.vhd
compact vdisk
exit

# Image unmounten
dism /Unmount-Image /MountDir:c:mount /commit
dism /cleanup-wim
rmdir /S /Q c:mount

Aus diesem Schritt werden folgende Dateien im nächsten Schritt weiterverwendet:

  • C:WinPE_x86mediaBootboot.sdi
  • C:WinPE_x86mediasourcesboot.wim

WinPE aktivieren (Test-PC)

Kopieren Sie die boot.sdi und boot.wim nun auf den Test-PC nach d:boot. Damit später WinPE in eine Ramdisk geladen werden kann, sind noch einige Anpassungen notwendig.

bcdedit -store d:bootBCD /create {ramdiskoptions}

Notieren Sie sich nun die GUID der Ramdisk als {RAMDISK-GUID}. In der Nachfolgenden Ausgabe taucht diese i.d.R. als letztes auf.

bcdedit -store d:bootBCD /enum all /v

[...]
Optionen zum RAM-Datenträgersetup
---------------------------------
Bezeichner              {ae5534e0-a924-466c-b836-758539a3ee3a}

Diese wird nun noch angepasst:

bcdedit -store d:bootBCD /set {RAMDISK-GUID} description "Windows PE"
bcdedit -store d:bootBCD /set {RAMDISK-GUID} ramdisksdidevice partition=d:
bcdedit -store d:bootBCD /set {RAMDISK-GUID} ramdisksdipath "bootboot.sdi"

Jetzt kopieren wir erneut den Win8-GUID Eintrag. Dieses mal aber für WinPE.

bcdedit -store d:bootBCD /copy {Win8-GUID} /d "Windows 8 PE"

Notieren Sie sich auch hier die zurückgegebene GUID. Diesesmal als {WinPE-GUID}.

Nun folgen die letzten Änderungen:

bcdedit -store d:bootBCD /set {WinPE-GUID} device ramdisk=[d:]bootboot.wim,{RAMDISK-GUID}
bcdedit -store d:bootBCD /set {WinPE-GUID} osdevice ramdisk=[d:]bootboot.wim,{RAMDISK-GUID}
bcdedit -store d:bootBCD /set {WinPE-GUID} winpe yes
bcdedit -store d:bootBCD /set {WinPE-GUID} detecthal on
bcdedit /timeout 2
bcdedit /default {Win8Temp-GUID}

… das sollte es gewesen sein. Wenn Sie den Rechner jetzt neu starten, erhalten Sie für 2 Sekunden ein Auswahlfenster der drei verschiedenen Systeme angezeigt. I.d.R. wird dieses Fenster nicht benötigt, da es im Fehlerfalle sowieso angezeigt wird. Um es auszublenden muss der Timeout aus  dem letzten Befehlsabschnitt lediglich auf 0 gesetzt werden.win8vhd_os_selection

Wird WinPE gestartet, kann das Differencing-Image entweder verworfen werden, in das vorhandene Basis-Image übernommen werden oder es kann das Basis-Image komprimiert werden, falls dort viele Änderungen vorgenommen wurden und die VHD-Datei aufgrund dessen stark gewachsen ist.

discard_merge_compact

Links

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

Antworten