Virtual Server VHD Files vergrößern

Jeder, der Virtual Server einsetzt kennt wahrscheinlich das Problem: Die Anforderungen wachsen und die virtualisierten Systeme werden irgendwann einmal zu klein. Windows Updates (WU) tragen ihren Teil dazu bei.

So ist es auch mir passiert. Vor etwa 2 Jahren habe ich begonnen, viele virtuelle Windows Server-Systeme für verschiedenste Zwecke und Funktionen anzulegen - damals mit einer 16GB großen Systempartition C: (ich war der naiven Meinung, dachte das genügt für alle Zeiten ;-), während die Daten (SQL Server Datenbanken, Webs etc.) immer auf einer eigenen Datenpartition D: liegen, Logs auf E: und so weiter.

Nun, die Zeit und WU sind gekommen, wo der Platz auf der Systempartition mit 16GB zu eng geworden ist. In meinem Fall konnte z.B. das Visual Studio 2005 Service Pack 1 für SQL-BI nicht mehr auf dem Rechner installiert werden, weil (hust) nur mehr 200MB frei waren.

Klar, zuerst wird einmal das Pagefile mit 2GB auf eine andere Platte verschoben. Dann folgen Systembereinigung, Entfernung alter Patches, Temp-Files und diverse auf C: gelagerte Installs. Hilft ... kurze Zeit. Nach ein paar Wochen stand ich vor demselben Problem. Diesmal hatte ich allerdings keinen Optimierungs-Spielraum mehr - es war einfach zu wenig Platz.

Also, wie schafft man neuen Festplatten-Platz? Nun hierzu gibt es eine ganze Reihe von Ansätzen und Lösungsmöglichkeiten. Ich wollte eine praktikable Lösung, die einfach und nach Möglichkeit kostenlos ist.

Ich habe sie nun gefunden! Da mir mein Lösungsweg sehr praktikabel erscheint, hier nun die step-by-step Anleitung.

Das Resizing

Zuerst das Tool VHD Resizer von vmToolkit  auf dem eigenen Rechner oder auf dem Virtual Server installieren (Vielen Dank übrigens an Peter Forster für den Tipp zum Tool!). VHD Resizer ist ein kostenloses Tool und kann VHD-Files vergrößern und verkleinern und den Datenträger-Typ ändern, also ein sehr hilfreiches Werkzeug für virtuelle Welten.

Nun wird das Tool gestartet, das VHD-Quellfile ausgewählt, das VHD-Zielfile eingetragen und dynamic oder fixed gewählt und die neue Zielgröße angegeben. Mit Resize wird der Vorgang gestartet.

In meinem Beispiel sieht das dann so aus: Im ersten Schritt wird die neue Festplatte mit der angegebenen Größe erzeugt:
vhd-resize-2 
Danach werden vom Tool die Sektoren in die neue VHD kopiert:
vhd-resize-3  
Dieser Vorgang dauert je nach Größe und Performance einige Minuten bis Stunden, auf meinem Server-System mit SATA Festplatten warens für die Verdoppelung der Festplatte von 16GB auf 32GB etwa 20 Minuten. Wenn der Vorgang abgeschlossen wurde, folgt der nächste Schritt.

VHD Resizer legt eine größere Festplatte an - belässt die Partitionen allerdings so, wie sie waren! Das Ändern der Partition muss der Administrator dann also selbst erledigen.

Das Partitionierungs-Tool

Um es gleich vorweg zu nehmen: Es ist natürlich nicht ganz so trivial wie ich dachte...

Es gibt ein Commandline-Tool diskpart.exe, welches Partitionen vergrößern und verkleinern kann. diskpart ist Bestandteil von Windows XP und Windows Server 2003 und natürlich auch ein einer erweiterten Form in Windows Vista enthalten. Siehe dazu auch "Verwenden von "Diskpart.exe" zum Erweitern eines Datenträgers unter Windows Server 2003, Windows XP und Windows 2000".

Die Systempartition neu partitionieren

Diskpart hat allerdings einige Einschränkungen. Das Erweitern funktioniert aber nicht für ... die Systempartition.

Wenn es sich nicht um die Systempartition handelt, kann diskpart einfach im Gastsystem selbst aufgerufen werden. (Murphy´s Law hat wieder zugeschlagen, denn in meinem Fall brauche ich das Ganze natürlich genau für die Systempartition.)

Mal schnell die grauen Zellen anstrengen - und das Internet durchsuchen. Die Lösung dafür ist genauso einfach wie zunächst unvermutet: Was hindert mich daran, die neue VHD in eine bestehende Windows Maschine hinzuzuhängen und dort diskpart auf dieses Volume auszuführen?

Also, gleich ausprobieren: Eine weitere Maschine auf meinem Virtual Server nehmen und dort in deren Configuration die Festplatte (bei mir als Disk 3 hinzufügen):

vhd-resize-5

Nun wird die "Hilfsmaschine" gestartet und mit RDP eine Verbindung dazu hergestellt.

Schauen wir gleich mal nach, wie das neue Volume aussieht: Manage Computer und Disk Management. Ahja, die logische Festplatte ist nun tatsächlich 32GB groß und die Partition 16GB. Es sind also noch 16GB zu "allozieren".

Jetzt wird ein Commandline-Prompt geöffnet und diskpart aufgerufen, danach list volume. Der folgende Screenshot zeigt recht übersichtlich die aktuelle Belegung und den Aufruf:

diskpart

list volume

vhd-resize-8

Nun das zu vergrößernde Volume erkennen und auswählen. In meinem Beispiel ist das Volume 0 (mein Drive E:).

select volume 0

Und jetzt kommts:

extend

Und das ausgewählte Volume wird sofort auf die verfügbare Größe erweitert! Ich war überrascht und sehr angetan, dass dieser Vorgang blitzschnell ausgeführt war. extend besitzt übrigens auch Parameter, u.a. size=n (in MB), um die neue Größe selbst anzugeben.

vhd-resize-9

Mit exit aus dem diskpart-Tool aussteigen und die Hilfsmaschine herunterfahren.
Danach wird im Virtual Server Webinterface das neue Volume wieder mit Remove und OK von der Hilfsmaschine in deren Configuration entfernt:

vhd-resize-10

Zu allerletzt wird noch in meinem RDP zur Virtual Server Maschine das neue VHD von MinniSystem32.vhd auf MinniSystem.vhd umbenannt. Ich empfehle die "alte" VHD aus Sicherheitsgründen immer aufzuheben, daher benenne ich sie ebenfalls auf MinniSystem16.vhd um.

vhd-resize-11

So, das wars. Nun die virtuelle Maschine neu starten und ausprobieren!

vhd-resize-12

Und es hat bestens funktioniert: Ich habe wieder 16GB freien Speicherplatz auf meiner Systempartition!

Jetzt können sie kommen, die neuen (Windows) Updates. ;-)

Beitrag von Toni Pohl