Speicherplatz von Netzwerkusern unter OS X auswerten.
Wichtig: Dies ist ein Proof of Concept und keine für den Einsatz gedachte Software. Mit diesem Skript wird eine Möglichkeit gezeigt, wie der verwendete Speicherplatz der einzelnen User regelmäßig automatisiert in ein Logfile gespeichert werden kann. Verwendet wurde für den Test OS X 10.9.2
1. Anwendungsszenario
Existieren mehrere Hundert Netzwerkuser, so machte es Sinn nicht nur einen Überblick über den insgesamt verfügbaren Speicherplatz zu behalten, sondern auch regelmäßig zu beobachten, in welchem Umfang dieser von einzelnen Usern genutzt wird. Werden die Accounts auf eine eigene Festplatte ausgelagert, so ist es zwar relativ einfach möglich den Gesamtverbrauch zu überwachen, nicht aber den individuell verbrauchten Speicherplatz. Um diesen festzustellen, werden Leserechte auf gespeicherten Daten der User benötigt. Diese hat neben dem User selbst idealer Weise nur root bzw. diradmin. Um also im Finder diese Informationen anzuzeigen, wäre die Anmeldung aus privilegierte User notwendig. Dies ist nach Möglichkeit zu vermeiden.2. Speicherplatzstatistik
Zur Ausgabe von benötigtem Speicherplatz existiert das Programm du, das über die Kommandozeile (unter OS X steht hierfür das Programm Terminal zur Verfügung) aufgerufen werden kann. Ein kurzer Blick auf die Hilfe (man du) zeigt die möglichen Argumente. Interessant hierbei sind die Optionen -s für die Ausgabe des Verbrauchs aller Dateien in einem Verzeichnis und -h um eine "Human-readable" Ausgabe zu erhalten. Um also eine Statistik für den verbrauchten Speicherplatz aller User, deren Accounts auf der Festplatte network_user_disk1 liegt, auszugeben, kann als privilegierter User der folgende Befehl verwendet werden.du -sh /Volumes/network_user_disk1/*/
2. Logfile
Das Speichern der Ausgabe in einem Logfile kann aus unterschiedlichen Gründen hilfreich sein. Je nach Geschwindigkeit der verwendeten Festplatte, Anzahl der User und Größe der Accounts wird für die Auswertung relativ viel Zeit benötigt, für eine generelle Auswertung sind Daten, die zu einem Zeitpunkt erhoben werden, zu dem die Auslastung und Beanspruchung gering ist, das könnte etwa nachts oder in den frühen Morgenstunden sein, meist auch noch aktuell genug. Eine Weiterverarbeitung der Daten kann bei Bedarf zu einem späteren Zeitpunkt erfolgen. Bei regelmäßiger Ausführung lässt sich eine Statistik über die Entwicklung des Bedarfs erstellen. Eine Analyse ob ein Zusammenhang zwischen Auftreten von Problemen bei Usern und deren verfügbaren Speicherplatz besteht, kann im Nachhinein erfolgen. Selbst bei vielen Usern ist der benötigte Speicherplatz minimal. Zur besseren Organisation kann das aktuelle Datum als Teil des Dateinamens verwendet werden. Nähere Informationen zur Ausgabe von Datum und Zeit siehe man date.3. Script
Da es Sinn macht die Aufgabe zu automatisieren, bietet sich an mit einem Texteditor der Wahl ein kleines Skript zu erstellen. Im Terminal kann vi oder nano verwendet werden. Im TextEdit sollte darauf geachtet werden, dass über Format -> In reinen Text umwandeln gewählt wurde. Das Script in der Datei spacelog.sh könnte etwa so aussehen:#!/bin/bash
HEUTE=`date +"%Y%m%d"`
LOGFILE=`echo /logfiles/network_user_"$HEUTE".txt`
du -sh /Volumes/network_user_disk1/*/ > $LOGFILE
Existieren mehrere Platten mit Useraccounts, können die Daten für diese entsprechend angehängt werden:
du -sh /Volumes/network_user_disk2/*/ > $LOGFILE
#du -sh /Volumes/...
Zum Ausführen können entweder die entsprechenden Rechte mit chmod gesetzt werden, oder das Script wird an sh übergeben. Der ausführende User benötigt natürlich entsprechende Rechte um die Daten auszulesen.
sh spacelog.sh
4. Sortierung
Zur Sortierung und weiteren Auswertung können sort (siehe man sort) und grep (siehe man grep) verwendet werden. Je nach Anwendungszweck der Daten ist es möglich mit sed (siehe man sed) den Pfad zum Speicherort zu entfernen. Sind etwa nur Userordner interessant, die ein Gigabyte oder mehr enthalten, kann das Skript noch um die folgenden Befehle ergänzt werden:LOGFILE_GB=`echo /logfiles/network_user_GB_sort_"$HEUTE".txt`
less $LOGFILE | sort -nr -k 1 | grep "G\t" | sed 's,/Volumes/network_user_disk1/,,g' | sed 's,/,,g' > $LOGFILE_GB
5. crontab vs. launchd
Zur regelmäßigen Ausführung des Skripts um die Daten automatisiert zu erheben, kann sowohl crontab als auch launchd verwendet werden. Wichtig ist, dass der ausführende Benutzer auch entsprechende Leserechte auf die Userordner hat. Nähere Informationen zur Einrichtung – erraten siehe man crontab.Unter Umstanden macht es auch Sinn den Eigentümer des Logfiles entsprechend zu ändern. Hier sei auf chown (siehe man chown) verwiesen.
6. Bemerkungen
Wichtig ist Speicherort und Bearbeitungsrechte für das Skript zu beachten.Das Arbeiten als privilegierter User sollte so weit als möglich vermieden werden. Der User root ist unter OS X aus gutem Grund standardmäßig deaktiviert. Durch ein regelmäßig erstelltes Logfile ist zumindest der Login unter der grafischen Oberfläche nicht mehr notwendig.
Natürlich ist es primär wichtig, den insgesamten Speicherbedarf im Auge zu behalten. Für eine vorausschauende Betrachtung eines Systems macht es aber auch Sinn jene User im Auge zu behalten, die dieses mehr als der Durchschnitt beanspruchen.