Automatisierte Defragmentierung mit Windows Bordmitteln
Kürzlich war ich mit einem Kunden im Rahmen eines Gespräches über ein Service Level Agreement auf die Frage gestossen, ob es möglich ist die Defragmentierung von Volumes automatisiert ablaufen zu lassen. Dieser Artikel beschreibt eine Möglichkeit mit Hilfe des Windows Taskplaners diese wiederkehrende Aufgabe Zeitgesteuert ablaufen zu lassen.
Inhaltsverzeichnis
• Das Problem und das Ziel
• Erläuterung (De)Fragmentierung
• Lösung unter Windows Server 2003 und Windows XP
• Lösung unter Windows Server 2000 und Windows 2000
• Wichtige Hinweise und Warnungen
Das Problem und das Ziel
Bedingt durch die Art wie Festplatten sich permanent ändernde Daten ablegen müssen, kommt es im Laufe der Zeit zu einer hohen Ineffektivität der Datenvorhaltung. Microsoft Windows Betriebssysteme für Workstations und Server bieten jedoch die Möglichkeit diese Inneffizienz durch eine Reorganisation der Daten zu beseitigen. Dies verkürzt die Zeit, die die Festplatten benötigen um von Mitarbeitern angefragte Dateien bereitzustellen.
Als Privatbenutzer mit einem oder zwei Computern stellt es kein Problem dar hin und wieder manuell das Defragmentierungsprogramm aufzurufen um die Partitionen zu defragmentieren. In einem Unternehmen, mit beispielweise 20 Workstations und 2 Servern wird es hingegen problematisch regelmäßige Defragmentierung sicherzustellen, wenn man die Verantwortung zur Durchführung dieser administrativen Aufgaben dem jeweiligen Mitarbeiter zuspricht. Ziel in diesem Szenario ist es den administrativen Aufwand zu minimieren während die Fragmentierung möglichst klein gehalten wird.
Erläuterung (De)Fragmentierung
Spricht man, bezogen auf Festplatten, von dem Problem der Fragmentierung, ist von folgendem Effekt die Rede: Eine Festplatte speichert eine Datei auf dem Datenträger ab. Der Platz auf der Festplatte war zum Zeitpunkt des ersten Speichervorgangs weiträumig frei. Eine andere Datei wird direkt hinter die erste Datei gespeichert. Jetzt das Problem: Die erste Datei wird von einem Benutzer bearbeitet und erweitert. Die Festplatte kann die Erweiterung (Beispielsweise eine weitere Seite in einem Word Dokument) der ersten Datei nicht direkt hinter das Ende der Datei schreiben, weil dort bereits die zweite Datei liegt. Also setzt die Festplatte am Ende der ersten Datei einen Verweis auf die Startposition des zweiten Teils der ersten Datei. Der zweite Teil der ersten Datei wird hinter die zweite Datei geschrieben. Wird die erste Datei nun von einem Benutzer angefragt, liest die Festplatte den ersten Teil der Datei aus, stellt fest, dass die Datei an anderer Stelle auf der Festplatte weiter geht und springt dort hin um den Rest auch auszulesen. Genau das ist das Problem! Handelt es sich bei der Datei jediglich um 2 Fragmente, muss der Lesekopf der Festplatte nur zwei Mal ansetzen. Wenn diese Datei jedoch ziemlich oft in Verwendung ist, steigt die Anzahl der Fragmente. Umso stärker die Dateifragmentierung ist, umso länger brauch die Festplatte bis sie alle Fragmente angesprungen hat – dies geht auf Kosten der Performance.
Das Defragmentierungsprogramm analysiert die Dateien auf den Partitionen und merkt sich Dateien, die durch Fragmentierung ineffizient abgespeichert sind. Diese Dateien werden dann Reorganisiert, sodass die Anzahl der Fragmente möglichst gering ausfällt. Optimalfall ist immer eine Datei, die in einem Strang auf der Platte abgelegt wird. Das standardmäßige Windows Defragmentierungsprogramm erreicht dieses Ziel fast immer.
Lösung unter Windows Server 2003 und Windows XP
Unter Windows Server 2003 und Windows XP gibt es die Möglichkeit ein Commandozeilenprogramm aufzurufen, welches sich einer Windows eigenen API bedient, die wiederum Volumes defragmentieren kann. Die Rede ist von dem Programm “defrag.exe”. Wir gehen also von folgendem Szenario aus.
Jede Workstation soll um 2:00 Uhr nachts damit beginnen die beiden Partitionen C:\ und D:\ zu defragmentieren. Der Aufruf der Defragmentierung soll automatisch erfolgen und keinerlei Benutzerinteraktion erfordern.
Definition 1. Problem: Defrag.exe kann immer nur eine Partition als Paramenter zur Defragmentierung aufnehmen.
Lösung 1. Problem: Wir erstellen eine Batchfile, die Defrag.exe mehrfach hintereinander mit jeweils anderer Partition als Paramenterübergabe enthält:
defrag c:\
defrag d:\
Wir speichern diese Datei mit der Endung .bat auf einem frei wählbarem Verzeichnis wie “C:\Wartung\Defragmentierung.bat”.
Definition 2. Problem: Das Script soll automatisch um 2:00 Uhr nachts aufgerufen werden.
Lösung 2. Problem: Der Windows Taskplaner ermöglicht uns den Aufruf der Defragmentierung.bat automatisiert zu gestalten. Man erstellt einen Windows Task, der täglich um 2:00 nachts die Datei “C:\Wartung\Defragmentierung.bat” mit den Credentials eines lokalen Administrators ausführt. Lokale Administratorenrechte sind von Nöten, da nur Administratoren in der Lage sind Volumes zu defragmentieren.
Lösung unter Windows Server 2000 und Windows 2000
Unter Windows Server 2000 und Windows 2000 ist man zunächst mit dem Problem konfrontiert, dass die Defrag.exe nicht verfügbar ist. Ich habe diese Datei von einer Windows XP Installation auf eine Windows 2000 Installation kopiert, in der Hoffnung ich könnte das Programm dann auch unter Windows 2000 nutzen. Leider scheitert es an einer Einsprungmarke in der Datei KERNEL32.DLL, die in der Windows 2000 Installation nicht verfügbar ist. Es muss also eine andere Lösung her. Ein Freund von mir, Timo Zass, erwähnte die Möglichkeit mit VBScript nacheinander Benutzereingaben ablaufen zu lassen. Somit liesse sich das Windows-Defragmentierungsprogramm starten und automatisiert Buttons drücken. Ich suchte jedoch nach einer anderen Lösung und wurde fündig!
Sysinternals bietet ein Commandozeilenprogramm welches sich ebenfalls der Windows API bedient um Volumes zu defragmentieren. Das Programm heisst “Contig” und ist auf der Sysinternals-Website kostenlos verfügbar. Dieses Programm legen wir nun auf einer Windows 2000 Installation in das Verzeichnis “C:\Wartung\” ab. Wir ändern den Befehlsaufruf der Defragmentierung.bat von
defrag c:\
defrag d:\
in folgendes um
contig -s c:\*.*
contig -s d:\*.*
Nun müssen wir nur noch, wie bei Windows Server 2003 bzw Windows XP, einen Windows Task erstellen, der diese Datei automatisch ausführt.
Wichtige Hinweise und Warnungen
In den oben beschriebenen Lösungen für das Problem wird das automatisierte Script jeweils um 2:00 Uhr nachts ausgeführt. Man muss natürlich sicherstellen, dass die Workstation zu diesem Zeitpunkt läuft. Ferner gebe ich zu bedenken, dass der Zugriff auf das Verzeichnis, welches die Defragmentierung.bat enthält dahingehend eingestellt sein muss, dass nur das Benutzerkonto unter dem auch der Windows Task eingerichtet wurde, lesenden Zugriff hat. Wenn diese Sicherheitsmaßnahme nicht getroffen wird, kann jeder Mitarbeiter, das darin befindliche Script um weitere Befehle erweitern, die dann unter den Berechtigungen des Administrators ausgeführt werden.
Wenn Sie diese Methode zur automatisierten Defragmentierung auf Servern anwenden, sollten Sie auf jeden Fall sicherstellen, dass Sie beim Erstellen des Windows Tasks eine Zeit wählen, zu der der Server sich weitestgehend im Leerlauf befindet. Mit dieser Warnung will ich sicherstellen, dass Sie nicht Ihre Partitionen defragmentieren, während gleichzeitig eine System- oder Datensicherung erfolgt. Beachten Sie auch andere Windows Tasks oder Sicherungspläner eventueller SQL-Server Datenbanken oder Routinechecks Ihrer Anti-Malware Anwendung.
Ich persönlich höre immer wieder, dass bei der Windows Defragmentierung Dateien beschädigt werden können. Ich defragmentiere Server und Workstations einiger Kunden, wie auch meine privaten Maschinen schon seit je her und hatte noch nie Probleme damit. Sollte es tatsächlich zu einem Ausfall der Festplatte kommen, ist nicht die Tatsache, dass eine Defragmentierung gefahren wurde die Ursache, sondern eine defekte Festplatte. Der Ausfall der Festplatte währe früher oder später ohnehin aufgetreten. Microsoft hat zu diesem Thema bereits vor einiger Zeit einen Artikel verfasst, der bestätigt, dass es keinerlei Fehlfunktion in den Windows eigenen Defragmentierungsprogrammen gibt.
Weitere Infos zum Thema Defragmentierung:
[ad]