Montag, 18. Dezember 2017

Uberspace Quota Tutorial & Clearing

Als Disk Quota, kurz Quota, wird auf Unix Systemen die Begrenzung des Festplatten-Speicherplatzes für User und/oder Groups auf Mehrbenutzersystemen bezeichnet. In diesem Tutorial wird die Quota auf Uberspace Accounts anhand von Kommandozeilen-Befehlen (Command-line commands) auf der Shell (SSH) erklärt.

Die Quota ist sowas wie eine Partition für einen User.

Uberspace gibt jedem User eine Quota von 10 GB Speicherplatz. Diese 10 GB werden in der Quota als Soft Limit gesetzt. Das Hard Limit beträgt 11 GB bei einer Grace Periode (Gnadenfrist) von 7 Tagen. Die Grace Periode wird bei Überschreitung des Soft Limits gesetzt. Ein User hat also bei Überschreitung seines Soft Limits von 10 GB genau 7 Tage lang Zeit seinen belegten Speicher zu bereinigen (clearing). Mehr als das Hard Limit von 11 GB kann ein User nicht belegen.

Bei Uberspace wird in die Quota, also dem Festplattenspeicher pro User (Partition per User), auch die Größe der belegten Datenbanken mit einberechnet.

Die erste Quota Info ist im Webinterface, also nach Login in den eigenen Benutzerbereich auf uberspace.de/dashboard unter "Datenblatt" zu finden.
AUF DIESEM SERVER LIEGT DEIN UBERSPACE
Quota
Deine Dateien belegen aktuell 952M.
Deine MySQL-Datenbanken belegen aktuell 2.1G (Dieser Wert wird alle 5 Minuten aktualisiert).
Insgesamt belegst du also 3.0G von 10G (Das entspricht 30%). 
Hinweis: Uberspace verwendet den Begriff "Quota" leider zweideutig. Die eigentliche Definition von Quota meint ein Kontigent, das zur Verfügung steht. Uberspace verwendet den Begriff Quota auch im Zusammenhang für den freien und belegten Speicherplatz. Die Quota ist bei Uberspace immer für jeden User 10 GB plus 1 GB für die Grace Periode.

Eine weitere Infoquelle ist die Quota-Warning-Email. Diese Email ist eine Notification-Email, wenn der belegte Speicherplatz das Soft Limit von 10 GB überschritten hat und die Grace Periode gestartet wurde.
Bereff: [warning] Dein Uberspace »user« ist voll
In der Quota-Warning-Email werden jede Menge Verzeichnisse aufgelistet und wie viel Speicherplatz sie belegen, darunter auch die Verzeichnisse der Datenbanken, sowie jeweils eine Summe. Hier jetzt bei den Datei-Verzeichnissen nur die Summen. Die Datenbanken werden nur einzeln aufgeführt.
3.5G    /home/user
947M    /var/www/virtual/user
8.0K    /var/lib/mysql/
12M     /var/lib/mysql/user_abc
2.1G    /var/lib/mysql/user_xyz
344K    /var/lib/mysql/user_123
In dieser Quota-Warning-Email Aufzählung fehlt allerdings zwei Quellen von temporären Verzeichnissen. Diese können unter Umständen sehr viel Speicherplatz belegen, wenn es zB Probleme beim installieren eines Programmes mit linuxbrew/homebrew gibt.
Es bestehen 3 temporäre Verzeichnisse.
/tmp/
/var/tmp/
/home/user/tmp/
In allen 3 Verzeichnissen liegen die File Permissions (Dateiberechtigungen) bei den Usern, von denen diese stammen. Die ersten beiden werden nicht in der Quota-Warning-Email aufgelistet, aber zählen zur Berechnung der Quota dazu.

3 Kommandozeilen-Befehle zum Anzeigen der eigenen temporären Dateien.
username=`id -n -u`; ls -oh /tmp/ 2>&1 | grep $username
username=`id -n -u`; ls -oh /var/tmp/ 2>&1 | grep $username
username=`id -n -u`; ls -oh /home/user/tmp/ 2>&1 | grep $username
Ein Ergebnis sieht in etwa so aus:
drwxr-xr-x.    2    user    4.0K    Dec 13 19:16    hsperfdata_user
Die Dateien und Ordner, die als Owner den eigenen Namen tragen, können von diesem selbst gelöscht werden. In den temporären Verzeichnissen können die eigenen Dateien selbst gelöscht werden.

Es besteht ein Script, das die temporären Dateien in den ersten beiden erwähnten Verzeichnissen (/tmp, /var/tmp) täglich nach der access time (letzter Zugriff) überprüft und gegebenenfalls löscht.
/etc/cron.daily/tmpwatch
Uberspace nutzt hierfür das gleichnamige Programm tmpwatch.
which -a tmpwatch
/usr/bin/tmpwatch
/usr/sbin/tmpwatch 
/usr/bin/tmpwatch -> ../../usr/sbin/tmpwatch
In dem Script /etc/cron.daily/tmpwatch steht der Zeit-Parameter für das Löschen der temporären Dateien (10d = 10 Tage), sowie die Verzeichnisse und Dateien, die davon ausgeschlossen sind (-x, -X).
10d /tmp

-x /tmp/.X11-unix
-x /tmp/.XIM-unix
-x /tmp/.font-unix
-x /tmp/.ICE-unix
-x /tmp/.Test-unix
-X '/tmp/hsperfdata_*'
-X '/tmp/.hdb*lock'
-X '/tmp/.sapstartsrv*.log'
-X '/tmp/pymp-*'

30d /var/tmp
Desweiteren löscht das Script /etc/cron.daily/tmpwatch noch einiges in diesen Verzeichnissen automatisch nach 30 Tagen Nichtbenutzung.
30d /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}
Dort liegt aber hauptsächlich Kram von root.

Mit "man tmpwatch" sind mehr Informationen über das Programm tmpwatch in Erfahrung zu bringen.


Die nächsten Infoquellen für den noch freien und bereits belegten Speicherplatz sind ebenfalls über die Kommandozeile in der Shell zu finden.
Bei Uberspace ist jeder User eine eigene Gruppe. (Owner = Group)
quota -gsl
Disk quotas for group user (gid 541):
Filesystem blocks quota limit grace files quota limit grace
/dev/vda1  952M   8139M 9163M       8237  0     0
blocks = belegter Speicherplatz an Dateien und Ordner
quota = Soft Limit mit Abzug des Datenbanken-Speicherplatzes
limit = Hard Limit mit Abzug des Datenbanken-Speicherplatzes
grace = verbleibende Tage bei einer Grace Periode
files = Anzahl der Dateien
Uberspace setzt kein file quota, file limit, file grace, dessen Spalten mit angezeigt werden.

Der nächste Kommandozeilen-Befehl ist ein Uberspace internes Script. Hier werden die temporären Dateien in /tmp/ und /var/tmp/ mit aufgelistet.
uberspace-show-quota
Your quota
 what                 usage in MB
==============================
 Home.directory:      4
 DocumentRoot:        946
 System.maildir:      0
 vmailmgr.maildirs:   0
 temporary.files:     0
 temporary.files.var: 0
 MySQL.databases:     2101
==============================
 combined:            3051
Uberspace verwendet hier den Begriff Quota, obwohl nur der belegte Speicherplatz angezeigt wird. Hier werden jetzt alle temporären Verzeichnisse und der Datenbanken-Speicherplatz angezeigt. Zusammen mit dem Ergebnis vom vorherigen Befehl kann die Quota validiert werden.

quota = 8139M
MySQL.databases: 2101
8139 + 2101 = 10240 / 1024 = 10 GB

limit = 9163M
MySQL.databases: 2101
9163 + 2101 = 11264 / 1024 = 11 GB


Keine Garantie. Keine Gewähr. Kein Support.
Benutzung auf eigenes Risiko.