Schlagwort-Archive: VHD

Windows 8.1 booten in eine virtuelle Festplatte (VHD bzw. VHDX)

Seit Windows 7 bietet Microsoft Windows die Möglichkeit direkt in eine VHD (Virtuelle Hard Disk) zu booten. Dies ist besonders nützlich, wenn man wie ich auf seiner regulären Workstation auch entwickeln möchte. Um durch die ganzen Entwicklungswerkzeuge und Dienste (Webserver etc) bei der regulären Arbeit nicht ausgebremst zu werden, isoliere ich meine Entwicklungsumgebung gerne in eine VHD von der ich nur boote, wenn ich die entsprechenden Werkzeuge auch benötige. Diese Möglichkeit kann man selbstverständlich auch für weitere Dienste wie z. B. SpielePC, KinderPC, Server etc verwenden. Jedem dieser Systeme wird dabei die volle Performance des Rechners inkl. all seiner Schnittstellen zur Verfügung stehen. Einzig die Festplatte wird durch die Umleitung in die VHD ein ticken (< 5 %) langsamer sein.

Um eine VHD mit dem gewünschten Betriebssystem zu erstellen, gibt es im wesentlichen drei Möglichkeiten.

  1. Erstellen einer VHD und Installation des Betriebssystems mittels DISM (ersetzt imagex aus dem Windows Automated Installation Kit (AIK))
  2. Einbinden einer über einen HyperV erstellten VHD
  3. Erstellen einer VHD und Installation direkt im System (wie reguläre Installation eines Betriebssystems)

Im folgenden werde die die notwendigen Schritte für die Optionen 1 und 2 erklären. Option drei ist meiner Meinung zu umständlich und zu fehleranfällig. Ich habe diese ausser zum Testen bis jetzt auch nicht verwendet – daher erspare ich euch und mir diese Beschreibung.

Alle Optionen haben gemein, dass man zuerst eine virtuelle Festplatte (VHDx) benötigt. Im Falle von Hyper-V kann man diese mit einem Mausklick in der GUI erzeugen. Für die anderen beiden Wege stehen folgende Möglichkeiten zur Verfügung:

Anlegen einer VHD – der Weg über die GUI

  1. Windowstaste + X drücken und das Disk Management öffnen
  2. Im Menü Action und dann Create VHD auswählen.
  3. In dem sich öffnenden Fenster den gewünschten Speicherort, die Größe, das Format und den Typ auswählen und mit OK bestätigen. (Der Vorgang kann je nach Auswahl etwas dauern).
    snaghtml1b10313_thumb-5627732
  4. Am Ende sollte jedoch im Disk Manager eine neue Festplatte auftauchen. image_thumb-3552987
  5. Durch einen Rechtsklick auf den linken Teil der neuen Platte können wir diese Initialisieren und damit einen Master Boot Record (MBR) erstellen.
  6. Durch einen erneuten Rechtsklick, dieses Mal auf den rechten Teilbereich, können wir ein neues Simple Volume erstellen. Nachdem dieses formatiert wurde, wird dem Laufwerk ein Buchstabe zugeordnet (in meinem Fall K). image_thumb1-7161479

Anlegen einer VHD – der Weg über die Kommandozeile

Selbstverständlich kann man eine VHD auch über eine (administrative) Kommandozeile (CMD) erstellen und erspart sich damit die ganzen Mausklicks – beide Wege führe jedoch zum gleichen Ziel.

diskpart
create vdisk file=g:\Win8_1_template.vhdx maximum=50000 type=expandable
select vdisk file=g:\Win8_1_template.vhdx
attach vdisk
create partition primary
assign letter=K
format quick label=System
exit

Über die Kommandozeile hat man grundsätzlich die Möglichkeit noch etwas mehr zu machen. Es besteht z. B. die Möglichkeit bestehende vdisks als parent zu verwenden. Wie das genau geht und welche Vorteile man davon hat erkläre ich in einem Folgeartikel.

Windows 8.1 VHD mit Hilfe von DISM betanken

Wie eingangs bereits erwähnt wurde die Funktionalität von imagex durch DISM ersetzt und DISM wird bei Windows 8 direkt mit dem Betriebssystem ausgeliefert und muss somit nicht mehr über ein extra Toolset nachinstalliert werden. Die notwendigen Schritte um Windows (egal ob Win7, Win2012 etc) auf die frisch erstellte VHDx zu bekommen sind folgende (Die Kommandozeilen Befehle müssen aus einem administrativen Kommando Promt (CMD) ausgeführt werden!):

  1. Zuerst muss die ISO-Datei des zu installierenden Betriebssystems gemountet werden. Unter Windows 8 erreicht man dies über einen Doppelklick auf die *.iso Datei. Im Explorer sollte daraufhin ein neues DVD-Laufwerk erscheinen (in meinem Fall Laufwerk E).
  2. Einige DVDs enthalten mehrere Editionen des selben Betriebssystems (Pro, Ultimate, Standard, Enterprise etc). Um die richtige Version zu installieren müssen wir daher den Index der Edition herausfinden, die wir installieren möchten. Hierzu führen wir die folgenden beiden Befehle aus (E:\ ist dabei die soeben eingebundene ISO-Datei):
    cd e:\sources
    dism /get-wiminfo /wimfile:install.wim

    image_thumb2-4874136
    Meine DVD enthält nur eine Edition mit dem Index 1.

  3. Um die Installation vorzunehmen ist die Eingabe des folgenden Befehls notwendig (K ist dabei die eingebundene VHDx Datei):
    dism /apply-image /imagefile:install.wim /index:1 /ApplyDir:K:\

    image_thumb3-7430679

Virtuelle Festplatte in das Bootmenü eintragen

Zum Abschluss ist es nun noch notwendig die erstellte VHDx Datei in das Bootmenü einzutragen, damit wir beim Start des Rechners auswählen können welches System hochgefahren werden soll. Der Befehl hierfür (aus einer administrativen CMD) ist sehr einfach (Laufwerksbuchstabe der gemounteten VHDx Datei ist hier K):

bcdboot K:\Windows

image_thumb4-2526205

Einbinden einer über einen Hyper-V erstellten VHD

Dieser Weg ist mitunter fast der einfachste. Man erstellt eine ganz normale virtuelle Maschine in Hyper-V (das geht zwischenzeitlich auch auf einem Win8 System!). Hat man dies erledigt, wird die virtuelle Maschine mit Hilfe von sysprep auf neue Hardware vorbereitet. Das Tool sysprep findet man auf einem Windows 8 System in dem Ordner “%WINDIR%\system32\sysprep”

snaghtml5829ace_thumb-2419799

Nach einem Doppelklick auf sysprep.exe erhält man folgende Auswahl:

snaghtml5840192_thumb-4934316

Wichtig ist hier das Aktivieren von “Generalize” und “Shutdown”. Durch diese beiden Optionen wird beim nächsten Start aus dieser VHDx die Hardware neu gesucht und damit an den eigenen Rechner angepasst.

Hinweis: Bei mir funktioniert die VHD oft auch direkt – also ohne sysprep. Eine Garantie dafür hat man aber nicht.

Um die VHD nun in das Bootmenü einzutragen sind die gleichen Schritte wie im vorherigen Prozess notwendig. Man bindet also die VHD als Laufwerk in sein laufendes Windows ein und führt aus einer administrativen CMD den Befehl bcdboot K:\Windows aus.

VHD’s als Vorlagen

Hat man sich z. B. eine Basis-VHD installiert, so kann man die Datei auch einfach kopieren und erneut einbinden. So kann man sich die Installation der notwendigen Helferlein auf mehreren Systemen ersparen oder man kann sein Testsystem sichern bevor man Software installiert, die man nicht langfristig behalten möchte. Ich habe für diesen Zweck zwischenzeitlich eine schöne Auswahl an VHD’s für verschiedene Einsatzgebiete.

HowTo: Windows 7 direkt in VHD installieren

Mit Windows 7 hat Microsoft die Funktion eingeführt, dass man Systeme direkt in VHD’s booten kann. Ich habe die Funktion zwischenzeitlich echt lieben gelernt (hab eigene VHD’s zum arbeiten, programmieren, spielen etc). Da ich meine Workstation (nach meinem Umzug) nun von Vista auf Win7 umstellen wollte, wollte ich darauf keine “native” Installation mehr vornehmen. Nach etwas stöbern im Internet konnte ich mir die dafür notwendigen Schritte zusammen suchen.

Hier nun die Zusammenfassung:

  1. Windows 7 vom Installationsmedium (USB od. DVD) booten
  2. Die Frage nach der Sprache beantworten
  3. NICHT installieren – sondern die Reparaturoptionen wählen (im unteren Teil des Bildschrims)
  4. Command Promt öffnen
  5. diskpart
  6. list disk (um herauszufinden welches die richtige HD ist)
  7. select disk 0 (wenn das Listing oben eine andere Nummer ergeben hat, dann entsprechend ersetzen)
  8. clean (macht alles leer!)
  9. crate partition (erstellt eine Partition)
  10. active
  11. format fs=ntfs
  12. assign
  13. create vdisk file=c:\win7_01.vhd maximum=150000 (erstellt eine vhd auf c mit 150 GB)
  14. attach vdisk (hängt die vhd ins system ein)
  15. exit
  16. x: (wechselt zurück auf das Installationsmedium)
  17. setup.exe (startet das “normale” windows 7 Setup)

Bei der Auswahl der VHD als Installationmedium erhält man eine Fehlermeldung. Diese kann man aber einfach ignorieren – die Installation läuft ohne Probleme durch.

Booten in eine VHD – Klarstellung

Ich habe vor kurzem darüber berichtet, dass es mit Einführung von Windows 7 und Windows 2008 R2 möglich ist, direkt in eine VHD Datei (ohne Virtualisierung zu booten). In diversen Foren gab es dazu nun schon Artikel, die behaupteten, dass es möglich wäre auch ein Vista oder gar ein Linux aus einer solchen VHD heraus zu booten. Da ich es bis jetzt, trotz eingehendem Studium von bcdedit, nicht geschaft habe in eine solche VHD zu booten, habe ich letzte Woche auf dem MS TechDay in Frankfurt mit Michael Korb darüber gesprochen.

Seine Aussagen hierzu waren klar:
– Dieses Feature ist exklusiv für Windows Systeme ab Windows 7 und Windows 2008 R2 vorgesehen. Einen Patch oder Treiber für frühere Versionen wird es nicht geben. Die Berichte in diversen Foren über lauffähige Vista Installationen sind daher falsch.
– Das Feature wird von MS primär gesehen um die Verteilung von Betriebssystemen auf Clients und auch Server zu vereinfachen.
– Das booten von Linux in eine VHD ist in der theorie denkbar, da der Aufbau der VHD’s nicht geheim ist – eine entsprechende Implementierung ist ihm (und mir auch) nicht bekannt.

Booten in eine VHD

Mit dem Bootloader von Windows 7 hat Microsoft eine neue Technik eingeführt welche es dem Benutzer erlaubt mit wenigen Handgriffen ein Betriebssystem direkt aus einer VHD heraus zu booten. Man erweitert dazu mit vier einfachen Befehlen das Bootmenü von Windows 7 um beliebig viele lokal gespeicherte VHDs. Die Maschinen laufen nach dem Booten nativ auf der Maschine und haben somit vollständigen Zugriff auf die gesamte Hardware (es hängt also kein Hypervisor dazwischen).

Um von einer VHD booten zu können muß diese eine wichtige Voraussetzung erfüllen. Sie muß im neuen VHD Format erstellt worden sein welches erst mit HyperV unterstützt wird. Man kann also keine VHDs booten die von einer Virtual PC 2007 Installation erstellt wurden! (hat mich mehrere Tage und schluß endlich eine Mail an Daniel gekostet um das raus zu finden). Hat man keinen HyperV zur Verfügung kann man auch den Weg über das WAIK (Windows Automated Installation Kit) ein VHD File mit Installationsdaten befüllen. Beide Möglichkeiten werde ich nachfolgend vorstellen. Ich gehe in meinen Beispielen davon aus, dass auf dem Gerät bereits Windows 7 installiert ist (es reicht auch aus den win7 boot loader zu installieren).

Booten von einer über HyperV erstellten VHD

Hat man einen HyperV zur Verfügung ist die Sache recht einfach. Man installiert sein gewünschtes Betriebssystem über die bekannten Wege.  Bei Microsoft Betriebssystemen ist es jedoch wichtig vor dem kopieren der VHD auf das Zielsystem ein Sysprep auszuführen um sicher zu stellen, dass die Hardwareerkennung nach dem nächsten Neustart erneut ausgeführt wird:

c:\windows\system32\sysprep>sysprep /generalize /shutdown

Hat man diese Vorbereitungen getroffen muß man die VHD nur noch dem Bootmenü hinzufügen. Unter Windows 7 sind dafür schon alle Tools vorhanden. Für Vista muß man diese noch nach installieren.

Zuerst kopieren wir einen bestehenden Booteintrag um eine neue GUID zu erhalten:

bcdedit /copy {default} /d "Vista VHD"

Danach wird der Booteintrag erstellt wobei der Wert für {GUID} durch den oben abgefagten Wert ersetzt wird.  [locate] wird durch den Laufwerksbuchstaben z. B. [c:\] ersetzt. Der Pfad dahinter sollte auf die VHD zeigen.

bcdedit /set {guid} device vhd=[locate]\windows7.vhd
bcdedit /set {guid} osdevice vhd=[locate]\windows7.vhd

Für einige x86 Betriebssysteme benötigen noch folgende Option (schadet nicht, daher setzte ich sie immer):

bcdedit /set {guid} detecthal on

Will man per default von einer VHD booten, erreicht man dies mit folgendem Befehl:

cdedit /default {guid}

Booten von einer neu zu installierenden Installation

Mit Hilfe des WAIK (Windows Automated Installation Kit) kann man auch ohne einen HyperV VHDs erstellen und mit einer Windows Installation befüllen.

Zuerst erstellen wir also eine VHD (es geht auch mit der Maus – aber das ist etwas umständlicher).

DISKPART
CREATE VDISK FILE="c:\vmfs\win7\disk01.vhd" MAXIMUM=20000
SELECT VDISK FILE="c:\vmfs\win7\disk01.vhd"
ATTACH VDISK
CREATE PARTITION PRIMARY
ASSIGN LETTER=X
FORMAT QUICK LABEL=Win7

Mit diesem Befehl haben wir nun eine 20 GB große VHD erstellt und diese direkt als Laufwerk X gemountet.

Nun brauchen wir eine Windows Vista, Windows 7, Windows 2008 oder Windows 2008 R2 CD. Mit dem Befehl:

c:\Program Files\Windows AIK\Tools\amd64\imagex.exe /info "g:\sources\install.wim"

können wir heraus finden welche Editionen von diesem Betriebssystem zur Verfügung stehen. Für den nächsten Befehl brauchen wir die entsprechende ID der Edition:

vhd_boot_editions1-8934077

Hat man die ID des Editionen kann man diese mit folgendem Befehl in seine VHD kopieren:

c:\Program Files\Windows AIK\Tools\amd64\imagex.exe /apply g:\sources\install.wim 3 H:\

vhd_boot_waik1-4604132

Nun muß man die VHD nur noch wie oben unter dem HyperV Teil beschrieben in sein System einbinden und den entsprechenden Eintrag beim nächsten Booten seines Systems auswählen.

20090420: Update – Windows Vista und Windows 2008 *.wim files werden aktuell nicht vom WAIK unter Windows 7 unterstützt. Man kann in einer solchen Umgebung somit keine bootfähigen VHD’s erstellen 🙁