Next Previous Contents

24. Quotas

Mit Quotas kann man für jeden User oder auch jede Gruppe den Resourcenverbrauch auf der Festplatte oder im Netzwerk überwachen und begrenzen. Die Routinen zum Zählen des Resourcenverbauches eines Users oder einer Gruppe müssen in den Kernel eingebunden sein. Im Ausnahmefall müssen Sie den Kernel mit der Option Quota support (CONFIG_QUOTA) [n] y neu konfigurieren und anschließend kompilieren. Lesen sie hierzu das kapitel Kernel Kompilation. Zunächst limitieren die Quotas den Resourcenverbrauch einer oder mehrerer Partitionen oder Festplatten. Durch die Installation und Aktivierung des quotad können auch Server-Cluster überwacht werden, die über SAMBA, NFS oder CODA Filesysteme miteinander verbunden sind.

24.1 Installation der Software

Installieren Sie einfach das Paket quotas von CDROM 1:

www:[init.d]# rpm -i /mnt/cdrom/RedHat/RPMS/quota-1.66-6.i386.rpm      

Die Unterstützung für Quotas ist im Standard-Kernel bereits enthalten. Sie müssen also nicht den Kernel neu kompilieren.

24.2 Vorbereiten der Filesysteme

Zur Vorbereitung der Filesysteme gehört im Prinzip nur eine kleine Ergänzung der Mount-Optionen in der Tabelle /etc/fstab:

www:[init.d]# more /etc/fstab
/dev/hda1               /                       ext2    defaults        1 1
/dev/hda2               swap                    swap    defaults        0 0
/dev/hda3               /mnt/hda3               ext2    defaults        1 1
/dev/fd0                /mnt/floppy             ext2    noauto          0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,ro       0 0
none                    /proc                   proc    defaults        0 0
none                    /dev/pts                devpts  mode=0622       0 0    
Ändern Sie diese Datei nun geringfügig ab (joe /etc/fstab, zur Bedienung siehe Anhang):

/dev/hda1               /                       ext2    defaults,usrquota,grpquota        1 1
/dev/hda2               swap                    swap    defaults        0 0
/dev/hda3               /mnt/hda3               ext2    defaults,usrquota,grpquota      1 1
/dev/fd0                /mnt/floppy             ext2    noauto          0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,ro       0 0
none                    /proc                   proc    defaults        0 0
none                    /dev/pts                devpts  mode=0622       0 0

Die Optionen zu den mount Optionen können Sie in den MAN Pages (man mount) nachlesen.

Nun müssen Sie auf jeder Partition, auf der Sie Quotas einrichten möchten, also Partition hda1 und hda3 folgendes Verzeichnis und Dateien anlegen:

www:[init.d]# cd /
www.[/]# mkdir /partition
www:[/]# cd partition/
www:[partition]# touch quota.user
www:[partition]# touch quota.group
www:[partition]# chmod -R 600 ../partition/

Und dassselbe noch einmal für die Partition hda3, die im Moment ja im Verzeichnis /mnt/hda3 gemountet ist:

www:[partition]# cd /mnt/hda3/
www:[hda3]# mkdir partition
www:[hda3]# cd partition/
www:[partition]# touch quota.user
www:[partition]# touch quota.group
www:[partition]# chmod -R 600 ../partition/

Wir sind nun mit der Vorbereitung fast fertig.

24.3 Quotas aktivieren

Zur Aktivierung der Quotas kann man nun entweder das System neu booten, oder einfach für einen Moment alle Filesysteme ausklinken und wieder einbinden, also neu mounten. Da der Kernel ja alle I/O Zugriffe cacht, kann man ohne Gefahr für 1/100 Sekunde das Filesystem unmounten und wieder neu mounten:

www:[partition]# cd /
www:[/]# mount -n -w -o remount /
www:[/]# mount -n -w -o remount /mnt/hda3/
www:[/]#                                           

Fertig ! Wohlgemerkt, dies ist kein Trick, sondern eine offizielle Option des mount Kommando's. Nur NT geschädigte würden zum Klammergriff raten. Gottseidank unterstützt ja Windows NT keine Quotas ...hehe !

Fragen wir einmal den Status mit quotastats ab:

www:[/]# quotastats
Number of dquot lookups: 0
Number of dquot drops: 0
Number of still active inodes with quota : 0
Number of dquot reads: 0
Number of dquot writes: 0
Number of quotafile syncs: 134518708
Number of dquot cache hits: 0
Number of allocated dquots: 0
Number of free dquots: 23
Number of in use dquot entries (user/group): -23
www:[/]#                                              

Wenn diese Meldung angezeigt wird, ist alles ok. Das Kommando quotacheck sollte stets nach der Einrichtung bzw. der Veränderung der Quotas durchgeführt werden. Es ermittelt z.B. bei einem neu installierten Filesystem für alle eingerichteten Quota - User und Gruppen die verbrauchten Resourcen. Im Moment sind keine Quotas für irgendeinen User oder eine Gruppe aktiviert. Testen Sie trotzdem schon einmal das Kommando aus:

www:[/]# quotacheck -avug
Scanning /dev/hda1 [/] done
Checked 3528 directories and 58555 files
Using quotafile /quota.user
Using quotafile /quota.group
Scanning /dev/hda3 [/mnt/hda3] done
Checked 520 directories and 4777 files
Using quotafile /mnt/hda3/quota.user
Using quotafile /mnt/hda3/quota.group     

24.4 Quotas für User und Gruppen setzen

Nun müssen den Usern bzw. Gruppen Limits zugeordnet werden. Mit dem Programm edquota kann man nun z.B. die Quotas für einen bestimmten User editieren. Sie befinden sich nun in dem Editor VI. Falls Sie lieber den Editor joe verwenden, so ändern Sie die Variable $EDITOR auf joe: export EDITOR=joe. Nun können Sie mit edquota -u ser01 die Limits für den User user01 editieren:

Quotas for user user01:
/dev/hda1: blocks in use: 4, limits (soft = 100, hard = 100)
        inodes in use: 55, limits (soft = 0, hard = 0)
/dev/hda3: blocks in use: 38173, limits (soft = 50000, hard = 50000)
        inodes in use: 1894, limits (soft = 10000, hard = 10000)

Was bedeuten die einzelnen Einträge ?

Editieren wir nun einmal das sog. grace limit:

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda1: block grace period: 7 days, file grace period: 7 days
/dev/hda3: block grace period: 7 days, file grace period: 7 days

Offensichtlich ist es so, daß der User user01 für den Zeitraum von 7 Tagen sein soft limit überschreiten darf, bis dann das hard limit seinem Treiben ein Ende setzt.

Beispielsweise können Sie einem User durchaus eine Frist von einem Tag geben, währenddessen er einen Speicherplatz von 500 MByte überschreiten darf. Als hard limit könnte man 850 MByte angeben, damit der User user01 eventuell auch einmal ein ISO File von RedHat LINUX aus dem Internet laden, und auf CDROM brennen kann.

Sie werden sich wundern, mit wie wenig Speicherplatz plötzlich die User auskommen. Frei nach Murphy: Es wird immer soviel Speicherplatz belegt, wie zur Verfügung steht.

Interessanter ist vielleicht das Limit für Benutzergruppen, hier unter LINUX z.B. die Gruppe users die ja standardmäßig für normale User definiert wurde. Gruppen-Limits können zusätzlich zu den normalen User-Limits definiert werden. Sinnvoll ist dies z.B. auf Internet-Servern, die Multi-Homing WWW-Server parallel mit Datenbanken hosten. Man vergibt dann z.B. für mehrere Useraccounts zusammen ein Gruppen-Limit und für die Datenbank dann noch ein User-Limit. Das führt dann dazu, daß z.B. ein Kunde, der mehrere WWW-Accounts besitzt, den Speicherplatz dynamisch unter allen seinen Accounts verteilen kann. Der Datenbank-Server kann dann stets mit einem konstanten Limit betrieben werden.

Vielleicht ist es noch nicht so ganz klar, daß auch Dämonen, wenn sie nicht gerade als User root gestartet werden, vom Betriebssystem als normale User betrachtet werden. Wenn man dann die Quotas z.B. auf den User squid oder nouser (Apache httpd) anwendet, dann werden alle Blöcke auf der Festplatte gezählt, die dieser User dann verbraucht hat. Im Falle von SQUID könnte das Limit schnell erreicht werden, da z.B. die in /var/squid/cache abgelegten Dateien ja mit der UID squid abgelegt werden. Für den Apache WWW-Server gilt dies auch, wenn er als Proxy-Cache betrieben wird. Im Normalbetrieb jedoch verbraucht der Apache WWW-Server Festplattenplatz für mit PHP abgelegt Datenbanken. Wenn z.B. jemand mit PHP Datenbanken auf die Festplatte schreibt, dann werden diese unter dem User-Accout nobody in den User-Verzeichnissen abgelegt. Alle anderen Dateien gehören dann zwar dem Besitzer dieses Homeverzeichnisses, z.B. User user01, jedoch läuft der Apache Server ja unter dem Account nodody. Es befinden sich dann im Verzeichnis von User user01 Dateien von zwei verschiedenen Besitzern. UNIX ist es völlig egal, wo auf der Festplatte die Daten eines Users abgelegt sind, da ja Dateien und Verzeichnisse alle gleich behandelt werden. Der kernel mit aktivierten Quotas zählt einfach nur die verbrauchten Resourcen und meldet, falls ein Limit überschritten ist. Er kümmert sich nicht um Schreib, Lese und Executable Flags bei Dateien und Verzeichnissen. Ihn interessiert nur die Summe der von einem User oder einer Gruppe verwendeten Blocks.

Setzen wir nun einmal die Quotas für Gruppen. Hierfür wird ebenfalls das Kommando edquota verwendet, allerdings dieses mal nicht mit der Option -u, sondern mit der Option -g:

Quotas for group users:
/dev/hda1: blocks in use: 7, limits (soft = 0, hard = 0)
        inodes in use: 8, limits (soft = 0, hard = 0)
/dev/hda3: blocks in use: 38261, limits (soft = 0, hard = 0)
        inodes in use: 1980, limits (soft = 0, hard = 0)

Die Bedeutung der Optionen ist identisch mit denen der User-Quotas. Hier könenn Sie nun herum editieren.

24.5 Quotas für viele User setzen

Zu Beginn dieses Handbuches wurde beschrieben, wie man hunderte User mit Hilfe eines kleinen Skriptes genuser.sh anlegen kann. Mit folgendem Skript kann man nun nachträglich alle User mit einer UserID ab 500 an aufwärts mit Quotas versehen. Wir verwenden hierzu den AWK und kopieren die zuvor gesetzten Quotas für den User user01 auf alle folgenden User. Dies geschieht durch die Option -p:

edquota -p user01 awk -F: '$3 > 499 {print $1}' /etc/passwd

24.6 Quotacheck

Das Programm quotacheck sollten Sie zumindest nach jeder Veränderung der Quotas und nach jedem Neustart des Servers laufen lassen. Es trägt alle Quotas in die Dateien /partition/quota.user und /partition/quota.group ein. Sie sollten quotacheck eventuell auch periodisch einmal wöchentlich laufen lassen. Kopieren Sie hierzu einfach ein Shellskript welches quotacheck startet, in das Verzeichnis /etc/cron.weekly hinein. Es wird dann wöchentlich einmal ausgeführt.

24.7 Repquota

Das Kommando repquota -a gibt Ihnen Informationen über alle User, Userlimits und Gruppenlimits aus. Dieses könnte eine lange Liste werden:

www:[/]# repquota -a|more
                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --  825422       0       0          49214     0     0
bin       --    5669       0       0           1811     0     0
daemon    --      21       0       0             14     0     0
sys       --       0       0       0            282     0     0
adm       --       1       0       0              1     0     0
tty       --      16       0       0            651     0     0
disk      --       0       0       0           3489     0     0
lp        --      76       0       0              4     0     0
kmem      --       6       0       0              4     0     0
mail      --    1593       0       0              6     0     0
uucp      --      73       0       0            443     0     0
man       --    2579       0       0            840     0     0
floppy    --       0       0       0             20     0     0
slocate   --      17       0       0              4     0     0
users     --       7       0       0              8     0     0
console   --   62772       0       0           5243     0     0
utmp      --      21       0       0              3     0     0
mysql     --      18       0       0              7     0     0
squid     --       2       0       0              2     0     0
postgres  --       2       0       0              2     0     0
xfs       --       2       0       0              3     0     0
501       --     175       0       0              8     0     0
1001      --       1       0       0              1     0     0
2222      --     155       0       0             25     0     0
.....                                                                  

Vielleicht interessanter ist noch der Resourcenverbrauch aufgeteilt nach Partitionen. beachten Sie, für welche Partitionen Quotas definiert wurden:

www:[/]# repquota /
                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --  834630       0       0          56696     0     0
bin       --     789       0       0             19     0     0
adm       --       1       0       0              1     0     0
postgres  --       2       0       0              2     0     0
xfs       --       2       0       0              3     0     0
mysql     --      95       0       0             29     0     0
squid     --       1       0       0              1     0     0
user01    --       4     100     100             55     0     0
mobilcom  --     176       0       0              9     0     0
stepken   --       1       0       0              1     0     0
beate     --       1       0       0              1     0     0
httpd     --       1       0       0              1     0     0
1046      --   62772       0       0           5243     0     0
2222      --     155       0       0             25     0     0
www:[/]# repquota /mnt/hda3
                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --   22014       0       0           1365     0     0
daemon    --       2       0       0              3     0     0
uucp      --      38       0       0             25     0     0
nobody    --    6997       0       0           1313     0     0
squid     --    2273       0       0            585     0     0
user01    --   38173   50000   50000           1894 10000 10000
mobilcom  --      43       0       0             42     0     0
stepken   --      48       0       0             47     0     0
beate     --      27       0       0             24     0     0
www:[/]#                                                        

24.8 quotaon und quotaoff

Nun kann man Quotas ja im laufenden Betrieb an-und abschalten. Sinnvoll ist dies, wenn man gerade dabei ist, mehrere UNIX Systeme zu einem Cluster zusammenzukoppeln, und man nicht genau weiß, wieviele Blöcke der User user01 z.B. auf dem anderen Filesystem belegt hat. Beim Zusammenschlup z.B. über NFS, SAMBA oder CODA-FS könnte es dann plötzlich passieren, daß die Limits überschritten sind. Daher schaltet man vor solchen Vorgängen die Quotas ab. Überprüft getrennt die belegten Resourcen, paßt die Soft-und Hard-Limits neu an, und startet dann die Quotas erneut.

Nach dem Booten des Servers sollten Sie stets die Quotas aktivieren:

 

# Check quota and then turn quota on. 

if [ -x /usr/sbin/quotacheck ] 
        then 
               echo "Ich überprüfe quotas. Bitte warten:" 
               /usr/sbin/quotacheck -avug 
               echo " Fertig !" 
        fi 
         if [ -x /usr/sbin/quotaon ] 
        then 
                echo "Aktiviere Quotas !" 
                /usr/sbin/quotaon -avug 
        fi


Next Previous Contents