VHD Difference Disks, een uitkomst voor meerdere testomgevingen op 1 machine - Premier Field Engineering

VHD Difference Disks, een uitkomst voor meerdere testomgevingen op 1 machine

Nadat ik thuis kwam van een cursus wilde ik zo snel als mogelijk de Hyper-V images importeren en het lab opbouwen.

Ik liep echter tegen een probleem aan dat dit nieuwe lab settings op mijn Hyper-V client verwacht die anders zijn dan die ik op mijn huidige Windows Server 2008 R2 Hyper-V host heb draaien. Niet alleen IP adressen moesten verschillen maar ook software moest geinstalleerd worden op deHyper-V host. Ik had geen zin om nog een installatie te doen van Windows Server 2008 R2, ik had ook geen partitie meer vrij hiervoor, en zocht naar een simpele oplossing. Die was snel gevonden in VHD difference disks.

Even een uitleg. In Windows 7 en Windows Server 2008 R2 is het mogelijk om native van een VHD te booten. Een VHD disk is een Virtuele Hard Disk, een bestand waarop je een OS kan installeren of files kunt plaatsen. Je kunt de VHD attachen en vervolgens is deze te benaderen als een normale disk. Met VHD difference disks maak je eerst een basis installatie aan van het OS met alle settings zoals je wilt. Vervolgens maak je de difference disks aan vanwaar je daadwerkelijk boot. Het basisimage vervult de rol van parent en wordt niet meer gewijzigd tenzij je ervoor kiest de difference disk en de parent disk te mergen. In dat geval worden alle wijzigingen van de difference disk samengevoegd met de parent disk. Dit is erg handig als je eerst iets wilt testen en niet weet hoe het uitpakt. In het ergste geval heb je altijd je parent disk nog waar je simpelweg een nieuwe difference disk naar toe kunt laten verwijzen.

Parent Disk

Er zijn diverse sites die goede uitleg geven over het maken van een VHD disk, een boot optie in je startmenu en de installatie van het OS. De oplossing die ik gebruikt heb om de parent disk te maken is booten van een Windows 2008 R2 DVD. Dit mag ook een Windows 7 DVD zijn en de setup kun je ook starten vanaf USB. Wanneer het setup menu verschijnt gebruik je Shift-F10 om de command prompt te verkrijgen.

Als eerste moet er een nieuwe VHD disk worden gemaakt.

In de command prompt type je Diskpart.

Maak vervolgens een nieuwe VHD aan met het commando:

DISKPART>create vdisk file="C:\PadNaarVhd.vhd" maximum=SizeInMegabyte

Default wordt er een fixed size disk aangemaakt. Als je een disk wilt die klein start en groter wordt tot de maxmale grootte, gebruik je de optie TYPE=EXPANDABLE. Dit gaat echter ten koste van performance en fragmentatie van de VHD file.

Vervolgens selecteer je de disk en attach je hem als een fysieke disk.

DISKPART> select vdisk file="c:\vhdboot\Win2008R2.vhd"

DISKPART> attach vdisk

Exit vervolgens diskpart en keer terug naar het setup menu (ALT+TAB) en start de setup.
Vervolg de installatie, selecteer de Custom optie (Advanced) en installeer het OS op de zojuist aangemaakte disk, meestal de laatste in het rijtje. Negeer de warning : "Windows cannot install to this disk" en start de installatie.

Er wordt nu automatisch een extra bootoptie aangemaakt die verwijst naar de VHD. Deze basis OS installatie heb ik vervolgens ingericht zoals ik het wil, met Hyper-V en wat extra tooling.

Difference Disk

Vervolgens heb ik een difference disk aangemaakt. Deze difference disk verwijst naar de parent, de VHD die ik zojuist heb ingericht. Om een difference disk aan te kunnen maken moet je vanaf een Windows 7 of Windows 2008 R2 DVD starten of vanuit het native OS dat je wellicht hebt draaien. Je kunt geen differnce disk aanmaken als je geboot hebt vanaf het basis VHD image. Ik heb Windows 7 native draaien en daarnaast een VHD voor Windows Server 2008 R2. In mijn Windows 7 selecteer ik start en type cmd. Rechts klik op cmd en kies voor 'Run As administrator'. Klik OK op de eventuele User Account Control melding.

Afhankelijk van de manier waarop je geboot hebt, native OS of Setup DVD kan de drive letter van je partitie waar het basis vhd image zich bevindt verschillen. Het basisimage en de difference disk moeten zich op dezelfde disk bevinden.

In de command prompt type je: Diskpart

DISKPART> List Disk

Selecteer de disk waar het basisimage zich bevindt.

DISKPART> Select disk 0

Vervolgens DISKPART> list volume

De disk waar mijn parent VHD zich bevindt is volume 2, drive letter D

Met deze informatie kan ik een difference vdisk maken.

DISKPART> Create vdisk file="d:\vhdboot\Win2008R2-diff.vhd" parent="d:\vhdboot\Win2008R2.vhd"

Exit Diskpart maar sluit de command prompt niet. In tegenstelling tot het aanmaken van het basisimage is er nu nog geen boot menu optie aanwezig voor de difference disk.

C:\>bcdedit /v

Alle Boot Loaders worden weergegeven.

Zoek de identifier van de parent disk, in mijn geval {c189cf15-72d1-11dd-b637-00125a5fdb2f}

Vervolgens maak je een kopie van de boot entry van de parent in dezelfde system store:

C:\>Bcdedit /copy {c189cf15-72d1-11dd-b637-00125a5fdb2f} /d "Windows 2008 Difference"

Er is een nieuwe identifier gegenereerd. Deze identifier hebben we nodig om het device en osdevice naar toe te laten verwijzen. Voor de goede orde, we moeten verwijzen naar de difference disk.

C:\>Bcdedit /set {c189cf1c-72d1-11dd-b637-00125a5fdb2f} device vhd=[locate]\vhdboot\Win2008R2-diff.vhd

De [locate] optie zorgt ervoor dat de VHD altijd gevonden wordt door de boot manager, ook al is de disk waar de VHD zich bevindt niet juist bij het booten of zijn andere drives toegevoegd of verwijderd. Erg handig.

Vervolgens:

C:\>Bcdedit /set {c189cf1c-72d1-11dd-b637-00125a5fdb2f} osdevice vhd=[locate]\vhdboot\Win2008R2-diff.vhd

Het aanmaken van de bootoptie voor het starten vanaf de difference disk is klaar. De optie is zichtbaar bij de volgende reboot. Verwijder vervolgens het basis image uit het boot menu. Wijzigingen mogen alleen in de differnce disks worden gemaakt, niet in het basis image.

C:\>Bcdedit /delete {identifier van de basis image} in mijn geval {c189cf15-72d1-11dd-b637-00125a5fdb2f}

Mergen difference en parent disk

Als je de wijzigingen in je difference disk wilt samenvoegen (mergen) met de parent disk, start je wederom vanaf een Windows 7 of Windows 2008 R2 DVD of USB. Je kunt ook starten vanuit het native OS dat je wellicht hebt draaien. In elk geval kan dit mergen niet als je boot vanaf de difference of parent VHD.

Shift-F10 voor een command prompt in de setup of start een command prompt met adminstrator bevoegdheden .

Zorg dat je weet op welke partitie de difference VHD zich bevindt.

In de command prompt type je C:\>Diskpart

DISKPART>select vdisk file=d:\vhdboot\Win2008R2-diff.vhd

DISKPART>Attach vdisk

DISKPART>Detail vdisk

DISKPART>Detach vdisk

DISKPART>Merge vdisk depth=1

Published Monday, August 10, 2009 12:32 PM door Steven Van Doesburg
Opgeslagen onder: , ,

Commentaar:

# re: VHD Difference Disks, een uitkomst voor meerdere testomgevingen op 1 machine

Merk je nog iets van performance verlies met deze constructie?

Tuesday, August 11, 2009 11:01 AM by Willem Kasdorp

# re: VHD Difference Disks, een uitkomst voor meerdere testomgevingen op 1 machine

Ik merk haast geen verschil in performance, misschien een paar procent. Wel expand de difference VHD disk zich na het booten tot de ingestelde parent size disk grootte plus een paar MB extra. Na een shutdown 'krimpt' de disk weer tot de difference size.  Hou rekening met voldoende diskspace om te kunnen booten.

Tuesday, August 11, 2009 10:36 PM by Steven Van Doesburg

# re: VHD Difference Disks, een uitkomst voor meerdere testomgevingen op 1 machine

Kun je bij 1 parent meerdere defference disks gebruiken, of moet je dan meerdere parent disks aanmaken?

Monday, November 30, 2009 8:36 AM by Joop Obelink

Wat denkt u?

(Verplicht) 
(Verplicht) 
(Optioneel)
(Verplicht) 
CaptchaCube Vraag:


Antwoord: