Hintergrund

Den Speicherort für die Log-Dateien auf eine andere Partition oder gar eine andere Festplatte auszulagern wird unter Exchange – und Datenbankadministratoren seit jeher als gute Praxis angesehen. Nicht nur, dass man wertvollen Speicherplatz auf der Systempartition bzw. Festplatte einspart - auch fördert das ständige Schreiben, Überschreiben und Neuanlegen der vielen Log-Dateien die Speicherfragmentierung, was zu Geschwindigkeitsverlusten führt und insbesondere auf der Festplatte, auf der sich das Betriebssystem befindet, unerwünscht ist.

Problematik

Seit Exchange 2013 hat sich die Anzahl der verschiedenen Log-Dateien drastisch erhöht, so dass der empfohlene, freie Speicherplatz für das Exchange Installationsverzeichnis auf 30 Gb angestiegen ist. Gleichzeitig wurde es aufgrund der vielen verteilten und teilweise zusammenhängenden Log-Dateien der verschiedenen Rollen schwieriger, den Speicherort dieser auszulagern. Microsoft bietet hier leider auch keine triviale Möglichkeit beispielsweise bei der Installation des Exchange Servers einen alternativen Speicherort für die Log-Dateien selbst anzugeben. Diese Problematik ist gemeinhin bekannt und eine mögliche Lösung in Form eines PowerShell-Skriptes [1] wurde bereits vorgeschlagen, mit welcher sich etwa 1/3 der Log-Dateien an einen anderen Speicherort auslagern lassen können.

Heute möchte ich Ihnen eine alternative Lösung, ebenfalls in Form eines PowerShell-Skriptes, vorschlagen, bei der die betroffenen Exchange Log-Verzeichnisse <ExchangeInstallDir>\Logging und <ExchangeInstallDir>\TransportRoles\Logs vollständig an einen anderen Speicherort auf dem System verschoben und gleichzeitig die bereits bestehenden Log-Dateien dorthin migriert werden können.

Funktionsweise

Die betroffenen Verzeichnisse mit den bereits vorhandenen Log-Dateien werden an einen von Ihnen festgelegten Speicherort auf dem System verschoben und an deren Ursprungsort im Exchange Installationsverzeichnis durch Ordnerverknüpfungen bzw. Links zum jeweils neuen Ziel ersetzt. Um die Dateien verschieben zu können, dürfen diese während des Vorganges von keinem anderen Prozess geöffnet sein und verwendet werden. Deshalb müssen für den Zeitraum der Migration alle Exchange – und IIS Services gestoppt sowie zwei potenzielle Exchange Log-Tasks deaktiviert werden. Für den Verschiebevorgang wird das Kommandozeilenwerkzeug Robocopy.exe verwendet, welches seit Windows Server 2008 vorinstalliert mit dem Betriebssystem mitgeliefert wird und seine Arbeit zuverlässig verrichtet. Mit dem eingebauten Kommandozeilenbefehl mklink werden anschließend an den ursprünglichen Speicherorten Verknüpfungen zu den Neuen erstellt. Danach werden alle zuvor gestoppten Services wieder gestartet und die Tasks wieder aktiviert.

Parameter

Das Skript unterstützt neben dem –Verbose Parameter zur detaillierten Informationsausgabe auch den –WhatIf Parameter. Mit Angabe des Letzteren kann ein Testlauf gestartet werden, bei dem das Skript keine tatsächlichen Änderungen am System vornimmt, sondern lediglich deren Durchführung simuliert und diesbezüglich Information ausgibt, um dem Benutzer ein Bild davon zu machen, welche Vorgänge im Einzelnen durch das Skript im Hintergrund ausgeführt werden würden. Wird der –Force Parameter angegeben, wird das Skript vor dem Verschieben der Log-Verzeichnisse nicht erneut um Bestätigung fragen, sondern den Vorgang automatisch bestätigen und durchführen. Der neue Speicherort für die beiden Log-Verzeichnisse kann über den –Path Parameter spezifiziert werden. Je nach Größe der Log-Verzeichnisse kann die Ausführung des Skripts einige Zeit in Anspruch nehmen.

Beispiel

In Bild 1 ist die Ausgabe des Skripts zu sehen, nachdem es mit dem –Verbose Parameter gestartet wurde. Da der –Force Parameter nicht angegeben wurde, fragt das Skript den Benutzer aus Sicherheitsgründen erneut um Bestätigung, um das tatsächliche Verschieben der Log-Verzeichnisse in Gang zu setzen.

Ausgabe

Ausgabe

Bild 1: Ausgabe des Skripts. Erst werden die entsprechenden Services und Tasks gestoppt, danach erfolgt der Verschiebevorgang der Log-Verzeichnisse mit anschließender Erstellung der Links. Am Ende werden die Services und Tasks wieder gestartet.

Wie in Bild 2 und 3 zu sehen ist, war der Vorgang erfolgreich – an den ursprünglichen Speicherorten der Log-Verzeichnisse befinden sich stattdessen nun Verknüpfungen, welche auf die neuen Speicherorte verweisen.

Logging

Logging

Bild 2: Die durch das Skript erstellte Verknüpfung für

das <ExchangeInstallDir>\Logging Verzeichnis.

Logs

Logs

Bild 3: Die durch das Skript erstellte Verknüpfung für das

<ExchangeInstallDir>\TransportRoles\Logs

Verzeichnis.

Abschlussbemerkung

Die Installation eines kumulativen Updates für Exchange Server wird die Verknüpfungen mit hoher Wahrscheinlichkeit wieder zerstören. In diesem Falle kann das Skript einfach erneut ausgeführt werden.

HINWEIS: Beim erneuten Ausführen des Skripts kann es vorkommen, dass bereits existierende Log-Dateien im alternativen Speicherort überschrieben werden. Legen Sie also vorher unbedingt eine Sicherung dieser Daten an, falls Ihnen dadurch relevante Informationen verloren gehen würden.

Download

Das Skript finden Sie entweder als .txt oder .ps1 Datei unter den folgenden Links:

Move-Exchange2013LogLocations.txtMove-Exchange2013LogLocations.ps1

Abschließend möchte ich an dieser Stelle noch dankend Herrn Klaus Hackenberg erwähnen, der einen sehr großen Teil zur Entstehung dieses Skriptes beigetragen hat.

[1] http://social.technet.microsoft.com/wiki/contents/articles/22479.move-logging-in-exchange-2013-via-powershell.aspx