2.12. Kontrol af diskforbrug med quota

Hvis man driver en server med mange brugere, sker det fra tid til anden at en bruger bevidst eller ubevidst kommer til at fylde disken op med filer. For at et sådant uheld ikke skal kunne påvirke de andre brugere på systemet, så kan man installere quota. Quota gør det muligt at sætte en disk forbrugs-grænse for den enkelte bruger eller evt. for en gruppe.

Systemet er så fleksibelt, at man yderligere kan sætte en ekstra-pulje op, så brugeren i en fast tidsperiode (kaldet grace-perioden) godt må "svine" med pladsen bare der ryddes op igen; f.eks. kan man have 10 MB diskplads, men kan få lov til i en periode på to timer ekstra at bruge yderligere 5 MB.

Både den almindelige kvote og den ekstra diskkvote virker ved at man pludselig ikke kan gemme filer, når man er oppe på maksimum. Brugeren må derefter selv slette filer.

Derfor er det vigtigt at systemadministratoren forklarer brugeren hvilke grænser, der er sat og hvad man gør for at følge eget forbrug - og endelig hvordan man rydder op.

Installation: Der skal være quota-understøttelse i Linux-kernen. Normalt vil en Linux-distribution have quota understøttet, ellers må du oversætte kernen på ny og da svare ja til "Quota Support" under "Filesystems" (CONFIG_quota=y).

I quota-tools pakken findes de værktøjer der skal være installeret for at du kan benytte diskkvoterne. Enten kan du benytte hvad der hører til din distribution, (fx. quota-3.01pre9-3.i386.rpm hos Red Hat 7.2) eller også hente og installere pakken http://prdownloads.sourceforge.net/linuxquota/quota-3.03.tar.gz

Quota sættes på de enkelte partitioner, dvs. /etc/fstab skal redigeres, så man i options-feltet tilføjer usrquota til hver partition man ønsker at køre quota på.

F.eks. ændres linjen i /etc/fstab fra

/dev/hda2   /home   ext2    defaults 1 1

til

/dev/hda2   /home   ext2    defaults,usrquota 1 1

Til at starte quota skal der nu indekseres og quota-programmet skal startes. Kør følgende som root

[root@linus /root]# /bin/mount -v -o remount /home  <-- for at gen-montere den ændrede partition
[root@linus /root]# /sbin/quotacheck -a -m <--- for at lave et index over brugernes forbrug
[root@linus /root]# /sbin/quotaon -uv /home <--- start quota

I den sidste kommando kan /home skiftes ud med -a, i så fald gælder kommandoen alle filsystemer.

mount køres kun en gang for alle, for at få systemet til at genindlæse /etc/fstab.

quotacheck køres for at danne et indeks over brugernes diskforbrug. Indekset gemmes på ældre systemer i /home/quota.user og i /home/aquota.user på nyere. quotacheck skal køres igen hvis man har rettet fejl i filsystemet med fsck - typisk under opstart efter strømudfald. Det klares da ofte automatisk af ens initscripts ellers kan følgende indsættes, inden quotaon kaldes, i rc.sysinit:

if [ -x /sbin/quotacheck ]; then
  echo "Undersøger kvoter på lokale filsystemer"  /sbin/quotacheck -v -a
fi

quotaon skal køres hver gang maskinen startes op, og kan automatiseres i med et par linjer i rc.sysinit eller rc.local (SuSE /etc/rc.d/boot.local):

  if [ -x /sbin/quotaon ]; then
    echo "Starter kvotestyring for lokale filsystemer"
    /sbin/quotaon  -a
  fi

Nu kan man redigere grænsen for en bruger - hvis man har mange brugere, så opret en test-bruger "quotauser" og lave følgende som skabelon og sidenhen kan man kopiere test-brugerens quota-opsætning til alle andre brugere.

Grænser redigeres ved at køre edquota for brugeren. Grænser for diskforbrug anføres i kbytes, dvs. 10000 betyder 10MB. Hvis quota ikke sættes op er standard-indstillingen at der ingen grænse er (dette anføres som et nul i opsætningsfilen).

[root@linus /root]# /usr/sbin/edquota -u quotauser
Disk quotas for user tyge (uid 500):
Filesystem      blocks       soft       hard     inodes     soft   hard       
/dev/hda2       695879         0          0       6741        0      0

Vi ser at brugeren tyge med uid 500 på filsystemet /dev/hda2, (hvor /home mountes ifølge /etc/fstab), i øjeblikket benytter 695879 filblokke (679MB) og 6741 filer, samt at der ikke er sat grænser for hvor meget brugeren må benytte.

Ret nu tallene til det brugeren må. Det er vi-editoren som kommer frem, hvis du ikke har sat EDITOR variablen.

Til højre for de første soft/hard står der inodes og igen soft/hard - dette er antal filer man kan lave. Dette bruges kun sjældent. Hvis man ønsker at brugeren fast kan bruge 10 MB og 5 MB ekstra i grace-perioden, samt et ubegrænset antal filer, skrives

Disk quotas for user tyge (uid 500):
Filesystem      blocks       soft       hard     inodes     soft   hard       
/dev/hda2       695879       10000      15000     6741        0      0

Afslut med at skrive :wq!

Hvis man derefter vil sætte "grace"-perioden hvor ekstra diskforbrug tolereres, så kan dette indstilles ved at skrive

[root@linus /root]# /usr/sbin/edquota -t 
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem      Block grace period      Inode grace period
/dev/hda2        7 days                    7days

For illustrations skyld kan vi sætte en grace-periode helt ned til to timer ved at rette teksten til

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem      Block grace period      Inode grace period
/dev/hda2        2hours                     2hours

Afslut med at skrive :wq!

Tanken med at tildele en test-bruger "quotauser" er at man relativt nemt kan tildele samme quota til alle almindelige brugere ved at køre

[root@linus /root]# edquota -p quotauser `awk -F: '$3 > 499 {print $1} /etc/passwd` 

Tricket er her at man finder alle almindelige brugere ved bruger-nummer på 500 eller større.

Andre interessante kommandoer:

Til warnquota, der sender mail til brugere over kvota, hører opsætningsfilerne /etc/quotatab og /etc/warnquota.conf. Disse benyttes især til at gøre meddelelserne til brugerne mere læse venlige. quota-tools understøtter i øvrigt også GNU gettekst, så der er mulighed for at oversætte værktøjerne til brugernes eget sprog (make pot && kbabel pot.po).

I /proc/sys/fs systemet findes dquot-nr og dquot-max, som viser antallet af cachede kvota forekomster, antallet af frie disk kvota forekomster samt øvre grænse for antallet af disk kvota forekomster.

Med quota er det altså muligt at begrænse antallet af filer og deres samlede størrelse pr. bruger. Systemet kan desuden konfigureres til at begrænse antallet af filer og deres samlede størrelse pr. gruppe.

Med quotastats kan man få lidt information om hvorledes selve kvota systemet har det.

[tyge@hven ~]$ /usr/sbin/quotastats
Number of dquot lookups: 101289
Number of dquot drops: 101271
Number of still active inodes with quota : 18
Number of dquot reads: 93
Number of dquot writes: 2077
Number of quotafile syncs: 134518740
Number of dquot cache hits: 7391
Number of allocated dquots: 90
Number of free dquots: 2036
Number of in use dquot entries (user/group): -1946

Flere informationer om quota kan findes på

Den medfølgende dokumentation er lidt spredt, men kan samles til HTML og PostScript med følgende liner:

for f in $(file *|grep troff|cut -d: -f-1)
do
  man2html $f >doc/$f.html
done
cd doc
sgml2html quotadoc.sgml
groff -Thtml -ms quotas.ms >quotas.html
ln -s quotas-1.eps quotas-1.ps