Linux Quota mini-HOWTO Albert M.C. Tam (bertie@scn.org) und Thomas Bader (thomasb@trash.net) v1.6-2, 16. April 2000 Diese HOWTO beschreibt, wie man Quota auf einem Linuxsystem einrichten und konfigurieren muss. 1. Einführung Das englische Quota mini-HOWTO wurde von Albert M.C. Tam geschrieben. Dieses HOWTO wurde von mir ins Deutsche übersetzt und erweitert. 1.1. Neue Versionen dieses Dokuments Die jeweils neuste Version dieser HOWTO ist auf dem WWW Server des Deutschen Linux HOWTO Projekts unter folgender Adresse zu finden: http://www.tu-harburg.de/dlhp/ Hier kann man die jeweils aktuelle Version auch gleich online lesen. 1.2. Feedback Kommentare, Kritik, Hinweise auf Fehler und vor allem aktive Beiträge zu diesem Dokument sind jederzeit willkommen. Bitte senden Sie Hinweise oder Kommentare zu dieser deutschen Version an mich. Mein E- Mail-Adresse ist: thomasb@trash.net 1.3. Copyright Dieses Dokument ist urheberrechtlich geschützt. Das Copyright für die englische Quota mini-HOWTO, auf der dieses Dokument basiert, liegt bei Albert M.C. Tam. Das Copyright für die deutsche Version liegt bei Thomas Bader. Das Dokument darf gemäß der GNU General Public License verbreitet werden. Insbesondere bedeutet dieses, daß der Text sowohl über elektronische wie auch physikalische Medien ohne die Zahlung von Lizenzgebühren verbreitet werden darf, solange dieser Copyright- Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt und ausdrücklich erwünscht. Bei einer Publikation in Papierform ist das Deutsche Linux HOWTO Projekt hierüber zu informieren. 1.4. Danksagungen Bedanken möchte ich mich bei Thomas de Klein (deKlein@mcis.de), der den Abschnitt ``Änderungen wirksam machen'' beigesteuert hat. 2. Allgemeines über Quota 2.1. Was sind Quota? Benutzer, die an einem System arbeiten und dort ein persönliches Verzeichnis besitzen, neigen dazu, dass sie vielzuviel in dieses Verzeichnis speichern. Vom hochauflösenden A4-Scan einer Seite, bis über Briefe vom vorletzen Jahr, alles landet auf der Festplatte. Kein Wunder, dass dann nach kurzer Zeit bereits eine neue Festplatte fällig wird. Die Lösung dazu heisst Quota. Mit Quota kann der Systemadministrator den verfügbaren Speicherplatz für jeden Benutzer oder Gruppe einschränken. 2.2. Wichtige Hinweise Quota werden zur Zeit für jede Partition seperat überwacht. Falls ein Benutzer auf mehrere Partitionen Schreibrechte hat, muss man für jede Partition eine einzelne Quota setzen, falls dies benötigt wird. Ob dies vorteilhaft ist oder nicht, darüber kann man sich streiten. 2.3. Wo kommen Quota zum Einsatz? Viele Computerbesitzer wissen gar nicht, wie stark sie durch Quota eingeschränkt werden. Ein gutes Beispiel dazu sind die Internet Provider. Viele Kunden von Ihnen empfangen E-Mails oder haben eine Homepage auf dem Server des Providers gespeichert. Auf den Servern des Providers sind auch Quota gesetzt, z.B. wie gross das E-Mail- Verzeichnis der Kunden sein darf. Quota kommt vorallem bei Servern zum Einsatz. Denn nur dadurch lässt sich vermeiden, das Benutzer zuviel auf dem Server ablegen und dadurch die Festplatte füllen. 2.4. Aktueller Status von Quota Der Quota-Support ist Teil der Kernelgeneration 2.2. Falls Ihr System keinen Quota-Support bereitstellt, empfehle ich ein Upgrade. Das Upgrade ist auch sonst sinnvoll, da die Kernelversionen 2.2.x neue, sinnvolle Features enthalten. Zur Zeit arbeitet Quota nur mit dem Dateisystem ext2. 2.5. Minimale Systemanforderungen 2.5.1. Kernel Es wird mindestens ein Kernel der 2.0.x-Serie benötigt. Den Source kann man von metalab.unc.edu:/pub/Linux/kernel/v2.0 herunterladen. Natürlich funktioniert auch die Kernelgeneration 2.2. 2.5.2. Quota Software Um Quota zu setzen, benötigt man noch die Quota Software. Bei vielen neueren Distrubutionen ist die Quota Software bereits enthalten. Falls dies nicht der Fall ist, kann man sich den Source von ftp.funet.fi:/pub/Linux/PEOPLE/Linus/subsystems/quota/ herunterladen und kompilieren. 3. Welche Arten von Quota gibt es? In dem gesamten Dokument werde ich die Begriffe Softlimit (siehe Softlimit), Hardlimit (siehe Hardlimit) und Grace Period (siehe Grace Period) in ihrer englischen Form belassen, da es meines Erachtens keine sinvolle Übersetzung dafür gibt. Wenn im Text die Rede von Softlimit oder Hardlimit ohne Zusatz ist, sind jeweils beide Arten, Block- und Inoden-Limiten gemeint. 3.1. Quota auf Benutzerebene Bei Quota auf Benutzerebene wird der Speicherplatz der einzelnen Benutzer überwacht. Mit dieser Methode kann man den Speicherplatz, den ein Benutzer füllen darf, begrenzen. Im weiteren Verlauf dieses Dokuments wird diese Form der Quota als Benutzerquota bezeichnet werden. 3.2. Quota auf Gruppenebene Bei Quota auf Gruppenebene wird der Speicherplatz der einzelnen Gruppen überwacht. Mit dieser Methode kann man den Speicherplatz, den eine Gruppe füllen darf, begrenzen. Im weiteren Verlauf dieses Dokuments wird diese Form der Quota als Gruppenquota bezeichnet werden. 3.3. Kombination von Quota auf Benutzerebene/Gruppenebene Falls auf einer Partition Quota auf Benutzer- und Gruppenebene zum Einsatz kommen, haben Quota auf Benutzerebene eine höhere Priorität. Wenn z.B. eine Gruppe ein Limit von 5 MBytes hat, und eine Angehöriger dieser Gruppe hat ein Limit von 20 MBytes, so darf dieser maximal 20 MBytes füllen, auch wenn seine Gruppe nur 5 MBytes dürfte. Im weiteren Verlauf dieses Dokuments wird diese Form der Quota als Benutzer- und Gruppenquota bezeichnet werden. 3.4. Softlimit Ein Benutzer darf sein Softlimit für eine kurze Zeit überschreiten. Aber eben nur eine kurze Zeit. Dieser Zeitraum, in dem er das Softlimit überschreiten darf, ist durch die Grace Period festgelegt. 3.5. Hardlimit Ein Benutzer kann sein Hardlimit nicht überschreiten. Es gibt keine Möglichkeit für den Benutzer, diese Limite zu umgehen. 3.6. Grace Period Die Grace Period ist ein Zeitraum. Sobald ein Benutzer sein Softlimit überschreitet, beginnt die Grace Period zu ticken. Wenn sie ersteinmal heruntergezählt ist, darf der betreffende Benutzer vorerst keine Daten mehr auf die Partition, auf der er das Softlimit überschritten hat, schreiben. Er darf erst wieder schreiben, wenn er sein Softlimit wieder unterschreitet. 4. Das System auf Quota vorbereiten 4.1. Kernelkonfiguration Bei der Kernelkonfiguration muss man auf die Frage Quota support (CONFIG_QUOTA) [n] y mit »y« antworten. 4.2. Kompilieren und Installieren der Quota Software Den Source von der Quota Software findet man unter ftp.funet.fi:/pub/Linux/PEOPLE/Linus/subsystems/quota/ Eventuell ist es günstiger, die Software von einem Mirror zu laden, da obengenannter Server die meiste Zeit überlastet ist. 4.3. Anpassen der /etc/fstab Auf einem System, auf dem Quota noch nie zum Einsatz kam, sieht die /etc/fstab normalerweise so aus: /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults 1 1 Falls man Benutzerquota einsetzen möchte, muss man die Option »usrquota« einsetzen; das Ergebnis könnte dann zum Beispiel so aussehen: /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,usrquota 1 1 Falls man Gruppenquota einsetzen möchte, muss man die Option »grpquota« einsetzen; das Ergebnis könnte dann zum Beispiel so aussehen: /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,grpquota 1 1 Falls beide obengenannten Optionen benötigt werden: /dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults,usrquota,grpquota 1 1 4.4. Erstellen der Dateien quota.user und quota.group Auf den vorhergehenden Seiten wurde erwähnt, das es Benutzerquota und Gruppenquota gebe und das die Quota für jede Partition einzeln überwacht werde. Aus diesen Gründen muss man für jede zu überwachende Partition zwei Dateien erstellen. Auch wenn nur Benutzerquota oder Gruppenquota zum Einsatz kommen, muss man zwei Dateien haben. Diese zwei Dateien müssen im Wurzelverzeichnis der Partition sein und quota.user und quota.group heissen. Am besten setzt man die Zugriffsrechte so, das nur root die Datei lesen und schreiben darf, ansonsten könnten andere Benutzer die Quota ändern. Die Dateien erstellt man so: touch /partition/quota.user touch /partition/quota.group chmod 600 /partition/quota.user chmod 600 /partition/quota.group In dem Beispiel wird davon ausgegangen, dass die zu überwachende Partition unter /partition gemountet ist. Das man diese Operation als root durchführen muss, muss wohl nicht speziell erwähnt werden. 4.5. Nachträglich eine Partition einbinden Falls man alle Quota schon gesetzt hat, und eine weitere Partition einbinden will, so müssen nur die Schritte in den Abschnitten ``Anpassen der /etc/fstab'' und ``Erstellen der Dateien quota.user und quota.group'' für die einzubindende Partition durchgeführt werden. Dann kann man die Quota wie im Abschnitt ``Setzen der Quota'' beschrieben anpassen. 4.6. Änderungen wirksam machen Nun könnte man einfach das System rebooten, um die Änderungen wirksam zu machen. Aber wir betreiben ja ein Linux System und da geht fast alles ohne neu zu booten. Um die Quotas nun tatsächlich zu aktivieren, genügt es, einfach die entsprechende Partition unzumounten und wieder zu mounten. Einfacher geht dies indem man mount mit der Option »-o remount« aufruft. Beispielweise: mount /dev/hda2 /home -o remount Im Falle des Wurzelverzeichnisses ist dies sogar die einzige Möglichkeit, da wir / nicht einfach im laufenden Betrieb unmounten können. Sollen in Zukunft weitere Dateisysteme mit Quotas versehen werden, müssen nur noch die Schritte, die in den Abschnitten ``Erstellen der Dateien quota.user und quota.group'', ``Nachträglich eine Partition einbinden'' sowie ``Änderungen wirksam machen'' beschrieben werden, ausgeführt werden. 5. Setzen der Quota Diese Operation wird mit dem Programm edquota durchgeführt. Falls man mehr über dieses Programm erfahren möchte, dem sei die Manual Page des Programms ans Herz gelegt. 5.1. Vorbereitung Zuerst muss mit quotacheck -avug der Platzverbrauch der einzelnen Benutzer erfasst werden. Je nach Grösse der Partition(en) und dem belegten Speicherplatz kann dies unterschiedlich lange dauern. 5.2. Benutzerquota setzen Angenommen, ich habe auf meinem System einen Benutzer mit dem Loginnamen »tom«. Wenn ich seine Quota setzen oder ändern möchte, rufe ich das Programm edquota -u tom auf. Dann lande ich in dem Editor, der in der Variable $EDITOR spezifiziert ist. Normalerweise ist das vi. Das könnte dann zum Beispiel so aussehen: Quotas for user tom: /dev/hda9: blocks in use: 8117, limits (soft=0, hard=0) inodes in use: 470, limits (soft=0, hard=0) /dev/hda2: blocks in use: 8966, limits (soft=0, hard=0) inodes in use: 365, limits (soft=0, hard=0) Hier nun jede Zeile einzeln erklärt: Quotas for user tom: Hier steht der Name des Benutzers, dessen Quota man gerade bearbeitet. /dev/hda9: blocks in use: 8117, limits (soft=0, hard=0) Hier steht die Partition, auf die sich die Angaben beziehen (in diesem Fall /dev/hda9) und wieviele Blöcke der Benutzer schon benutzt. In den Klammern kann man die Softlimite und die Hardlimite für die Anzahl Blöcke festlegen. Ein Wert von Null bedeutet unbegrenzt. inodes in use: 470, limits (soft=0, hard=0) Diese Zeile bezieht sich auf die gleiche Partition wie die vorhergehende. Hier kann der Systemadministrator ablesen, wieviele Inoden der Benutzer schon gebraucht hat. Eine Inode entspricht einer Datei. In den Klammern kann man hier die Softlimite und die Hardlimite für die Anzahl der Inoden festlegen. Auch hier bedeutet ein Wert von Null unbegrenzt. /dev/hda2: blocks in use: 8966, limits (soft=0, hard=0) inodes in use: 365, limits (soft=0, hard=0) Diese beiden Zeilen haben die gleiche Bedeutung wie die beiden anderen, beziehen sich jedoch auf eine andere Partition: in diesem Fall /dev/hda2. 5.3. Gruppenquota setzen Angenommen, ich möchte die Quota für ein bestimmte Gruppe setzen. Falls ich dies für die Gruppe »users« tun will, rufe ich edquota -g users auf. Dann erscheint wieder der Editor; das sieht dann zum Beispiel so aus: Quotas for group users: /dev/hda9: blocks in use: 8189, limits (soft=0, hard=0) inodes in use: 4452, limits (soft=0, hard=0) /dev/hda2: blocks in use: 955, limits (soft=0, hard=0) inodes in use: 366, limits (soft=0, hard=0) Die Optionen sind dieselben wie oben, deshalb werde ich nicht noch einmal daraufeingehen. 5.4. Quota für mehrere Benutzer vergeben Hier ist eine Lösung, wie man mehreren Benutzer die gleiche Quota wie dem Benutzer »tom« geben kann. Dazu muss man aber die csh als Shell benutzen: edquota -p tom `awk -F: '$3 > 499 {print $1}' /etc/passwd Bei diesem Beispiel wird angenommen, das die UIDs von 500 an aufwärts vergeben worden sind. Falls dies nicht der Fall ist, muss man die Zahl »499« in dem Beispiel anpassen. 5.5. Die Grace Period setzen Zu guter letzt kann man noch die Grace Period setzen. Dazu ruft man edquota -t auf. Dann gelangt man wieder in seinen Lieblingseditor und kriegt folgendes zu sehen: Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/hda9: block grace period: 0 day, file grace period: 0 days /dev/hda2: block grace period: 0 days, file grace period: 0 days Hier kann man die Grace Period einstellen. Auch hier muss man sie für jede Partition getrennt setzen. Hinter »block grace period« folgt die Zeitspanne für das Block-Limit, hinter »file grace period« die Zeitspanne für die Inoden-Limite. Mögliche Werte sind Tage (days), Stunden (hours), Minuten (minutes) und Sekunden (seconds). Ein guter Wert ist sieben Tage. 6. Starten und beenden der Quotaüberwachung 6.1. Manuell Zum Starten und Beenden der Quotaüberwachung werden die Programme quotaon und quotaoff benötigt. Mit quotaon -avug wird die Quotaüberwachung eingeschaltet, mit quotaoff -avug wird sie ausgeschaltet. 6.2. Mit einem Skript Am besten wäre es, wenn man die Quotaüberwachung schon beim Systemstart einschalten könnte. Dazu kann man sich folgenden Skriptes bedienen: #! /bin/sh # # case "$1" in start) echo "Starte Quotaüberwachung:" /sbin/quotaon -avug ;; stop) echo "Stoppe Quotaüberwachung:" /sbin/quotaoff -avug ;; *) echo "Aufruf: $0 {start|stop}" exit 1 esac exit 0 Das Skript erwartet einen Parameter, nämlich »start« oder »stop«. Mit dem Paramter »start« wird die Quotaüberwachung gestartet, mit dem Parameter »stop« wird sie beendet. Falls man das Skript von Hand starten möchte, kann man es in eine beliebiges Verzeichnis kopieren, und dann chmod +x /pfad/skriptname durchführen. /pfad/skriptname muss noch durch den wirklichen Skriptnamen und dessen Pfad ausgetauscht werden. Um es zu starten, wechselt man in das Verzeichnis, in dem sich das Skript befindet und gibt dann ./skriptname ein. Auch hier muss skriptname noch ersetzt werden. Falls man es als Init-Skript benutzen will, muss man das Skript zuerst nach /etc/init.d (bei SuSE-Linux: /sbin/init.d) kopieren. Am besten nennt man es quota. Dann führt man folgende Schritte durch: cd /etc/init.d chmod +x quota ln -sf ../rc2.d/K20quota quota ln -sf ../rc2.d/S20quota quota ln -sf ../rc3.d/K20quota quota ln -sf ../rc3.d/S20quota quota Ab jetzt wird die Quotaüberwachung bei jedem Systemstart aktiviert. 7. Verschiedene Kommandos 7.1. Quota Der Befehl quota ist für die Benutzer gedacht. Damit können Sie sich ihren aktuellen Stand ansehen: Disk quotas for user tom (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/hda8 929 1000 4000 60 65 80 Hier sieht der Benutzer, wieviel Blöcke und Inoden er in Benutzung hat und wie seine Quota gesetzt ist. Sobald er eine seiner Softlimiten überschreitet, wird in der Spalte »grace« die noch nicht abgelaufene Grace Period angezeigt. Ausserdem wird der Wert, den der Benutzer überschritten hat, durch einen Stern markiert: Disk quotas for user tom (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/hda8 929 1000 4000 68* 65 80 15 Hier sieht der Benutzer, dass er sein Inoden-Soft-Limit überschritten hat. Die Grace Period dauert nun noch 15. Leider wird nicht angezeigt, was für eine Einheit die Grace Period hat. Hoffentlich wird dies in zukünftigen Versionen der Quota Software geändert. 7.2. Quotacheck Das Programm quotacheck wurde vorher schon einmal erwähnt. quotacheck erfasst den Platzverbrauch der einzeln Benutzer und Gruppen auf den Partitionen, auf den Quota eingeschaltet ist und schreibt die Ergebnisse in die Dateien quota.user und quota.group. 7.3. Repquota repquota erzeugt eine tabellarische Übersicht über die gesetzen Quota und den Platzverbrauch der Benutzer und Gruppen. Die ausführlichste Übersicht erhält man mit repquota -avug Das führt zu folgender Ausgabe: *** Report for user quotas on /dev/hda9 (/opt) Block limits File limits User used soft hard grace used soft hard grace root -- 377812 0 0 13484 0 0 tb -- 158117 0 0 2470 0 0 *** Report for user quotas on /dev/hda8 (/home) Block limits File limits User used soft hard grace used soft hard grace root -- 23 0 0 6 0 0 tb -- 59149 0 0 4496 0 0 test -- 929 1000 4000 60 65 80 hans-rud -- 132 0 0 48 0 0 nobody -- 221 0 0 81 0 0