Linked Clones ohne Horizon mit PowerShell

Für ein Experiment benötige ich auf einer kleinen vSphere-Testumgebung ein paar virtuelle Maschinen. Dabei will ich möglichst wenig Speicherplatz verschwenden.

Linked Clones sind eine feine Sache. Es handelt sich dabei um Klone von einer bestehenden virtuellen Maschine, welche einen Snapshot jener VM referenzieren.

Die virtuelle Festplatte (VMDK-File) des Klons beinhaltet dabei nur das Delta (die Änderungen) zur “originalen” Maschine.

Damit lässt sich primär Speicherplatz im Datastore sparen.

VMWare Horizon View benutzt, wenn man dynamische Pools implementiert, intensiv dieses Feature.

Es wird eine Master-VM erstellt, angepasst und allenfalls mit Software bestückt. Der Zustand des Masters wird mit einem Snapshot gesichert.

Horizon View erstellt nun einen Klon dieses Snapshots, genannt ‘replica’. Von diesem replica werden nun die gewünschte Anzahl Linked Clones erstellt, via Sysprep oder Quickprep generalisiert, angepasst, der Domäne hinzugefügt und via RDP/PCoIP zur Verfügung gestellt.

Dabei werden, wie bereits erwähnt, nur die Änderungen zum replica in der virtuellen Festplatte des Klons gespeichert. So lassen sich viele VM’s auf verhältnismässig kleinen Datastores unterbringen.

Für Testumgebungen sind Linked Clones teilweise ganz nützlich. Für mein Experiment benötige ich knapp 20 Windows Datacenter Server 2016 Eval VM’s.

Ich habe eine Master-VM erstellt, gepatcht, mit Software bestückt und generalisiert:

PS > cd c:\windows\System32\Sysprep
PS > .\sysprep.exe /oobe /generalize /shutdown

Zum Erstellen der Linked Clones habe ich ein kurzes Script geschrieben. Es erlaubt die Erstellung von einem oder mehreren Linked Clones im gleichen Datastore, Resource Pool und Folder wie das Original. Zudem erlaubt es, abweichende VM-Einstellungen mitzugeben.

Du kannst das Modul so importieren:

Import-Module `
  DRIVE:\Path\to\Create-LinkedClone.psm1

Das Modul stellt ein Cmdlet namens ‘Create-LinkedClone’ zur Verfügung. Ein Beispiel:

Create-LinkedClone `
  -ServerName 172.16.0.10 `
  -Credential (Get-Credential) `
  -VMName 'mg01' `
  -SnapshotName '20170607 raw linked clone' `
  -LinkedClone @( `
    @{ `
      'Name'='adc01'; `
      'Spec'=@{ `
        'MemoryGB'=4; `
        'NumCpu'=2; `
        'CoresPerSocket'=1 `
      } `
    }; `
    @{ `
      'Name'='adc02'; `
      'Spec'=@{ `
        'MemoryGB'=4; `
        'NumCpu'=2; `
        'CoresPerSocket'=1 `
      } `
    }; `
    @{ `
      'Name'='ap02'; `
      'Spec'=@{ `
        'MemoryGB'=10; `
        'NumCpu'=2; `
        'CoresPerSocket'=2 `
      } `
    }`
  )

Eigentlich sollte das Script selbsterklärend sein. Du findest die Dokumentation wie immer im Header oder kannst sie folgendermassen abrufen:

Get-Help Create-VDSwitch -Full

Wie immer: ein kurzer Hinweis auf diese Seite wäre nett…

Das Beste zum Schluss: Create-LinkedClone.psm1

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.