# 1.104.4

# Verwalten von Diskquotas

Beschreibung: Prüfungskandidaten sollten in der Lage sein, Diskquotas für Benutzer zu verwalten. Dieses Lernziel beinhaltet das Einrichten von Diskquotas für ein Dateisystem, das Bearbeiten, Prüfen und Erstellen von Berichten über Userquotas.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- quota
- edquota
- repquota
- quotaon

Das Erstellen von Diskquotas hatte in der ersten Version der LPI101 Prüfung nur eine Bewertung von 1, es ist also fragwürdig, ob überhaupt nur eine Frage zu diesem Thema in der Prüfung vorkommt. Trotzdem ist es ein offizielles Thema und wird daher hier behandelt. Abgesehen von der niedrigen Bewertung ist es aber doch so, daß es ein sehr praktischer Mechanismus ist,m den man in der Systemverwaltung häufig brauchen kann.

Worum geht es? Quotas sind Mechanismen, die es erlauben, bestimmten Usern oder Gruppen einen eingeschränkten Platz auf einem bestimmten Dateisystem zu gewähren. Das heißt, es ist z.B. möglich, einem User fest vorzugeben, wieviel Platz er in seinem Homeverzeichnis nutzen darf. Damit kann verhindert werden, daß ein User übermäßig viel Platz in Anspruch nimmt und so den anderen Usern Platz wegnimmt. In der Praxis findet man diesen Mechanismus häufig bei Webservern, die bestimmten Usern eine eingeschränkte Menge Platz anbieten, um Webseiten darauf abzulegen.

Das Prinzip der Quotas läuft darauf hinaus, daß der Kernel bei jedem schreibenden Zugriff eines Users auf ein Dateisystem überprüft, ob der User noch Platz hat, oder ob er seine Quote schon erreicht hat. Um das zu gewährleisten, muß schon beim Mounten des Dateisystems festgelegt werden, daß dieses Dateisystem eine Quotierung des Platzes haben soll. Das wird in der Regel in der Datei /etc/fstab festgelegt, wo bei den Optionen eines Dateisystems die Begriffe `usrquota` bzw. `grpquota` angefügt werden. Userquotas sind Einschränkungen für einzelne User, Gruppenquotas entsprechend Einschränkungen für bestimmte Usergruppen.

### Voraussetzungen

Die erste Voraussetzung zur Verwendung von Disk-Quotas ist die Verwendung eines Kernels, der quotas unterstützt. Das sollte heute standardmäßig jeder Kernel anbieten.

Als nächstes muß in /etc/fstab angegeben werden, welche Dateisysteme Disk-Quota benutzen sollen. Jedes Dateisystem, das dieses Feature anbieten soll muß hier bei den Mount-Optionen den Begriff `usrquota` für Userquotas und/oder `grpquota` für Gruppenquotas enthalten. Eine /etc/fstab-Datei könnte also dann folgendermaßen aussehen:

    /dev/hda2       /       ext2    defaults,usrquota 1 1
    /dev/hda3       swap    swap    defaults 0 2
    /dev/hda5       /usr    ext2    defaults 1 2
    /dev/hda6       /opt    ext2    defaults 1 2
    /dev/hda7       /home   ext2    defaults,usrquota 1 2

Wir haben also sowohl für das Wurzeldateisystem (hier /dev/hda2), als auch für das Dateisystem, auf dem die Homeverzeichnisse liegen (/home auf /dev/hda7) Userquotas angegeben.

### Anlegen der Quotafiles mit quotacheck

Die Angabe, welche User auf welchem Dateisystem wieviel Platz bzw. wieviel Inodes benutzen dürfen, steht auf der Wurzel des jeweiligen Dateisystems in den Dateien `quota.user` bzw. `quota.group`. Diese Dateien sind Binärdateien, die zunächst einmal angelegt sein müssen. Dazu dient das Programm quotacheck. Um dieses Programm zu benutzen sind root-Privilegien nötig.

Das Programm quotacheck kann entweder für jedes Dateisystem einzeln aufgerufen werden, indem ihm die entsprechende Gerätedatei als Parameter mit angegeben wird, oder es wird mit dem Parameter -a aufgerufen und arbeitet so alle Dateisysteme ab, die in der Datei /etc/fstab eine Quotaangabe gesetzt haben.

Im einfachsten Fall schreiben wir also (als root) die Zeile

      quotacheck -avug

was bedeutet, daß alle Dateisysteme bearbeitet werden, die Quotas unterstützen (-a), daß dort sowohl Userquotas (-u), als auch Gruppenquotas (-g) berücksichtigt werden und daß das Programm uns auch mitteilt, was es gerade tut (-v).

Dieser Befehl sollte immer dann angewandt werden, wenn ein neues Dateisystem mit quotas erstellt wurde oder wenn Dateisysteme nicht sauber heruntergefahren wurden, also typischerweise nach einem Systemabsturz, wenn auch fsck ausgeführt wird. Die meisten Distributionen bieten bereits fertige Startdateien an, die diese Aufgabe übernehmen.

Nach der Abarbeitung dieses Befehls existieren auf allen Dateisystemen, die die Mountoption `usrquota` gesetzt hatten die Datei `quota.user` und auf allen Dateisystemen, die die `grpquota`-Option aktiviert hatten die Datei `quota.group`. Diese Dateien enthalten binär codiert alle wichtigen Angaben über die festgelegten User- bzw. Gruppenquotas, insbesondere auch die Angaben, welche User wieviel Platz bzw. wieviele Dateien auf diesem Dateisystem im Augenblick in Anspruch nehmen.

### Quotas definieren mit edquota

Nachdem die Quotadateien jetzt angelegt sind, müssen wir als nächstes die Beschränkungen definieren, die für den jeweiligen User bzw. die Gruppe gewünscht sind. Auch das darf natürlich nur root vornehmen. Für diese Aufgabe existiert das Programm edquota.

Der Aufruf von edquota erfolgt entweder zusammen mit einem Usernamen, oder mit der Option -g und einem Gruppennamen. Dadurch wird ein Editor aufgerufen (standardmäßig der vi) und alle Angaben über die Quotas in lesbarer Form in eine Temporärdatei geschrieben. Diese Angaben können jetzt editiert werden. Wird der Editor jetzt mit Sichern der Datei beendet, so schreibt das Programm edquota die entsprechenden Einstellungen wieder binär codiert in die jeweiligen Quotadateien der jeweiligen Dateisysteme.

Typischerweise werden Userquotas für jeden User einzeln definiert. Ein Aufruf von

      edquota hans

würde jetzt etwa folgende Ausgabe im Editor nach sich ziehen:

    Quotas for user hans:
    /dev/hda2: blocks in use: 121, limits (soft = 0, hard = 0)
            inodes in use: 12, limits (soft = 0, hard = 0)
    /dev/hda7: blocks in use: 1220, limits (soft = 0, hard = 0)
            inodes in use: 204, limits (soft = 0, hard = 0)

Um jetzt Einschränkungen vorzunehmen, können die jeweiligen Limits verändert werden. Dazu stehen uns jeweils ein Soft-Limit und ein Hard-Limit sowohl für die Kilobyte-Blocks (Speicherplatz), als auch für die Inodes (Anzahl der Dateien) zur Verfügung. Der Hard-Limit kann nicht überschritten werden, der Soft-Limit kann überschritten werden, es erfolgt aber eine Warnung. Ein User kann einen Soft-Limit nur für eine bestimmte Zeit überschreiten (standardmäßig eine Woche), dann wird der überschrittene Soft-Limit zum Hard-Limit.

Aus der Beispielausgabe oben können wir entnehmen, daß der User Hans auf der Wurzel (/dev/hda2) 121 Kilobyte in 12 Dateien und im Homeverzeichnis (/dev/hda7) 1,2 Megabyte in 204 Dateien belegt.

Nehmen wir an, wir wollten eine Einschränkung vornehmen, die besagt, daß Hans in seinem Homeverzeichnis 200 Megabyte nutzen darf, auf dem Wurzelverzeichnis aber nur 10 Megabyte. Dann verändern wir die Angaben folgendermaßen:

    Quotas for user hans:
    /dev/hda2: blocks in use: 121, limits (soft = 10000, hard = 11000)
            inodes in use: 12, limits (soft = 0, hard = 0)
    /dev/hda7: blocks in use: 1220, limits (soft = 200000, hard = 210000)
            inodes in use: 204, limits (soft = 0, hard = 0)

Wenn wir auch noch die Anzahl der Dateien einschränken wollten, so können wir das mit Hilfe der Inode-Limits machen. Um z.B. festzulegen, daß Hans nicht mehr als 100 Dateien auf dem Wurzelsystem anlegen darf schreiben wir:

    Quotas for user hans:
    /dev/hda2: blocks in use: 121, limits (soft = 10000, hard = 11000)
            inodes in use: 12, limits (soft = 100, hard = 100)
    /dev/hda7: blocks in use: 1220, limits (soft = 200000, hard = 210000)
            inodes in use: 204, limits (soft = 0, hard = 0)

Jetzt beenden wir den Editor mit sichern und alle nötigen Veränderungen sind vorgenommen.

Damit wir in einem System mit vielen hundert Usern diesen Vorgang nicht hunderte Male wiederholen müssen, gibt es die Möglichkeit, mit edquota die Einstellungen eines Users auf einen anderen User zu kopieren. Nehmen wir an, wir wollen die Einstellungen, die wir für Hans getroffen haben, jetzt auch für Peter, Michael und Gabi treffen, dann schreiben wir einfach:

      edquota -p hans -u peter michael gabi

Das -u könnten wir sogar noch weglassen. Jetzt haben alle drei User (peter, michael und gabi) die selben Einschränkungen wie hans.

Wird edquota mit der Option -g Gruppenname aufgerufen und es existieren auf dem System Gruppenquotas, so sind entsprechend die Gruppenquotas zu editieren.

Wird edquota mit der Option -t aufgerufen, so erscheint eine Angabe, die die Gnadenfrist (grace period) einstellbar macht, die zwischen Soft- und Hard-Limit liegt. Gültige Werte für die Zeit sind hier sec, min, hour(s), day(s), week(s) oder month(s).

### Berichte erstellen mit repquota

Damit der Systemverwalter (root) einen Überblick behalten kann, welche Quotas für welche Dateisysteme vergeben wurden bzw. wieviel davon tatsächlich benutzt wird, gibt es das Programm repquota. Dieses Programm zeigt für ein angegebenes Dateisystem (oder - falls die -a Option gesetzt wurde - für alle Dateisysteme mit Quotas) eine Zusammenfassung der Quotas und der aktuellen Belegung.

Wird die Option -g benutzt, so werden die Gruppenquotas angezeigt.

### Eigene Quotas ansehen mit quota

Alle bisherigen Befehle sind dem Systemverwalter vorbehalten. Damit ein Normaluser überprüfen kann, welche Einschränkungen er hat bzw. wieweit er seinen Platz schon nutzt, gibt es das Programm quota.

Eine typische Ausgabe dieses Programms würde folgendermaßen aussehen, wenn in unserm Beispiel hans den Befehl quota ausführen würde:

    Disk quotas for user hans (uid 501):
       Filesystem  blocks   quota   limit   grace   files   quota   limit  grace
        /dev/hda2     121   10000   11000              12     100     100
        /dev/hda7    1200  200000  210000             204       0       0

Das Feld `grace` (engl. Gnade) zeigt, wieviel Zeitraum zwischen Softlimit und Hardlimit gelassen wird. Steht hier keine Angabe, so ist die Standardeinstellung (1 Woche) gültig.

Wird quota mit der Option -g aufgerufen, so wird statt der Userquota die Gruppenquota des aufrufenden Users dargestellt.

Wenn ein oder mehrere Quotas überschritten wurden, dann gibt quota einen Rückgabewert ungleich Null zurück.

### Quotas aktivieren bzw. deaktivieren mit quotaon und quotaoff

Damit all das oben angeführte überhaupt funktioniert, muß die Unterstützung für quotas beim Systemstart angeschaltet werden. Dazu steht das Programm quotaon zur Verfügung. Wie schon beim quotacheck kann entweder ein spezielles Dateisystem angegeben werden, oder mit der Option -a veranlasst werden, daß auf allen Dateisysteme, die in der Datei /etc/fstab die Mountoption `usrquota` oder `grpquota` gesetzt haben, die Quotas aktiviert werden. Üblicherweise wird in einer Startdatei beim Systemstart die Zeile

      quotaon -avug

stehen, die die Quotas auf allen (-a) Dateisystemen aktiviert, zeigt, was passiert (-v) und sowohl Userquotas (-u), als auch Gruppenquotas (-g) berücksichtigt.

Um von Hand die Quotas auf einzelnen Dateisystemen zu aktivieren, kann der Befehl quotaon aber auch entsprechend mit dem Dateisystem angegeben werden:

      quotaon -u /dev/hda7

würde also die Userquotas auf dem Dateisystem der Partition /dev/hda7 aktivieren.

Entsprechend funktioniert der Befehl quotaoff um die Quotas abzuschalten.