De meeste eindgebruikers begrijpen niet goed waarom je zo krenterig bent met disk space. Tegenwoordig koop je toch een terabyte voor vijf tientjes, nietwaar? Het zal hen worst wezen dat de SAN-storage voor jouw server met RAID-protectie, remote mirroring en off-site backups in feite een factor 100 duurder is! Maar niet getreurd: quota stellen paal en perk aan de ongebreidelde verzamelwoede van sommige gebruikers.

Op UNIX/Linux-servers verdeelt men de beschikbare opslagruimte via LVM over verschillende filesystems. Elke toepassing heeft dan recht op een deel van de disk space: het systeem zelf, syslog, apache, sendmail, enzovoorts. Op die manier kan geen enkele applicatie met alle disk space aan de haal gaan, waardoor andere applicaties in de problemen zouden komen. Als Squid door een bug /var/log/squid volschrijft, kunnen andere toepassingen gewoon verder loggen onder /var/log. Als een applicatie een gigantische core-file aanmaakt onder /opt/buggyapp, blijft de rest van het systeem netjes draaien. Maar in sommige situaties schiet LVM tekort om voldoende disk space te garanderen voor iedereen. Wat als gebruikers bestanden op verschillende filesystems moeten bewaren? En wat met een server waarop honderden mensen kunnen inloggen? Ga je echt 300 verschillende filesystems aanmaken onder /home? In dergelijke gevallen kan je beter werken met quota.

Quota laten je toe om per gebruiker of per groep limieten in te stellen voor disk space (block limits) of aantal bestanden (file limits). Voor beide types zijn er twee limieten: de soft limit (waarbij de gebruiker een waarschuwing krijgt dat het quota is overschreden) en de hard limit (waarbij de gebruiker gewoon geen nieuwe bestanden meer kan aanmaken). In de meeste distributies moet je disk quota expliciet inschakelen:

– installeer het pakket quota

– voeg in /etc/fstab de opties “usrquota,grpquota” toe aan de filesystems, waarop je quota wilt gebruiken en remount die filesystems

– initialiseer de quota-database voor het gewenste filesystem: quotacheck -cug /home. (Dit maakt de bestanden aquota.user en aquota.group aan onder /home.)

– bereken de huidige disk usage van alle gebruikers en groepen: quotacheck -avug

Nu kun je de quota raadplegen met het repquota-commando, gevolgd door een filesystem of de optie -a (voor alle filesystems samen). Andere opties zijn -u (voor user quota, dit is de default optie), -g (voor group quota) en -s (voor weergave in megabytes/gigabytes i.p.v. kilobytes). Natuurlijk wordt repquota pas nuttig als je ook effectief quota instelt voor die vervelende eindgebruikers. Daarvoor bestaan verschillende commando’s: edquota, setquota en quotatool. Die tools hebben allemaal dezelfde mogelijkheden, alleen de interface verschilt. Edquota opent je favoriete teksteditor om quota te bewerken. Dat lijkt misschien handig, maar is natuurlijk onbruikbaar in scripts. Daarmee scoor je geen goede punten bij sysadmins! Wél bruikbaar in script is setquota, waarbij je meteen op de commandline de nodige opties meegeeft. Maar let op: setquota interpreteert alle waardes als kilobytes. Grotere waardes moet je dus even omrekenen zoals in listing 1.

Listing 1

# repquota /

Block grace time: 7days; Inode grace time: 7days

                        Block limits                File limits

User            used    soft    hard  grace    used  soft  hard  grace

———————————————————————-

user1     —     552       0       0             92     0     0

# setquota -u users $((2*1024*1024)) $(((2*1024*1024)+(256*1024))) 0 0 /

# repquota / | grep user1

user1     —     552 2097152 2359296             92     0     0

Tot slot is er nog quotatool, dat apart is te installeren via het gelijknamige pakket. Quotatool heeft twee voordelen in vergelijking met setquota. Je kunt de quota ook in ‘human readable’-formaat specificeren (bijvoorbeeld M of G voor megabytes of gigabytes) en je kunt relatieve waardes gebruiken ten opzichte van de huidige quota (bijvoorbeeld +1G of -512M). Meer informatie krijg je via quotatool -h.

Gebruikers worden via e-mail verwittigd (met root in cc:), zodra ze één van de ingestelde quotalimieten bereiken. In /etc/warnquota.conf stel je de contactgegevens in die dergelijke e-mails moeten bevatten. Nog een laatste opmerking: filesystem quota zijn niet voor alle applicaties de beste oplossing. IMAP-servers (zoals Dovecot) hebben bijvoorbeeld hun eigen quotamechanisme. Filesystem quota werken in dat geval minder goed. Er is immers geen system user account voor elke mailgebruiker én door deduplicatie komt de mailboxgrootte op het filesystem niet overeen met mailboxgrootte in Dovecot.