Windows Vista / Windows Server 2008 / Windows Storage Server 2008 / Windows 7 / Windows Server 2008 R2 Multi-Installations-Stick…

„Wo ist nun wieder diese verfluchte Windows-DVD?“

Wer kennt es nicht: Der Rechner läuft nicht mehr so, wie er soll. Startet er gar nicht mehr, hat man nun zwei Möglichkeiten: Entweder ein vorhandenes und funktionsfähiges Backup wiederherstellen, oder eine Neuinstallation durchführen. Die Suche nach dem Windows-Installationsmedium steht in den meisten Fällen an…

Wer nun keine Lust hat, immer wieder die Windows-DVD zu suchen, oder das ISO neu zu brennen, für den bietet Microsoft das „Windows 7 USB/DVD Download Tool“ an, womit man sich einen bootfähigen USB-Stick erstellen und von diesem aus die Installation durchführen kann.

An sich eine ganz praktische Sache, jedoch hat diese einen aus meiner Sicht gesehen gewaltigen Nachteil: Man kann mit dieser Variante nur eine Windows-Version auf den Stick übertragen. Hat man sich daheim ein kleines Netzwerk aufgebaut, müsste man diesen für die Installation von unterschiedlichen Clients und Servern immer wieder neu beladen.

Mancher, der sich mit den neueren Version von Windows und deren Setup auskennt, wird sich nun denken: „Hey, dann pack ich halt alle Images aus der install.wim einfach in ein neues wim-File!“ Wird nur leider nichts, da noch Setup-Dateien von der DVD angezogen werden und somit die Installation zum Scheitern verurteilt ist.

Hier möchte ich euch nun einen etwas anderen Weg beschreiben, wie ihr euch einen entsprechenden Installationsstick zusammenstellen könnt. Zunächst die benötigte Software:

Als Hardware benötigt ihr:

  • einen Windows-Rechner
  • einen für eure Anforderungen entsprechend dimensionierten USB-Stick

Alles beisammen? Wunderbar, dann kann es ja losgehen 😉

Zunächst einmal schließt ihr euren USB-Stick am Rechner an, und startet das HP USB Disk Storage Format Tool als Administrator. Wählt hier euren USB-Stick aus, und wählt als „File System“  „FAT32“. „Quick Format“ für die ganz Eiligen noch aktivieren, dann auf „Start“.

Danach entpackt ihr GrubInst und startet die „grubinst_gui.exe“ als Administrator. Nach dem Start wählt ihr unter „Device Name“ den Punkt „Disk“. In der Auswahlliste müsst ihr nun euren USB-Stick auswählen (orientiert euch dabei am besten an der Größe des Sticks). Einen Klick auf „Refresh“ neben der Auswahlliste „Part List“, wählt ihr dann in der Auswahlliste selbst „Whole Disk (MBR)“. Nun sind wir nur noch ein Klick auf „Install“ von einem bootfähigen USB-Stick entfernt.

Als nächstes empfehle ich euch, eine geeignete Ordnerstruktur für die ISOs anzulegen. Die Batchfiles in diesem Artikel müsst ihr dementsprechend anpassen. Für meine Zwecke hat sich folgende Ordnerstruktur bewährt:

  • boot
    • microsoft
      • windows_7
      • windows_server_2008
      • windows_server_2008_r2
      • windows_storage_server_2008
      • windows_vista
  • imdisk
  • install
    • microsoft
      • windows_7
      • windows_server_2008
      • windows_server_2008_r2
      • windows_storage_server_2008
      • windows_vista

Nicht benötigte Windows-Ordner könnt ihr natürlich weglassen 😉

Installiert nun 7-Zip auf eurem Rechner und entpackt damit die „imdiskinst.exe“ auf euren USB-Stick in den Ordner „imdisk“.  Das WAIK ISO entpackt ihr ebenfalls mit 7-Zip auf eure Festplatte in ein temporäres Verzeichnis. Führt hier die „StartCD.exe“ aus, wählt den Menüpunkt „Windows AIK-Setup“ und folgt den weiteren Anweisungen des Assistenten.

Die nächsten Schritte sind nun für jede Windows-Version, die ihr in euren USB-Stick integrieren wollt, zu wiederholen.

Entpackt euch das Windows-ISO mittels 7-ZIP in ein temporäres Verzeichnis, Unterverzeichnis „DVD“. Löscht hier die „sourcesinstall.wim“ – wir erstellen uns ein kleines Hilfs-Boot-ISO, in dem wir die install.wim nicht brauchen.

Öffnet aus dem Startmenü eine „Microsoft Windows AIKEingabeaufforderung für Bereitstellungstools“ (als Administrator). Erstellt in eurem Temp-Verzeichnis ein neues, leeres Verzeichnis, und tippt in die Kommandozeile dann folgendes ein:

imagex /mountrw $TEMP$DVDsourcesboot.wim 2 $TEMP$$DIR$

Damit mountet ihr das zweite in der boot.wim enthaltene Image zum Schreiben in den neuen Ordner. Erstellt euch nun folgende zwei Dateien auf eurem Desktop.

Datei 1: winpeshl.ini

[LaunchApp]
AppPath = wpeinit.exe
[LaunchApps]
cmd.exe, "/q /c %SystemRoot%System32mntdrv.cmd"
%SystemDrive%setup.exe

Datei 2: mntdrv.cmd

@ECHO OFF
CLS
FOR %%i IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST %%i:nul (
  IF EXIST %%i:imdiskimdisk.inf IF EXIST %%i:imdisksetupcdrom.cmd IF EXIST %%i:imdisksetupimdisk.cmd IF EXIST %%i:installmicrosoftwindows_server_2008_r2x64.iso (
    echo Found necessary files on %%i:>>%SystemDrive%mntdrv.txt
    pushd %%i:imdisk
    echo Setting um ImDisk>>%SystemDrive%mntdrv.txt
    setupimdisk.cmd>>%SystemDrive%mntdrv.txt
    echo Setting up virtual CD/DVD drive, mounting image>>%SystemDrive%mntdrv.txt
    setupcdrom.cmd %%i:installmicrosoftwindows_server_2008_r2x64.iso>>%SystemDrive%mntdrv.txt
  )
)

Hier darauf achten, die Pfade zum ISO entsprechend anzupassen. Kopiert nun diese beiden Dateien nach „$TEMP$$DIR$WindowsSystem32“.

Hintergrund des Ganzen: Wir werden die ISOs am Ende in einem Grub-Menü einbinden. Die ISOs werden hierbei gemappt, so dass die Installation startet. Sobald aber Windows PE die Protected Mode Treiber lädt, können wir nicht mehr auf die gemappten ISOs zugreifen. Mit diesen beiden Dateien starten wir nun zuerst die „wpeinit.exe“ (übernimmt z.B. die Initialisierung von Plug & Play). Danach durchforsten wir die verfügbaren Laufwerksbuchstaben nach Anwesenheit eines Datenträgers und der Existenz der benötigten Dateien. Wurden diese gefunden, wird ImDisk geladen und das Installations-ISO in das virtuelle Laufwerk eingebunden. Abschließend wird das Windows Setup aufgerufen.

Als nächstes führt folgenden Befehl in der Kommandozeile aus:

imagex /unmount /commit $TEMP$$DIR$

Damit unmountet ihr das Image wieder und übertragt die durchgeführten Änderungen.

Nun erstellen wir uns unser Boot-ISO mit dem Befehl (wie schon im Beispiel oben für Windows Server 2008 R2 x64):

oscdimg -lLABEL -t02/15/2011 -b$TEMP$DVDbootetfsboot.com -m -u2 $TEMP$DVD $TEMP$x64.iso

Das Label könnt ihr selbst bestimmen, das Datum muss im Format „DD/MM/YYYY“ angegeben werden. Bei Windows Vista x64 ist es nötig, statt „etfsboot.com“ die „bootsect.exe“ anzugeben.

Das so erstellte ISO packt ihr nun in das entsprechende Unterverzeichnis unter „bootmicrosoft“ auf eurem USB-Stick.

Das originale Installations-ISO kopiert ihr nun in das entsprechende Unterverzeichnis unter „installmicrosoft“ auf eurem USB-Stick. Benennt es bitte entsprechend der Architektur zu „x86.iso“ oder „x64.iso“ um.

Wie oben geschrieben, müssen diese Schritte für die verschiedenen Windows-Versionen entsprechend wiederholt und angepasst werden.

Wir sind nun fast am Ziel, drei Dateien fehlen uns noch auf dem Stick. Die ersten beiden finden ihr neues Zuhause unter „imdisk“:

Datei 1: setupimdisk.cmd

rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 .imdisk.inf

Datei 2: setupcdrom.cmd

Set fullname=%~1
imdisk -a -f "%fullname%" -m #:

Die letzte Datei, unser Bootmenü, findet sein Ziel direkt auf dem USB-Stick:

Datei 3: menu.lst

color white/black dark-gray/light-gray white/black white/black
timeout 30
default /default

title Memtest86
find --set-root /boot/other/memtest86/mt420.iso
map /boot/other/memtest86/mt420.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Vista Setup (x86)
find --set-root /boot/microsoft/windows_vista/x86.iso
map /boot/microsoft/windows_vista/x86.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Vista Setup (x64)
find --set-root /boot/microsoft/windows_vista/x64.iso
map /boot/microsoft/windows_vista/x64.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Server 2008 Setup (x86)
find --set-root /boot/microsoft/windows_server_2008/x86.iso
map /boot/microsoft/windows_server_2008/x86.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Server 2008 Setup (x64)
find --set-root /boot/microsoft/windows_server_2008/x64.iso
map /boot/microsoft/windows_server_2008/x64.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Storage Server 2008 Setup (x86)
find --set-root /boot/microsoft/windows_storage_server_2008/x86.iso
map /boot/microsoft/windows_storage_server_2008/x86.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Storage Server 2008 Setup (x64)
find --set-root /boot/microsoft/windows_storage_server_2008/x64.iso
map /boot/microsoft/windows_storage_server_2008/x64.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows 7 Setup (x86)
find --set-root /boot/microsoft/windows_7/x86.iso
map /boot/microsoft/windows_7/x86.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows 7 Setup (x64)
find --set-root /boot/microsoft/windows_7/x64.iso
map /boot/microsoft/windows_7/x64.iso (0xff)
map --hook
chainloader (0xff)
boot

title Windows Server 2008 R2 Setup (x64)
find --set-root /boot/microsoft/windows_server_2008_r2/x64.iso
map /boot/microsoft/windows_server_2008_r2/x64.iso (0xff)
map --hook
chainloader (0xff)
boot

Die menu.lst müsst ihr natürlich entsprechend euren Vorstellungen anpassen. So braucht zum Beispiel nicht jeder noch zusätzlich Memtest86 auf dem Stick 😉

Der größte Vorteil bei dieser Methode ist: Die Installations-ISOs liegen in ihrer Originalform auf dem USB-Stick vor und können so mit einem entsprechenden Brennprogramm einfach wieder auf DVD gebrannt werden (z.B. wenn ein Freund seine DVD verloren hat, der Key aber noch vorhanden ist).

So, ich hoffe, dass ich nichts vergessen habe. Ist einiges an Gefrickel, einiges könnte man evtl. noch eleganter lösen, aber nach diesem Prinzip solltet ihr erst mal in der Lage sein, euren eigenen Multi-Installations-Stick zu erstellen.