HOWTO zu Quota (Plattenplatz-Beschränkung) (C) 2008-2013 T.Birnthaler/H.Gottschalk OSTC Open Source Training and Consulting GmbH http://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. ________________________________________________________________________________ INHALTSVERZEICHNIS 1) Einführung 2) Einrichten 3) Hinweise 4) Kommando ________________________________________________________________________________ 1) Einführung ------------- 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) 2) Einrichten ------------- 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. 3) Hinweise ----------- * 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" 4) Kommandos ------------ +---------------------+-----------------------------------------------------+ | 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 | +---------------------+-----------------------------------------------------+