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/
- (darauf achten, dasss niemand auf einem anderen Computer am Tjener eingeloggt ist)
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
- Sorry für die grauslichen Formatierungen, im Original stand alles schön untereinander (TABs werden im Wiki nicht dargestellt und müssen expandiert werden).
Jetzt sind wir soweit, dass Usern tatsächlich für unsere User Quotas vergeben können. Dazu gibt es verschiedene Möglichkeiten:
- Die eine ist (wie in der alten Anleitung vorgeschlagen) edquota zu verwenden, wobei hier auch ein Editor aufgerufen werden muss:
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
- Wir haben unser Sytem so angelegt, dass in /home0 wirklich nur die Homes der einzelnen User liegen (und das sind schon einige 100 in der Produktiv-Version) und auf gleicher Ebene ein weiteres Verzeichnis /daten liegt, indem diverse Verzeichnisse für gemeinsames Arbeiten liegen, wo aber natürlich einzelne User je nach ihren Rechten auch schreiben können, D.h., es gibt ein /skole/tjener/home0 und ein /skole/tjener/daten. Allerdings ist nur home0 auf eine Partition gemountet, nicht aber /tjener, was für uns natürlich am einfachsten wäre.
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:
#!/bin/bash
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)