Provisioning Services – Probleme beim VHD Merge einer vDisk Kette (error on merging PVS vDisk)

Hallo Zusammen,

VHD Chaining am PVS ist eine feine Sache, da es viel Zeit einspart und die Verwaltung der Versionen auf dem PVS vereinfacht. Es gibt aber auch ein paar Fallstricke bei diesem Feature, die es bspw. verhindern, die vDisk Versionen wieder zu einer neuen Base Disk zusammenzuführen. Dies passiert unter anderem dann, wenn man eine vDisk mit Versionen (sprich parent .vhd mit child .avhd) kopiert, um eine neue Workergroup (XenApp 6.5 auch Silo genannt) bzw. einen neuen Machine Catalog (XenApp/XenDesktop 7.x) zu erstellen. Da in den kopierten (a)vhd’s im Attribut “ParentPath” die URI zum alten PVS Store steht, kommt es später zu Problemen beim zusammenführen der vDisk.

Solltet ihr also eure vDisk nicht mehr zusammenführen können, werde ich euch zeigen wie ihr dieses Problem beheben könnt.

Möglichkeit 1: Verwendung von vhdutil.dll zum Zusammenführen der vDisk

Die direkte Verwendung der vhdutil.dll hat einen enormen Vorteil zur Verwendung der GUI bzw. der MCLI des PVS, wir können uns ein Logfile erstellen lassen, welches uns den genauen Fehler aufzeigen kann, sollte das Zusammenführen über diese Möglichkeit nicht gelingen.

1. Windows Kommandozeile als Administrator öffnen.

2. In das Verzeichnis “C:\Program Files\Citrix\Provisioning Server” wechseln.

3. Folgenden Befehl ausführen:

rundll32 VhdUtil.dll,VhdMerge #Pfad zur letzten vDisk Verision .avhd# #Pfad zur Parent vDisk .vhd# #Pfad zur neuen vDisk .vhd#> #Pfad zur Log Datei#

Anbei ein Beispiel wie der Befehl aussehen kann:

rundll32 VhdUtil.dll,VhdMerge d:\store\XenApp:Office\xenapp.10.avhd d:\store\XenApp_Office\xenapp.vhd d:\store\XenApp_Office\xenapp_new.vhd > d:\store\XenApp\merge-log.txt

 

 

Möglichkeit 2: Zusammenführen der vDisk mit Hyper-V Powershell (PS) Befehlen

Im nächsten Schritt werden wir versuchen das (a)vhd Attribut “ParentPath” zu ändern und die VHD mittels Hyper-V PS Befehlen zusammenzuführen.

Hierfür benötigen wir am besten die Hyper-V Rolle inkl. Hyper-V Management (speziell die Hyper-V Powershell Erweiterung) auf dem PVS Server installieren. Achtung der PVS Server sollte dann schon ein Windows Server 2012 R2 sein, da es sonst die Hyper-V PS Befehle die wir benötigen nicht gibt. Des Weiteren reicht es auch nicht nur die Hyper-V Verwaltung zu installieren, denn dann funktionieren die PS Befehle nicht. Solltet ihr Windows Server 2012 R2 nicht auf eurem PVS haben, kann man auch auf einen anderen Server oder ein Rechner mit Windows 8.1 ausweichen.

Ich würde dazu raten die vDisk inkl. aller Versionen aber ohne .lok und .pvp Dateien in einen neuen Ordner zu kopieren, da ihr sonst die laufenden VMs abschalten müsst damit keine Zugriffe mehr auf die vDisk stattfinden.

1. Powershell öffnen

2. In das Verzeichnis wechseln wo die (kopierten) vDisk Dateien liegen.

3. den Befehl Get-VHD #Pfad zur letzten Datei im Log die aus M2, welche noch den richtigen Image Pfad anzeigt# (bspw. Get-VHD .\xenapp.3.avhd) ausführen

Ihr solltet dann folgende Ausgabe erhalten:

ComputerName: HyperV1

Path: d:\store\XenApp_Office\xenapp.3.avhd

VhDFormat: VHD

VhDType: Differencing

.

.

ParentPath: \\PVS1\d$\store\XenApp_Default\xenapp.vhd.

.

.

4. Um nun das Attribut “ParentPath”  der (a)vhd  Datei zu ändern gebt ihr folgenden Befehl ein.

get-vhd .\xenapp.#x#.avhd | set-vhd -ParentPath “#Pfad zur Parent (a)vhd#.#x-1#.avhd”

Diesen Befehl führt ihr für die komplette vDisk Versions Kette aus. Sprich habt ihr 9 Versionen (avhds) fangt ihr mit der ersten (x=1) und arbeitet euch bis zur letzten durch (X=9).  Achtet dabei darauf das ihr beim Dateiname im ParentPath immer die Versionsummer x-1 eintragt. Sprich bei der Version xenapp.2.avhd als ParentPath xenapp.1.avhd.

Bspw. : get-vhd .\xenapp.2.avhd | set-vhd -ParentPath “\\PVS1\d$\XenApp_Office\xenapp.1.avhd”

5. Nun könnt ihr die vDisk mittels des Powershell Befehls Merge-VHD Stück für Stück zusammenführen. Stück für Stück heisst, das ihr für jede Version (avhd) die ihr für diese vDisk habt den Befehl ausführen müsst. Anfangen müsst ihr bei der letzten (neuesten) Version.

Bspw.: Merge-VHD -Path D:\store\XenApp_Office\xenapp.9.avhd -> Merge-VHD -Path D:\store\XenApp_Office\xenapp.8.avhd …… usw.

Habt ihr alle avhd’s durch sollte im Verzeichnis nur noch die .vhd zu sehen sein.

6. Zu guter Letzt kopiert ihr die zusammengeführte vDisk in das gewünschte Verzeichnis und importiert diese in den gewünschten Store mittels der PVS Console.

ACHTUNG: Nicht vergessen die vDisk Einstellungen wieder richtig vorzunehmen (Versionierung für Auto-Update; Aktivierung wie KMS; Image Typ wie Standard-Image; Cache Typ).

 

Möglichkeit 3: Reverse Imaging

Solltet ihr mit Möglichkeit 2 nicht weiterkommen steht ein Reverse Imaging an, um die vDisk wieder zusammenzuführen.

1. Wählt eines der Target Devices (VMs) aus und fügt dieser eine neue virtuelle Festplatte hinzu (auf dem Hypervisor). Die Festplatte sollte >= der vDisk sein.

2. Startet das Target Device (die VM) mit der neuen Festplatte

3. In Windows angekommen, öffnen wir das Festplatten Management

4. Im Festplatten Management formatieren wir die neue Festplatte, teilen ihr einen Laufwerkbuchstaben zu und markieren die neue Partition als Aktiv.

5. Nun führen wir das Reverse Imaging mittel XenConvert oder dem Imaging Wizard des PVS auf die neue Festplattenpartition durch.

6. Nachdem das Reverse Imageing erfolgreich durchgelaufen ist, versuchen wir von der neuen Festplatte zu booten.

7. Hat das Target Device von der neuen Festplatte erfolgreich gebootet, steht der ganz normale Imaging Prozess an. Eventuell macht ihr auch gleich Hypervisor Tool Updates und eventuelle PVS Target Device Updates bevor ihr ein neue Image erstellt.

 

Solltet ihr hierzu noch Fragen oder Ergänzungen haben, stehen wir euch gerne zur Verfügung.

 

Euer ILEA.con Team.