Seit langem mal wieder ein Blogeintrag über die Technik statt über die Dinge und Obskuritäten auf OSI-Layer-8. Diesmal über eine Kombination, die mir immer mehr Freude macht.
Es geht um folgendes Problem: Für 16 mit Solaris-Zones virtualisierte Samba-Server muss eine Methode gefunden werden, dass Userfehler beim Umgang mit deren Profiles korrigiert werden können:
- Das Profil muss auf den letzten funktionierenden Stand vor dem letzten Einloggen, idealerweise aber auch zu Beginn der Woche etc. zurückgesetzt werden können.
- Das Profil muss vor unabsichtlichem Wachstum geschützt werden. Es muss möglich sein, dass User „aus Versehen“ 8 GB neue Filme oder ähnliche Dateimonster auf dem Desktop oder sonstwo im Profil liegen haben, ohne dass die Netzwerkstrippe beim Ausloggen glüht. Wichtig dabei ist, dass die User die großen Dateien während ihrer Arbeit ruhig innerhalb des Profils speichern können sollen, diese Dateien sollen halt nur bereits beim Ausloggen auf dem Server sein.
- Das Profil muss automatisch von überflüssigem Ballast wie uralten temporären Dateien gereinigt werden. Große Profile verlangsamen schließlich das Einloggen.
Die Lösung dafür setzt sich aus mehreren Teilen zusammen. Die Teile 1 und 3 sind schon gelöst, am Teil 2 arbeite ich noch, hier gibt es erste Ergebnisse.
Teil 1: „Instant Backup mit ZFS“
Das Zurücksetzen der Profile ist relativ einfach zu realisieren mit ZFS, vorausgesetzt die Profile, zumindest aber die Homeverzeichnisse der User liegen in eigenen ZFS-Filesystemen. Dann muss man Samba nur in der smb.conf anweisen, vor dem Ausliefern des Profiles schnell einen snapshot zu ziehen. Gefunden habe ich das Ganze bei Chris Gerhard. Das sieht dann folgendermaßen aus. In der smb.conf steht folgende Zeile:
root preexec = ksh -c '/usr/sbin/zfs snapshot smbexport/homes/%u@smb$(/usr/local/scripts/smbdate)'
Dabei ist smbdate ein kleines Skript, das ein mit dem Datum hilft. Rein theoretisch sollte es auch gehen, das direkt mit Samba zu erzeugen, doch leider wandelt Samba zunächst die Einträge um, die mit % beginnen (hier also das %u). Daher muss man den date-Befehl (der zur Formatierung des Datums auch ein paar % enthält), und der eigentlich zeitgleich oder kurz nach dem Auspacken der % laufen soll, in ein Skript einpacken.
Das Datumskript sieht so aus:
#!/bin/ksh -p
Das %F erzeugt das Datum in amerikanischer Schreibweise (die sortiert sich besser), die beiden „-“ trennen Datum und Uhrzeit, und %R erzeugt die Uhrzeit in 24-Stunden-Schreibweise.
exec date +%F--%R
Das kombiniert man dann noch mit automatischen Aufräumskripten, sodass nicht zu viele Snapshots aufgehoben werden (solche Skripte hat auch Chris Gehard vorrätig).
Teil 2: Kleine Roaming Profiles beim Client erzeugen
Für einige Dateimonster, beispielsweise Thunderbird-Profile, in denen per POP3 abgerufene Mails sich verbergen, oder OUTLOOK.PST-Dateien eines relativ bekannten PIM, bietet sich ein anderer Trick an: Die Programme greifen immer nur auf Teile der Riesendateien zu, man kann also diese Dateien dauerhaft auf ein Netzlaufwerk auszulagern, ohne dass diese dann beim Programmstart komplett auf den Client transferiert werden. Neben der (lässtigen) Methode, dass jeder User dies in seinem Mailprogramm/PIM selbst einstellen muss, kann man das auch Windows/Samba überlassen.
Dazu lege man sich im NETLOGON-Share eine Policy-Datei an, in der man Windows ein wenig zurechtweist. Unter
HKEY CURRENT USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell
Folders\
findet man folgende Werte:
AppData %USERPROFILE%\Anwendungsdaten
Cache %USERPROFILE%\Lokale Einstellungen\Temporary Internet Files
Cookies %USERPROFILE%\Cookies
Desktop %USERPROFILE%\Desktop
Favorites %USERPROFILE%\Favoriten
History %USERPROFILE%\Lokale Einstellungen\Verlauf
Local AppData %USERPROFILE%\Lokale Einstellungen\Anwendungsdaten
Local Settings %USERPROFILE%\Lokale Einstellungen
My Pictures %USERPROFILE%\Eigene Dokumente\Eigene Bilder
NetHood %USERPROFILE%\Netzwerkumgebung
Personal %USERPROFILE%\Eigene Dokumente
PrintHood %USERPROFILE%\Druckumgebung
Programs %USERPROFILE%\Startmenü\Programme
Recent %USERPROFILE%\Verlauf
SendTo %USERPROFILE%\SendTo
Start Menu %USERPROFILE%\Startmenü
Startup %USERPROFILE%\Startmenü\Programme\Autostart
Templates %USERPROFILE%\Vorlagen
Dabei ist %USERPROFILE% ein Verweis auf C:\Dokumente und Einstellungen\%USERNAME%. Und genau diesen Verweis kann man per Policy-Datei ändern. Man nehme also den NT4-Gruppenrichtlinien-Editor und ersetze in den Teilen des Profils, die zum Wachsen neigen und die nun nicht wirklich ständig hin- und hergeschoben werden müssen, das %USERPROFILE% durch
%LOGONSERVER%\%USERNAME%\ServerProfil
Und schon landet das jeweilige Teilverzeichnis direkt im Verzeichnis des jeweiligen Users auf dem Server, und zwar im Unterverzeichnis ServerProfil. Ideal für Desktop, Anwendungsdaten, Lokale Einstellungen und Eigene Dateien.
Wendet man das ganze sehr strikt an, kann man Profile von mehreren Gigabyte auf wenige Megabyte zusammenstauchen.
Teil 3: Serverseitiges Ausmisten der Profile
Das Aufräumen eines Windowsprofils ist auch relativ einfach: Es gibt Dateien, die man serverseitig löschen darf, und solche, von denen man den rm-Befehl fernhalten sollte. Das Problem sind dabei einige Spezialitäten, einfach mit find nach .tmp-Dateien zu suchen bringt nichts – schließlich benennt jeder Hersteller seine temporären Dateien, wie er will. Diese Varianten sind vor allem dann interessant, wenn es nicht möglich ist, die Tipps aus Teil 2 zu berücksichtigen. Daher hier mal einige exemplarische Löschvorschläge:
- Viel Zeit kosten viele kleine Dateien, da relativ viel Overhead für relativ wenig Nutzlast erzeugt wird. Wo findet man sowas? Die Cookies zählen ebenso dazu wie die diversen Temporären Dateien unter Lokale Einstellungen/Temp. Insbesondere Adobe-Produkte neigen dazu, hier jede Menge Cleanup-Müll abzulegen, der dann noch Jahrzehnte später von den Abstürzen zeugt.
- Ebenfalls relativ gut aufzuräumen sind die Temporary Internet Files: Der Internetexplorer ist ein guter Datensammler. Daher sollte man bei Roaming Profiles hier eine Bremse einbauen und die Cache-Größe beschränken. Auch per Skript hier auszumisten funktioniert.
- Besonders Java neigt dazu, sich einen großen Cache zuzulegen. Wer viel mit Java arbeitet, sollte sich mal \Anwendungsdaten\Sun\Java\Deployment im Profil anschauen. Diesen Cache kann man auch verkleinern (oder lagert ihn mit Tipp 2 auf den Server aus).
Noch ein Tipp am Rande: Wenn man sich solche Datenmengen hübsch visualisiert anschauen möchte, dann empfehlen sich die Tools TreeSize und Sequoia View.
mein Deutsch ist nicht guti is it availible in English