VHD und VHDX verkleinern – mit der PowerShell

Ich hatte mal wieder den Drang eine VHD zu verkleinern. Es gibt für solche Aufgaben Tools von Drittanbietern – und jetzt auch von Microsoft. Die Lösung des Geheimnisses liegt, wie so oft, in der PowerShell. Die PowerShell ist hier die Lösung sowohl für vhd und vhdx die wir in Hyper-V VMs eingebunden haben, wie auch für virtuelle Festplatten aus denen heraus wir auf Physik booten.
In meinem Beispiel boote ich meine Physik in einer Dual-Boot-Konfiguration nach Windows 7 und nach Windows Server 2012. Beide Betriebssysteme sind jeweils in einer eigenen VHD abgelegt. Das ärgerliche ist nur, dass ich bei der Wahl der VHD-Größe etwas zu großzügig war. So belegt die VHD meiner Windows Server 2012 Installation im benutzten Zustand satte 250 GB, also das volle Volumen der dynamischen VHD.

Zur Verdeutlichung : Die VHD im Datei Explorer wenn sie in Benutzung ist:

101113 1824 AnleitungVH1

Der belegte Platz innerhalb der VHD ist sehr übersichtlich und eindeutig zu großzügig dimensioniert:

101113 1824 AnleitungVH2

Im Festplattenmanager findet man einen vollen Datenträger 1 mit der OS Partition C – Datenträger 0 ist der Speicherort für meine VHDs:

101113 1824 AnleitungVH3

Um den entsprechenden Platz zu schaffen, der eine Reduzierung der VHD-Größe sinnvoll macht, reduziere ich die Größe der Partition im Datenträger 1 auf 60GB:

101113 1824 AnleitungVH4

Nach erfolgreichem Abschluss des „Shrinks“ wird viel „Nicht zugeordneter“ Platz auf dem Datenträger angezeigt. Genau diesen freien Platz kann man jetzt entfernen.

101113 1824 AnleitungVH5

Eigentlich ist es jetzt ganz einfach. Man muss nur dafür sorgen, dass die Randbedingungen erfüllt sind. Diese sind: Es muss sich um eine VHDX-Datei handeln und sie darf nicht im Zugriff sein.
In meinem Fall ist das Vorgehen damit recht klar: Keine Experimente.
Ich boote jetzt in mein Windows 7. Dort wird mir die unbenutzte Windows Server 2012 vhd entsprechend ihrem Inhalt mit weniger als 14GB Größe angezeigt:

101113 1824 AnleitungVH6

Ein simples Copy and Paste erstellt mir die Datei WindowsServer2012 – Kopie.vhd – Somit kann ich wieder in meinen Windows Server 2012 booten und habe eine identische vhd die sich nicht im Zugriff befindet. Den Server benötige ich nun, damit ich die zweite Voraussetzung erfüllen kann: Nur VHDX Dateien lassen sich mit der PowerShell verkleinern. Dazu benötige ich die Hyper-V Rolle des Windows Server 2012. In der Hyper-V Konsole kann man über den Befehl „Datenträger bearbeiten“ die Konvertierung von VHD nach VHDX und umgekehrt durchführen.

101113 1824 AnleitungVH7

Bei diesem Vorgang wählt man die ungenutzte VHD aus und wählt den Speicherort und Namen für die neue VHDX aus. Die VHDX wird frisch erstellt.
Anschließend ist PowerShell-Zeit. Die PowerShell muss mit erhöhten Rechten aufgerufen werden:

101113 1824 AnleitungVH8

In meinem Fall ist das Ziel klar und einfach. Ich möchte meine VHD, noch VHDX, möglichst klein haben. In diesem Fall muss ich nicht rechnen und verwende den glücklicherweise existierenden Schalter.
Der Befehl zum verkleinern der VHDX Datei lautet in meinem Fall:
Resize-VHD -Path „d:\WindowsServer2012 – Kopie – vhdx.vhdx“ -ToMinimumSize

101113 1824 AnleitungVH9

Diese frisch erzeugte VHDX Datei konvertiere ich nun wieder in eine VHD Datei (mein Bootloader kennt ja nur die VHD-Datei). Anschließend boote ich erneut in mein Windows 7. Von dort kann ich nun, mit ein wenig Vorsicht die 3 nicht mehr benötigten VHD-Dateien löschen und die neue VHD, entsprechend meiner alten Boot-VHD, umbenennen.

101113 1824 AnleitungVH10

Nach einem Reboot in meinen Windows Server 2012 finde ich dort nun eine 60GB große VHD wieder, die mir auf der Parent-Disk fast 200GB frei gegeben hat:

101113 1824 AnleitungVH11

Wie man sieht, reicht der Platz immer noch aus. Diese VHD beherbergt die Boot-Partition eines meiner Hyper-V Hosts. Der jetzt gewählte Speicherplatz reicht also völlig aus: 

101113 1824 AnleitungVH12

Zum Vergleich auch die Ansicht im Festplattenmanager:

101113 1824 AnleitungVH13

Hier noch 3 Beispiele für das PowerShell Commando:

Expandieren einer VHD (beim vergrößern darf es auch eine altmodische VHD sein) auf 1 TB:

Resize-VHD -Path c:\VHD-Name.vhd -SizeBytes 1TB

Verkleinern einer VHDX Datei auf 1 TB:

Werbung

Resize-VHD -Path c:\VHDX-Name.vhdx -SizeBytes 1TB

Werbung

Verkleinern einer VHDX Datei auf die kleinstmögliche Größe:

Werbung

Resize-VHD -Path c:\VHDX-Name.vhdx -ToMinimumSize

Die vollständige Technet-Dokumentaion ist hier zu finden.

Werbung

Veröffentlicht:

Autor:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

New articles in english

Werbung

Themen

Active Directory Administrative Vorlagen Anleitung AppV5 Autopilot Azure Azure AD ConfigMgr Deployment GPO Gruppenrichtlinien Guide How-To Linux Microsoft Microsoft Intune Office Office365 PowerShell Public Preview SCCM2012R2 SCSM2012R2 ServiceMgr Sicherheit TechNet Windows Windows 10 Windows10 Windows Server 2012 Windows Server 2012R2

Hinweise zum Affiliate-Marketing

Auf diesen Seiten werden auch Affiliate Marketing Links angezeigt. Diese sind meistens an dem kleinen „€“ oder einem „*“ dahinter zu erkennen. Der Betreiber dieser Seite erhält beim Kauf über diesen Link eine Provision, ohne das es den Verkaufspreis beeinflusst. Diese Einnahmen tragen zur Finanzierung der Seite bei.