Einrichten von Quotas

Da wir keine aktuellere Anleitung gefunden haben, haben wir uns an die Anleitung für Sarge von 2008 gehalten. Im Großen und ganzen funktioniert das, die Webmin_Seiten sind natürlich nicht mehr aktuell. Die folgende Anleitung ist daher großteils eine Übersetzung dieser Beschreibung, mit Anmerkungen, Problemen und Änderungen.

Zuerst müssen die Packete nachinstalliert werden:

tjener:~# apt-get install quota quotatool

Die Pakete werden installiert, allerdings kommt beim automatischen Einrichten eine Fehlermeldung:

tjener:~# apt-get install quota quotatool
Paketlisten werden gelesen... Fertig 
Abhangigkeitsbaum wird aufgebaut  
Lese Status-Informationen ein... Fertig 
...
Richte quota ein (3.16-7) ... 
* Checking quotas... ok  
* Turning on quotas... ok  
insserv: Service quota has to be enabled to start service quotarpc 
insserv: exiting now! 
dpkg: Fehler beim Bearbeiten von quota (--configure): 
Unterprozess post-installation script gab den Fehlerwert 1 zurück 
Fehler traten auf beim Bearbeiten von: 
quota 
Verwende »/usr/bin/iceweasel«, um »x-www-browser« bereitzustellen. 
E: Sub-process /usr/bin/dpkg returned an error code (1)

Das Paket-Einrichtungs-Problem wird durch den Debian Bug #510987 verursacht. Abhilfe schaffen wir am einfachsten, indem wir jetzt folgende zwei Befehle nachreichen:

tjener:~# update-rc.d quota start 35 S . stop 85 0 6 .
tjener:~# dpkg --configure -a

Als nächstes muss die Partition abgemeldet werden, auf die Quotas angewendet werden sollen; das ist wohl einmal /skole/tjener/home0. (Probleme mit unserer Verzeichnisstruktur siehe unten.)

tjener:~# umount /skole/tjener/home0/ 

Jetzt die /ect/fstab editieren und den Eintrag für home0 so ändern, dass die Partition Quotas verarbeitet; schaut bei uns so aus:

/dev/mapper/vg_system-skole+tjener+home0 /skole/tjener/home0 ext3 defaults,usrquota,grpquota 0 2

Als Nächstes werden die Quota-Datenbank-Dateien angelegt und die notwendigen Berechtigungen vergeben (Anm.: Im der von uns verwendeten Vorlage heißt die Datenbank "aquota", wir haben dass so verwendet, aber es wäre wohl jeder andere Name auch verwendbar ?)

tjener:~# touch /skole/tjener/home0/aquota.user  
tjener:~# touch /skole/tjener/home0/aquota.group  
tjener:~# chmod 600 /skole/tjener/home0/aquota.user  
tjener:~# chmod 600 /skole/tjener/home0/aquota.group

Als erste Überprüfung kann man sich jetzt versichern, dass die DB noch leer ist:

tjener:~# ls -lh /skole/tjener/home0/aquota*  
rw------- 1 root root 0 2005-12-09 15:54 /skole/tjener/home0/aquota.group  
rw------- 1 root root 0 2005-12-09 15:54 /skole/tjener/home0/aquota.user

Jetzt wird die Datenbank mit den bestehenden Usern gefüllt

tjener:~# quotacheck -avug 
quotacheck: WARNING - Quotafile /skole/tjener/home0/aquota.user was probably truncated. Can't save quota settings...
quotacheck: WARNING - Quotafile /skole/tjener/home0/aquota.group was probably truncated. Can't save quota settings...  quotacheck: Scanning /dev/mapper/vg_data-lv_home0 [/skole/tjener/home0] done quotacheck: Checked 3 directories and 3 files

Die DB sollte nun nicht mehr leer sein:

tjener:~# ls -lh /skole/tjener/home0/aquota*  
rw------- 1 root root 7,0K 7. Jun 09:16 /skole/tjener/home0/aquota.group  
rw------- 1 root root 7,0K 7. Jun 09:16 /skole/tjener/home0/aquota.user

Und noch die Quotas aktvieren:

tjener:~# quotaon -a

Noch haben die User keine Quota, aber mit repquota kann man sehen, wieviel Plattenplatz sie schon belegt haben:

tjener:~# repquota /skole/tjener/home0 
Report for user quotas on device /dev/mapper/vg_data-lv_home0  
Block grace time: 7days; Inode grace time: 7days  
Block limits File limits  
User used soft hard grace used soft hard grace  
root -- 180284 0 0 4 0 0  
sch01 +- 2872 2000 4 6days 262 0 0  
leh01 +- 1484 0 4 115 0 0  
skadmin -- 25840 0 0 419 0 0  
web01 +- 52 0 4 13 0 0  
lehHOHK +- 1496 0 4 118 0 0  
raue -- 52 0 0 13 0 0  
scha -- 13092 0 0 273 0 0  
kust01 -- 1216 0 0 112 0 0  
kust02 -- 52 0 0 13 0 0

Jetzt sind wir soweit, dass Usern tatsächlich für unsere User Quotas vergeben können. Dazu gibt es verschiedene Möglichkeiten:

EDITOR=vi edquota -u sch01  
Disk quotas for user sch01 (uid 10007):  
Filesystem blocks soft hard inodes soft hard   
/dev/mapper/vg_system-skole+tjener+home0 2872 2000 2500 262 0 0

Achtung, die Anzeige erscheint ziemlich verschoben, die Zahlen bedeuten jedenfalls in der Reihenfolge: belegt - Softlimit - Hardlimit - Anzahl der Dateien - ...

Angaben in KB

Statt vi kann natürlich auch ein anderer Editor eingetragen werden. Wir haben es sogar grafisch (mit "gedit") versucht, und auch das scheint zu funktionieren.

Eine zweite Möglichkeit, die wir ausprobiert haben, geht mit quotatool:

die Syntax ist etwas anders, das Ergebnis aber das selbe. Einfacher ist vielleicht, mit einem Konsolenbefehl gleich die Quotas zu setzen, dafür muss man aber die Parameter kennen. Das geht aber schnell mit einem Blick auf man quotatool (im Beispiel steht "-l" für Hardlimit, "-q" wäre Soft). Praktisch auch für Nicht-Mathematiker die Möglichkeit, die Größeneinheiten in "K" oder "M" einzugeben. Vielleicht geht das aber eh' bei edquota auch.

tjener:~# quotatool -u leh01 -b -l 250M /skole/tjener/home0

Damit wären die Quotas zunächst einmal installiert und auch funktionsfähig. Aber es gibt noch einige Punkte, die noch unklar bzw. nicht wirklich sauber gelöst sind:

Quotas für Verzeichnisse, die außerhalb von home0 liegen

Zunächst haben wir gedacht, dass wir einfach noch eine Partition einrichten, auf der alle unsere Daten liegen und diese dann auch quotieren. Aber das ganze scheint mir nicht so klar, da ich nicht weiß, wie (und ob überhaupt ?) quota mit 2 verschiedenen Partitionen umgeht. Ich schätze mal, dass das dann eine 2. DB braucht und die beiden nicht gerade ihre Einträge addieren werden.

Also 2. Möglichkeit: Wir verschieben den Ordner Daten nach /home0. Aus Übersichtlichkeitsgründen gefällt mir das nicht so sehr, aber es scheint wenigsten praktikabel zu sein.

Quotas für Gruppen

Nur einzelnen Usern Quotas zu geben, ist nur in einem Testsystem möglich, bei mehreren 100 User ist das undenkbar. Daher bietet quota ja auch die gruppenmäßige Bearbeitung an. Alle oben angeführten Befehle funktionieren genauso, wenn man als Parameter statt -u Username eben -g Gruppenname eingibt. Allerdings stoßen wir jetzt wieder einmal auf ein Problem der Tjener- (lwat?) Userverwaltung, die ohne Möglichkeit der Zuweisung eines primären Gruppennamens für die User ausgestattet ist: Ein User sch01 ist zwar auch in der Gruppe students, aber seine primäre Gruppe heißt sch01. Und genau auf die greift aber quota zu.

Man kann daher problemlos der Gruppe students ein Quota verpassen, nur bleibt das ganze ohne Auswirkung, da es sowieso keinen User students gibt.

Zur Zeit haben wir keine andere Möglichkeit gesehen, als ein kleines, ganz einfaches Shellskript zu schreiben: Voraussetzung dafür in eine Textdatei, in der alle Mitglieder einer Gruppe aufgelistet sind (durch den csv-Import müsste sowas ja leicht zu bekommen sein). Auf diese Datei wenden wir dann das Skript an.

Beispiel:

Wir haben eine Datei "testlehrer.txt", in der wir alle Lehrer hineingeschrieben haben, egal ob durch Leerzeichen oder Tab getrennt. Dann haben wir ein Skript geschrieben, das in etwa so aussieht:

for i in $(cat testlehrer.txt); do 
    quotatool -u $i -b -l 4K /skole/tjener/home0
done

Das muss man nur noch aufrufen

tjener:~# ./testskript

Das wars schon (und in der Hoffnung, dass bald einmal cipux oder sonst was diese Aufgaben ordentlich erledigt)

BgQuotas (zuletzt geändert am 2013-11-03 12:10:51 durch anonym)

Alle Inhalte in diesem Wiki stehen unter der GPL.