19.15. Dateisystem-Quotas

Quotas sind eine optionale Funktion des Betriebssystems, die es Ihnen erlauben, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Oft wird dies auf Timesharing-Systemen (Mehrbenutzersystemen) genutzt, da es dort erwünscht ist, die Ressourcen, die ein Benutzer oder eine Gruppe von Benutzern belegen können, zu limitieren. Das verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt.

19.15.1. Konfiguration des Systems, um Quotas zu aktivieren

Bevor Quotas benutzt werden können, müssen sie im Kernel konfiguriert werden, wozu die folgende Zeile der Kernelkonfiguration hinzugefügt wird:

options QUOTA

Im gewöhnlichen GENERIC Kernel sind Quotas nicht aktiviert, so dass Sie einen angepassten Kernel konfigurieren und bauen müssen, um Quotas zu benutzen. Weitere Informationen finden Sie in Kapitel 9, Konfiguration des FreeBSD-Kernels.

Durch Hinzufügen der folgenden Zeile in /etc/rc.conf wird das Quota-System in FreeBSD 7.X und ältere aktiviert:

enable_quotas="YES"

Seit FreeBSD 8.0-RELEASE und dessen Nachfolger fügen Sie stattdessen die folgende Zeile hinzu:

quota_enable="YES"

Um den Start des Quota-Systems zu beeinflussen, steht eine weitere Variable zur Verfügung. Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit quotacheck(8) überprüft. quotacheck(8) stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein sehr zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in /etc/rc.config erlaubt es Ihnen, diesen Schritt zu überspringen:

check_quotas="NO"

Schließlich müssen Sie noch in /etc/fstab die Plattenquotas auf Dateisystemebene aktivieren. Dort können Sie für alle Dateisysteme Quotas für Benutzer, Gruppen oder für beide aktivieren.

Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem die Option userquota im Feld Optionen von /etc/fstab an. Beispiel:

/dev/da1s2g   /home    ufs rw,userquota 1 2

Um Quotas für Gruppen einzurichten, verwenden Sie groupquota anstelle von userquota. Um Quotas für Benutzer und Gruppen einzurichten, ändern Sie den Eintrag wie folgt ab:

/dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

Die Quotas werden jeweils im Rootverzeichnis des Dateisystems unter dem Namen quota.user für Benutzer-Quotas und quota.group für Gruppen-Quotas abgelegt. Obwohl fstab(5) beschreibt, dass diese Dateien an anderer Stelle gespeichert werden können, wird das nicht empfohlen, da es den Anschein hat, dass die verschiedenen Quota-Utilities das nicht richtig unterstützen.

Jetzt sollten Sie Ihr System mit dem neuen Kernel booten. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, die die Quota-Dateien für alle Quotas, die Sie in /etc/fstab definiert haben, anlegen. Deshalb müssen vorher auch keine leeren Quota-Dateien angelegt werden.

Normalerweise brauchen Sie die Kommandos quotacheck(8), quotaon(8) oder quotaoff(8) nicht händisch aufzurufen, obwohl Sie vielleicht die entsprechenden Seiten im Manual lesen sollten, um sich mit ihnen vertraut zu machen.

19.15.2. Setzen von Quota-Limits

Nachdem Sie Quotas in Ihrem System aktiviert haben, sollten Sie überprüfen, dass Sie auch tatsächlich aktiviert sind. Führen Sie dazu einfach den folgenden Befehl aus:

# quota -v

Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollten Sie eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits sehen.

Mit edquota(8) können Sie nun Quota-Limits setzen.

Sie haben mehrere Möglichkeiten, die Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas) oder der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes dieser Limits wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits.

Ein Hardlimit kann nicht überschritten werden. Hat der Benutzer einmal ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit von 500 Kilobytes auf einem Dateisystem und benutzt davon 490 Kilobyte, so kann er nur noch 10 weitere Kilobytes beanspruchen. Der Versuch, weitere 11 Kilobytes zu beanspruchen, wird fehlschlagen.

Im Gegensatz dazu können Softlimits für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt.

Das folgende Beispiel zeigt die Benutzung von edquota(8). Wenn edquota(8) aufgerufen wird, wird der Editor gestartet, der durch EDITOR gegeben ist oder vi falls EDITOR nicht gesetzt ist. In dem Editor können Sie die Limits eingeben.

# edquota -u test
Quotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
        inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
        inodes in use: 0, limits (soft = 50, hard = 60)

Für jedes Dateisystem, auf dem Quotas aktiv sind, sehen Sie zwei Zeilen, eine für die Block-Quotas und die andere für die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit dieses Benutzers von einem Softlimit von 50 und einem Hardlimit von 75 auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile

/usr: kbytes in use: 65, limits (soft = 50, hard = 75)

zu:

/usr: kbytes in use: 65, limits (soft = 500, hard = 600)

Die neuen Limits sind wirksam, wenn Sie den Editor verlassen.

Manchmal ist es erwünscht, die Limits für einen Bereich von UIDs zu setzen. Dies kann mit der -p Option von edquota(8) bewerkstelligt werden. Weisen Sie dazu die Limits einem Benutzer zu und rufen danach edquota -p protouser startuid-enduid auf. Besitzt beispielsweise der Benutzer test die gewünschten Limits, können diese mit dem folgenden Kommando für die UIDs 10.000 bis 19.999 dupliziert werden:

# edquota -p test 10000-19999

Weitere Informationen erhalten Sie in edquota(8).

19.15.3. Überprüfen von Quota-Limits und Plattennutzung

Sie können quota(1) oder repquota(8) benutzen, um Quota-Limits und Plattennutzung zu überprüfen. Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann quota(1) benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit repquota(8) erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind.

Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt:

Disk quotas for user test (uid 1002):
     Filesystem  usage   quota   limit   grace   files   quota   limit   grace
           /usr      65*     50      75   5days       7      50      60
       /usr/var       0      50      75               0      50      60

Im Dateisystem /usr liegt der Benutzer momentan 15 Kilobytes über dem Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, dass der Benutzer sein Limit überschritten hat.

In der Ausgabe von quota(1) werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Mit -v werden diese Dateisysteme, wie /usr/var im obigen Beispiel, angezeigt.

19.15.4. Quotas über NFS

Quotas werden von dem Quota-Subsystem auf dem NFS Server erzwungen. Der rpc.rquotad(8) Dæmon stellt quota(1) die Quota Informationen auf dem NFS Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können.

Aktivieren Sie rpc.rquotad in /etc/inetd.conf wie folgt:

rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

Anschließend starten Sie inetd neu:

# /etc/rc.d/inetd restart

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.