HOWTO zu Quota (Plattenplatz-Beschränkung)
(C) 2008-2013 T.Birnthaler/H.Gottschalk <howtos(at)ostc.de>
OSTC Open Source Training and Consulting GmbH
www.ostc.de
$Id: unix-quota-HOWTO.txt,v 1.18 2019/11/26 19:37:07 tsbirn Exp $
Dieses Dokument beschreibt Grundlagen und Einsatz von Quota-Mechanismen
(Plattenplatzbeschränkungen) für Benutzer eines UNIX/Linux-Systems.
1) Einführung
2) Einrichten
3) Hinweise
4) Kommando
Mit Quota wird für einzelne Benutzer und/oder einzelne Gruppen pro Dateisystem
(Partition) festgelegt, wieviel Plattenplatz (Blöcke) sie belegen und wieviele
Dateien (Inodes) sie anlegen dürfen. Es gibt 2 Limits pro Benutzer/Gruppe und
pro Dateisystem (Partition):
* SOFT LIMIT: Darf für einen bestimmten Zeitraum überschritten werden
("GRACE PERIOD"), danach wird es zum "HARD LIMIT".
* HARD LIMIT: Kann prinzipiell nicht überschritten werden.
Ist das "HARD LIMIT" erreicht, können keine Dateien mehr angelegt bzw.
vergrößert, sondern nur noch gelöscht werden (ACHTUNG: Oft ist dann nicht
einmal mehr eine Anmeldung an der grafischen Oberfläche möglich, da hierbei
Dateien angelegt oder Plattenplatz verbraucht werden).
Das "SOFT LIMIT" darf für eine gewisse einstellbare Zeit ("GRACE PERIOD")
überschritten werden, nach Ablauf dieser Zeit wird es zum "HARD LIMIT". D.h. es
müssen dann Dateien verkleinert/gelöscht werden, bis das "SOFT LIMIT" wieder
unterschritten wird, damit wieder ordentlich gearbeitet werden kann und die
GRACE PERIOD (GP) wieder von neuem startet.
======================================================== HARD LIMIT
_____ _ /
/ \_____ __ / \ /
/ \ / \ / \_/
-------------/---------=====\-----/----\-----/---------- SOFT LIMIT
/^ ^ \ /^ ^\ /
_ / |.........| \_/ |....| \_/
/ \ / | | | |
/ \_/ GP | GP GP noch
/ startet | startet nicht abgelaufen
/ GP erneut
/ abgelaufen
======================================================== 0
Der Support von Quota ist im LINUX-Kern integriert:
* Für ext2/ext3/XFS-Dateisystem möglich (ReiserFS mit Patch, JFS nicht!)
* Pro Dateisystem (Partition) getrennt ein-/ausschaltbar
* Pro Benutzer und Gruppe getrennt ein-/ausschaltbar und konfigurierbar
* Pro Dateisystem (Partition) die "GRACE PERIOD" getrennt festlegbar
* Für Plattenplatz (Datenblöcke) und Dateianzahl (Inodes) getrennt festlegbar
Die Quota-Datenbank gibt es in 2 Versionen ("convertquota" wandelt 1 -> 2 um).
Das neue Format "aquota" (advanced) hat folgende Erweiterungen:
* Quota für root möglich
* Quota für 32-Bit UID/GID möglich
* Quota-Größe in Byte statt KByte möglich (für ReiserFS)
* Unabhängig von der Hardware-Architektur
* Quotadatei im Radixbaum-Format (einfache Baumstruktur)
Zum Einrichten von Quota die folgenden Schritte als "root" in genau dieser
Reihenfolge durchführen:
1. Die Quota-Grundfunktionen müssen im LINUX-Kern eingebaut sein, d.h.
zcat /proc/config.gz | grep -i "quota" # oder
cat /boot/config* | grep -i "quota"
muß folgende Ausgabe produzieren:
CONFIG_XFS_QUOTA=y # Bei XFS
CONFIG_QUOTA=y # Bei ext2/ext3
CONFIG_QUOTACTL=y #
Ansonsten den LINUX-Kern mit aktiviertem Eintrag
[*] Quota support
neu übersetzen, installieren und mit ihm neu booten.
2. Quota-Kontroll-Programme + alle man-pages installieren:
Paket "quota" suchen und installieren
Evtl. prüfen ob vorhanden:
rpm -qa | grep -i "quota" # -> sollte Ergebnis liefern
dpkg -l | grep -i "quota" # -> sollte Ergebnis liefern
3. In "/etc/fstab" die mit Quota zu überwachenden Dateisysteme festlegen:
Dazu im 4. Feld (die Trennung der Felder erfolgt durch Leerzeichen!) der
zu überwachenden Dateisysteme (nicht alle müssen überwacht werden) die
Attribute "usrquota" und/oder "grpquota" (Schreibweise beachten!) zu
den bereits vorhandenen Attributen (meist "defaults") hinzufügen (keine
Leerzeichen, Trennung durch Komma!), z.B.:
/dev/sda1 / ext2 defaults,usrquota,grpquota 1 1
/dev/sda2 /home ext2 defaults,usrquota,grpquota 1 1
4. Die neuen Mount-Optionen "usrquota" und "grpquota" dem Kern bekannt machen:
mount -o remount -a # o=option, a=all
5. Die Quota-Verwaltungsdateien mit richtigen Rechten pro Partition anlegen
und Verwaltungsinformationen pro Benutzer/Gruppe (und Partition) sammeln:
quotacheck -acfugv # a=all filesystems in /etc/fstab, c=create,
# f=force, u=user, g=group, v=verbose
# -> (a)quota.user + (a)quota.group
Dieser Vorgang dauert je nach Plattengröße relativ lange. Im jeweiligen
"Mount-Point" der Dateisysteme (z.B. "/"=/dev/sda1 und "/home"=/dev/sda2)
sind anschließend die Binärdateien "(a)quota.user" und "(a)quota.group"
vorhanden und mit den Quota-Verwaltungsinformationen gefüllt. Je nach
Quota-Version heißen die Dateien:
1) Alt: quota.user, quota.group (ext2/3, ReiserFS; NICHT XFS)
2) Neu: aquota.user, aquota.group (ext2/3, ReiserFS; NICHT XFS)
6. Den Quota-Dämon "quotad" in den Runleveln 3 + 5 hinzufügen, so dass er
bei jedem Neustart des Systems aktiviert wird. Alternativ
chkconfig -a quotad # A) a=add oder
insserv quotad # B) oder
ln -s ../quotad /etc/init.d/rc5.d/S99quotad # C) manuell oder
ln -s ../quotad /etc/init.d/rc5.d/K00quotad
ln -s ../quotad /etc/init.d/rc3.d/S99quotad
ln -s ../quotad /etc/init.d/rc3.d/K00quotad
YaST # D) GUI
Den Quota-Dämon starten/stoppen/Status ermitteln/neu starten:
/etc/init.d/quotad start # Allgemein
/etc/init.d/quotad stop
/etc/init.d/quotad status
/etc/init.d/quotad restart
rcquotad start # SuSE
rcquotad stop
rcquotad status
rcquotad restart
Auf der Kommandozeile Quota einschalten (bzw. ausschalten) mit:
quotaon -a # a=all
quotaoff -a # a=all
7. Für einen Benutzer oder eine Gruppe (z.B. USER/GROUP) die beiden Limits
setzen ("edit quota"):
edquota -u USER # u=user
edquota -g GROUP # g=group
Startet (leider) den Vi/Vim mit einer (temporären) Datei folgenden Inhalts:
Disk quotas for user tsbirn (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 6431556 0 0 36 0 0
/dev/sda2 123456 0 0 134536 0 0
Die Zahlen "0" bedeuten, derzeit sind keine Beschränkung aktiv. Diese mit
den gewünschten Limits (Anzahl 1024-Byte Datenblöcke bzw. Anzahl I-Nodes)
überschreiben und ":wq" zum Speichern + Verlassen des Vi/Vim drücken. Die
Limits müssen mindestens so groß sein wie der derzeit erreichte Wert
(Spalte "blocks" und "inodes"):
Falls ein anderer Editor gewünscht wird (z.B. "gedit", "kwrite"), dann vor
Aufruf von "edquota" die Variable EDITOR/VISUAL belegen und exportieren:
EDITOR=/opt/kde3/bin/kwrite edquota ... # auf 1 Zeile
export EDITOR=/opt/kde3/bin/kwrite # auf 2 Zeilen
edquota ... # " " "
8. Die "GRACE PERIOD" festlegen (pro Partition EINE Einstellung für ALLE
Benutzer und Gruppen):
edquota -t # t=time
Startet den Vi/Vim mit einer (temporären) Datei folgenden Inhalts:
Grace period before enforcing soft limits for users:
Time units may be: months, weeks, days, hours, minutes, seconds
Filesystem Block grace period Inode grace period
/dev/sda1 7days 7days
/dev/sda2 7days 7days
"7days" bedeutet, nach 7 Tagen ständiger Überschreitung des "SOFT LIMIT"
wird es zum "HARD LIMIT". "0" bedeutet keine zeitliche Beschränkung aktiv.
"7days" gegen die Gewünschte (z.B. "2hours", "30minutes", "120seconds")
austauschen und ":wq" zum Speichern + Verlassen des Vi/Vim drücken.
9. Quota-Limits von Benutzer "USER"/Gruppe "GROUP" für andere
Benutzer/Gruppen kopieren:
edquota -u -p USER USER_LIST # p=propagate/prototype = weitergeben
edquota -g -p GROUP GROUP_LIST # p=propagate/prototype = weitergeben
Wobei "USER_LIST" eine Liste der gewünschten Benutzer ist, die bei vielen
Benutzern nicht per Hand (Tippfehler, Benutzer vergessen), sondern
möglichst automatisch erzeugt werden sollte. Analog ist "GROUP_LIST" eine
Liste von Gruppennamen.
Dazu gibt es eine Reihe von Möglichkeiten, die fast alle auf "Kommando-
Substitution" (Backquotes `...` oder $(...)!) basieren und anstelle von
"USER_LISTE/GROUP_LISTE" anzugeben sind (die mit "-" gekennzeichneten sind
nur sinnvoll, wenn ALLE Benutzer einen Namen der Form "user..." haben bzw.
ALLE Benutzer Mitglied der Gruppe "users" sind):
* $(ls -d /home/* | sed 's/.*\///')
- $(cut -d: -f1 /etc/passwd | grep "^user" | sed "s/:.*//")
- $(grep "users:" /etc/group | cut -d: -f4 | sed 's/,/ /g')
* $(awk -F: '$3 > 100 && $3 < 10000 { print $1 }' /etc/passwd)
10. Eine Alternative zum Setzen der Limits direkt über die Kommandozeile
für einzelne Benutzer, Gruppen und Dateisysteme (kein Editor-Aufruf):
setquota -u USER BLOCKSOFT BLOCKHARD INODESOFT INODEHARD DEV/MOUNTPOINT
setquota -g GROUP BLOCKSOFT BLOCKHARD INODESOFT INODEHARD DEV/MOUNTPOINT
setquota -u -p PROTOUSER USER DEV/MOUNTPOINT
setquota -g -p PROTOGROUP GROUP DEV/MOUNTPOINT
setquota -t BLOCKGRACE INODEGRACE DEV/MOUNTPOINT
11. Weitere Alternative zum Setzen der Limits direkt über die Kommandozeile
für einzelne Benutzer, Gruppen und Dateisysteme (kein Editor-Aufruf).
quotatool -u USER -b BLOCKS -l NUM DEV/MOUNTPOINT # HARD LIMIT
quotatool -u USER -b BLOCKS -q NUM DEV/MOUNTPOINT # SOFT LIMIT
quotatool -u USER -i INODES ...
quotatool -u USER -t GRACEPERIOD DEV/MOUNTPOINT
quotatool -g GROUP ...
12. Quota prüfen und bei Überschreiten eine Warnung an diese Benutzer/Gruppen
schicken (meist per "cron" durchgeführt):
warnquota
"warnquota" verwendet folgende Konfigurationsdateien:
/etc/warnquota.conf # Konfiguration (MAIL_CMD, FROM, SUBJECT, CC_TO, SUPPORT, PHON>E, CHARSET)
/etc/quotagrpadmins # Verantwortlicher Benutzer pro (Quota)ruppe
/etc/quotatab # Abbildung Gerätenamen -> sinnvole Begriffe
13. Quota-Statistik ausgeben:
quotastats
14. Eine Übersicht über die aktuellen Quota-Daten aller Dateisysteme und
Benutzer bzw. Gruppen erstellen ("report quota")
repquota -a # a=all file systems
repquota -a -u # u=user (default)
repquota -a -g # g=groups
15. Jeder Benutzer kann die eigenen Quota-Daten für alle Dateisysteme abrufen:
quota # Benutzer-Quota des eigenen Accounts (analog u=user)
quota -u # Benutzer-Quota des eigenen Accounts (u=user)
quota -g # Gruppen-Quota aller eigenen Gruppen (g=group)
quota -u USER # Benutzer-Quota (nur root erlaubt!)
quota -g GROUP # Gruppen-Quota (nur eigene Gruppen/nur root erlaubt!)
Dies ergibt z.B.:
Disk quotas for user tsbirn (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda1 6431556 20000000 10000000 36 5000 9000
/dev/sda2 123456 0 0 134536 0 0 0 134536
Sind die Spalten "grace" leer, so ist das "SOFT LIMIT" derzeit nicht
überschritten. Ansonsten steht ein "*" in der jeweiligen Spalte.
* Folgende Meldungen werden auf der Kommandozeile beim Überschreiten eines
"SOFT LIMIT" angezeigt:
sda1: warning, user block quota exceeded.
sda1: warning, user file quota exceeded.
Beim Überschreiten eines "HARD LIMIT" werden folgende Meldungen angezeigt
und der Vorgang abgebrochen:
sda1: warning, user block quota exceeded.
sda1: warning, user file quota exceeded.
* Es muss gelten: SOFT LIMIT <= HARD LIMIT.
* XFS speichert die Quota-Informationen nicht in sichtbaren Dateien, sondern
in Form von Metaoptionen. Quota-Accounting MUSS beim Montieren eines
Dateisystems eingeschalten werden. Limit-Enforcing kann danach jederzeit
ein- und ausgeschaltet werden.
* Falls ein Benutzer sowohl selbst als auch für eine seiner Gruppen Quota
eingestellt hat, haben die Quota auf Benutzerebene höhere Priorität.
* Für einen Benutzer sind Quota für mehrere seiner Gruppen möglich, die
Gruppe mit den kleinsten Quotawerten zählt.
* Für "root" kann im alten Format kein Quota aktiviert werden, im neuen schon.
* Für jeden neu angelegten Benutzer müssen die Quota-Limits manuell eingestellt
werden, das System macht das nicht automatisch. Am Besten daher ein Skript
(z.B. "add_quota_user.sh") erstellen, mit dem in Zukunft ALLE neuen Benutzer
angelegt werden (analog für Gruppen).
* Setzt die root z.B. folgenden Befehl in die Datei "/etc/profile", so werden
jedem Benutzer beim Einloggen seine aktuellen Quota-Informationen angezeigt,
wenn er eines der beiden Limits überschritten hat:
quota | grep "\\*" # "*"=Limit überschritten
* Eine regelmäßige Überprüfung der Quota-Informationen sollte entweder beim
Booten oder als Cron-Job aktiviert werden:
quotacheck -avug # a=all, v=verbose, u=user, g=group
Diese Information kann z.B. genutzt werden, um Anwendern, die ihr "Soft
Limit" überschritten haben, täglich automatisch eine Mail mit einem
entsprechenden Hinweis zu schicken.
* Weitere Dokumentation enthalten die man-Pages zu:
+ fstab(5), mount(2), mount(8)
+ quota(1), quotaon(8), quotaoff(8)
+ edquota(8), repquota(8), quotacheck(8)
+ setquota(8), quotastats(8), warnquota(8), quotatool(8)
+ quotactl(2)
+ convertquota(8)
* Fehlende Manpages:
+ Konfigurationsvariable von "warnquota.conf"
+ Bedeutung und Format von "quotagrpadmins"
+ Bedeutung und Format von "quotatab"
+---------------------+-----------------------------------------------------+
| Kommando | Bedeutung |
+---------------------+-----------------------------------------------------+
| mount -o usrquota | Beim Mounten Benutzer-Quota-Überwachung aktivieren |
| mount -o grpquota | Beim Mounten Grouppen-Quota-Überwachung aktivieren |
| convertquota | Quota-Datenbank umwandeln: altes -> neues Format |
| quotacheck | Quota-Datenbank aufbauen |
| quotaoff | Quota-Überwachung ausschalten |
| quotaon | Quota-Überwachung einschalten |
+---------------------+-----------------------------------------------------+
| edquota | Quota-Limits für Benutzer/Gruppe per Editor setzen |
| quotatool | Quota-Einstellungen per Kommandozeile verwalten |
| setquota | Quota-Einstellungen per Kommandozeile verwalten |
+---------------------+-----------------------------------------------------+
| quotastats | Quota-Statistik ausgeben |
| quota | Quota-Übersicht ausgeben |
| repquota | Quota-Übersicht ausgeben |
| warnquota | Warnung (Mail) bei überschrittenem Quota generieren |
+---------------------+-----------------------------------------------------+