Kvóty využitia disku
V prípade serverov, kde diskový priestor zdieľa veľa používateľov sa ľahko môže stať, že sa jeden (alebo niekoľkí) utrhnú a začnú miesto na disku nie využívať, ale doslova zneužívať. Je úplne jedno či tak robia vedome alebo vďaka svojej neznalosti, pretože takýmto konaním začnú obmedzovať ostatných. Skôr alebo neskôr prídete na to, že každodenné sledovanie využitia disku je neefektívne a pracné a budete hľadať spôsob ako nespratníkov obmedziť.
Obsah článku
Moderné operačné systémy majú spôsob ako obmedziť využívanie disku a v prípade Linuxu je možné obmedziť jednak celkové miesto na disku, ktoré je používateľovi k dispozícii (počet blokov), tak i počet súborov. V článku popíšem ako s takýmto systémom kvót v Linuxe (konkrétne v Debiane, ale inde je to obdobné) pracovať, ako ho pripraviť i ako ho sledovať.
Potreba obmedzovania počtu súborov súvisí so súborovými systémami, ktoré majú pevne nastavený počet súborov a tento počet sa nastavuje pri ich vytvorení (formátovaní).
Terminológia
Pri popise i nastavovaní kvót súborového systému sú používané niektoré termíny, ktorých význam je dobré správne chápať, preto ich krátke zhrnutie:
Počet blokov
Obmedzuje množstvo použitého miesta (veľkosť súborov) na disku v blokoch. Systém kvót používa 1 kB bloky, bez ohľadu na veľkosť bloku použitú súborovým systémom, takže nastavenie tohoto limitu sa počíta relatívne ľahko:
- 1 MB = 1024 (1 024 kB)
- 1 GB = 1449616 (1 024 * 1 024 kB)
Počet súborov (inodov)
Obmedzuje počet súborov. Počet súborov (inodov) príslušného súborového systému možno zistiť pomocou nástroja df:
df -i /home
Súborový systém I-uzly IPouž IVoľ IPou% Pripojený na
/dev/sda9 94767360 1039 94766321 1% /home
Nie všetky súborové systémy však takto počet súborov zobrazia, napr. ReiserFS (nemusí to nutne znamenať, že počet inodov nie je obmedzený):
df -i /inde
Súborový systém I-uzly IPouž IVoľ IPou% Pripojený na
/dev/sdb2 0 0 0 - /inde
Odporúčam nastavenie maximálneho počtu súborov nepodceňovať, hoci vhodné hodnoty možno zistiť asi len praxou.
Mäkký limit (Soft Limit)
Udáva maximálne využitie disku používateľa/skupiny na príslušnej partícii. Avšak, ak je nastavená povolená doba (grace period), vystupuje ako hranica, pri ktorej je používateľ upozornený na blížiace sa prekročenie kvóty po jeho uplynutí. Počas povolenej doby je prekročenie mäkkého limitu tolerované (až po pevný limit), ale po jej uplynutí je kvóta považovaná za prekročenú a viac už používateľ nemôže nič zapísať (ale ani zmazať a musí zasiahnuť administrátor).
Pevný limit (Hard Limit)
Pevný limit vstupuje do hry, len ak je nastavená povolená doba a udáva absolútnu hranicu využitia disku, ktorú príslušný používateľ nemôže prekročiť.
Povolená doba (Grace Period)
Povolená doba je časový limit, počas ktorého môže používateľ naďalej zapisovať na disk, i keď prekročil mäkký limit, a to až do veľkosti pevného limitu. Ak nie je nastavená (=0) je aj mäkký limit považovaný za maximálnu hranicu.
Príprava
Príprava nasadenia kvót spočíva v nainštalovaní potrebného softvéru, výbere súborových systémov a ich inicializácii.
Inštalácia
Nutným minimom je jadro so zapnutou podporou kvót (jadro v Debiane má podporu zapnutú) a balík quota:
aptitude install quota
Samotný balík quota nainštaluje všetko potrebné na sledovanie kvót, spolu s konfiguračným súborom /etc/default/quota, v ktorom možno oi. nastaviť či majú byť používateľom denne posielané emaily s upozornením na prekročenie kvóty (voľba run_warnquota). Nastavenie tejto voľby je určite užitočné, keď máte nastavený poštový systém, ale ak nie a stroj plní funkciu napr. lokálneho súborového systému, považujem zapínanie tejto voľby za zbytočné a upozorňovanie je potrebné riešiť iným spôsobom.
Výber súborového systému
Po nainštalovaní balíka je teba nastaviť voľby pripájania súborových
systémov v súbore /etc/fstab
tak, aby boli príslušné súborové
systémy pripájané so sledovaním kvót. Nie je potrebné zapínať kvóty na
všetkých súborových systémoch (partíciách), ale stačí na tých, kde si
používatelia ukladajú dáta, pretože jednak využitie systémových
adresárov (ak ich máte na samostatných partíciách) by si mal ustrážiť
správca systému iným spôsobom, ale hlavne môže dôjsť k situácií, že
používateľovi nebude doručený ani email, pretože pri prekročení kvót
bude odopretý zápis aj poštovému serveru…
Pozor na kvóty koreňového adresára (/), ľahko sa môže stať, že systém nenaštartuje, kvôli chýbajúcim modulom v initrd…
Výber súborových systémov, ktoré budú používať kvóty docielite pridaním volieb jeho pripojenia. K dispozícii je niekoľko možností:
- userquota – zapína používateľské kvóty
- groupquota – zapína skupinové kvóty
- quota – zapína používateľské i skupinové kvóty
Tieto voľby zapínajú sledovanie kvót pre súborové systémy bez žurnálovania, kde sa predpokladá kontola kvót pri každom spustení…
- usrjquota=<súbor> – zapína žurnálované používateľské kvóty
- grpjquota=<súbor> – zapína žurnálované skupinové kvóty
- jqfmt=vfsv0 – nastavuje verziu kvót (verzia 2)
Tieto voľby sú pre žurnálované súborové systémy, ako ext3, ext4, či
ReiserFS a vyžadujú zadanie mena súboru s údajmi o využití disku.
Pretože použitie žurnálovaných súborových systémov je dnes viac ako
bežné, budem pokračovať práve ich nastavením. Hoci môžete použiť
ľubovoľné mená súborov, je vhodné použiť predvolené: aquota.user
na používateľské kvóty a aquota.group
na skupinové.
Na zapnutie kvót súborového systému stačí upraviť voľby pripojenia v /etc/fstab, kde môžete na začiatku mať niečo takéto:
# /home was on /dev/sda2 during installation
UUID=fa0219cf-1465-4b5d-b6ce-afbcb0b8425d /home reiserfs default 0 1
Všetko, čo je potrebné, je pridať príslušné voľby kvót (zapínam používateľské i skupinové kvóty, ale je možné zapnúť ich aj jednotlivo):
# /home was on /dev/sda2 during installation
UUID=fa0219cf-1465-4b5d-b6ce-afbcb0b8425d /home reiserfs default,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1
Po úprave volieb pripojenia je potrebné znova pripojiť dotknuté súborové systémy, čo môžete dosiahnuť reštartovaním systému, ale za vhodnejší spôsob považujem opätovné pripojenie súborového systému, pretože takto priamo uvidíte prípadné chybové hlásenia:
mount -o remount /home
V prípade adresára, ktorý nie je používaný môžete zvoliť aj jeho odpojenie a nasledovné pripojenie, ale v prípade, že to robíte za behu systému, môžete používateľom spôsobiť problémy… Nakoniec, samozrejme, skontrolovať výsledok:
mount | grep /home /etc/fstab
/dev/disk/by-uuid/ on /home type reiserfs (rw,noatime,notail,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0)
Po úspešnom nastavení kvót jednotlivým súborovým systémom ostáva ešte ich inicializácia:
quotacheck -guma
Tento príkaz inicializuje všetky súborové systémy, ktoré majú zapnuté
kvóty a v ich koreni vytvára príslušné súbory aquota.*
. Ak chcete
inicializovať len konkrétny prípojný bod, jednoducho pridajte na
koniec príkazu meno prípojného bodu (napr. /home
). Jednotlivé voľby
znamenajú:
- -a – prikazuje prechádzať všetky súborové systémy so zapnutými kvótami
- -m – prepisuje predvolené odmietnutie skenovania pripojených RW partícií
- -u a -g – udávajú skenovanie využitia disku podľa UID resp. GID
- -v – nastavuje podrobnejší výstup (ak chcete vedieť čo sa deje…)
Nakoniec ostáva kvóty zapnúť:
quotaon -agu
Čím dôjde k zapnutiu kvót na všetkých súborových systémoch, ktoré sú
pripojené so zapnutým sledovaním kvót. Voľby tohoto príkazu majú
rovnaký význam ako pri quotacheck a pri oboch príkazoch možno
nahradiť voľbu -a menom konkrétneho zariadenia (napr.
/dev/sda1
).
Ovládanie sledovania kvót
Po inicializácii kvót ich môžete jednoducho zapínať alebo vypínať pomocou príkazov quotaon a quotaoff a ich voľby sú obdobné ako pri nástroji quotacheck. Ak sa v tom, ktoré kvóty máte zapnuté a ktoré vypnuté stratíte, pomôže voľba -p:
quotaon -ap
group quota on / (/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d) is on
user quota on / (/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d) is off
Pamätajte, že keď na nejakú dobu vypnete kvóty (quotaoff), môže
byť potrebné pred ich zapnutím (quotaon) znova spustiť nástroj
qutoacheck, aby došlo k zosúladeniu aktuálneho stavu súborového
systému s kvótami. Za príkaz môžete pridať meno prípojného bodu súboru
zariadenia (napr. /home
) namiesto voľby -a, čím bude ovládanie
sledovanie kvót len na tomto zariadení.
Správa kvót
Na správu systému kvót je k dispozícii viac nástrojov. Ako základný sa javí nástroj quota, ktorý zobrazí informácie o kvóte konkrétneho používateľa/skupiny:
quota -v slavko
Disk quotas for user slavko (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d
54 0 0 16 0 0
Výstup je v tomto prípade rozdelený do dvoch riadkov (zalamovanie možno potlačiť pomocou -w). V prvom stĺpci je identifikátor súborového systému (tu pomocou UUID), nasledovaný dvomi skupina stĺpcov, jednou pre miesto na disku a druhou pre počet súborov. Obe tieto skupiny obsahujú rovnaké údaje (v poradí):
- skutočne použité
- mäkký limit
- pevný limit
- zvyšok povolenej doby (tu prázdne, pretože nie je prekročený žiadny limit)
Tento nástroj umožňuje zobraziť nie len kvóty používateľa, ale aj skupiny (voľba -g), ale vždy len jednotlivo. Ak chcete získať komplexný prehľad o nastavení a využití kvót, poslúži nástroj repquota. Tento nástroj zobrazuje rovnaké údaje ako nástroj quota, ale pre všetkých používateľov/skupiny na danom súborovom systéme:
repquota -a
*** Report for user quotas on device /dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 1224037 0 0 49916 0 0
...
slavko -- 54 0 0 16 0 0
Myslím, že význam jednotlivých stĺpcov možno pochopiť z ich hlavičky, zastavím sa ale pri druhom stĺpci, ktorý aktuálne má hodnotu „–”, tieto dva spojovníky (mínus) udávajú, že nebola prekročená kvóta ani počtu blokov (prvý) ani počtu súborov (druhý). V prípade prekročenia niektorého limitu je príslušné mínus zmenené na plus, napr.:
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
...
slavko +- 58 20 200 14days 16 0 0
...
V tomto výpise vidno, že došlo k prekročeniu limitu veľkosti súborov (prvé plus) a používateľ môže mäkký limit prekračovať ešte 14 dní. Ďalšou úlohou správy je nastavovanie kvót jednotlivým používateľom a skupinám. Na tento účel slúžia nástroje edquota a setquota. Na začiatku nemá používateľ nastavené žiadne kvóty:
quota slavko
Disk quotas for user slavko (uid 1000): none
Dôležité môže byť aj informovanie používateľov, prípadne
administrátorov, o prekročení kvót, na čo poslúži nástroj
warnquota. Tento nástroj môže byť spúšťaný denne pomocou úlohy
cron (nastavenie v /etc /default/quota
) alebo manuálne…
Použitie nástrojov
quota
Ako prvý znova spomeniem nástroj quota, pretože je to jediný nástroj, ktorý môžu používať aj bežní používatelia, a to dvomi spôsobmi:
- zobrazenie stavu kvót svojho účtu – prosté spustenie bez parametrov
- zobrazenie stavu kvót skupín, ktorých je používateľ členom – použitím voľby -g, ak je pridané aj meno skupiny, je vypísaný stav tejto skupiny
quota -g
Disk quotas for group cdrom (gid 24): none
Disk quotas for group floppy (gid 25): none
Disk quotas for group audio (gid 29): none
Disk quotas for group dip (gid 30): none
Disk quotas for group video (gid 44): none
Disk quotas for group plugdev (gid 46): none
Disk quotas for group users (gid 100): none
Disk quotas for group slavko (gid 1000): none
Pokiaľ by bol používateľ príliš zvedavý a chcel by sa dozvedieť o kvótach skupiny, ktorej členom nie je, či o kvótach iného používateľa, má smolu:
quota mysql
quota: mysql (uid 105): Permission denied
quota -g mysql
quota: mysql (gid 108): Permission denied
Ďalšie nástroje, ktoré tu spomeniem sú určené na použitie správcom systému (root), preto k nim bežný používatelia prístup nemajú…
edquota
Kvóty je možné nastaviť jednotlivým používateľom i skupinám a slúži na to príkaz edquota, ktorý otvorí predvolený textový editor, v ktorom možno nastaviť jednotlivé limity.
Predvolený editor si môže každý používateľ nastaviť pomocou premennej prostredia $EDITOR, prípadne ho administrátor môže nastaviť pre celý systém pomocou systému alternatív Debianu.
Jeden používateľ
Úpravu nastavenia kvóty používateľa možno spustiť pomocou príkazu edquota -u používateľ. V súbore možno definovať kvóty pre každý súborový systém, kde sú používateľské kvóty zapnuté. Význam jednotlivých stĺpcov je podobný výpisu príkazu quota -v, s tým rozdielom, že v súbore sú len stĺpce pre skutočné využitie a mäkké a pevné limity miesta na disku a počtu súborov:
Disk quotas for user slavko (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/disk/by-uuid/skratene 54 200 250 16 0 0
V tomto konkrétnom prípade som nastavil mäkký limit blokov na 200 a pevný na 250. Limity počtu súborov nastavené nie sú. Po uložení súboru si možno výsledok skontrolovať nástrojom quota:
Disk quotas for user slavko (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d
54 200 250 16 0 0
Na tomto výpise vidíte, že používate slavko s UID=1000 má na danom súborovom systéme vytvorených 16 súborov s celkovou veľkosoťu 54 kB a že nemá nastavené limity počtu súborov (obe hodnoty majú 0), ale zato má nastavený mäkký (200 x 1 kB = 200 kB) i pevný limit (2505 x 1 kB = 250 kB) počtu blokov (veľkosti súborov). Viem, že 200 kB i 250 kB sú smiešne nízke hodnoty, ale zato sa jednoducho testujú…
Jedna skupina
Podobne ako používateľovi možno nastaviť kvótu aj skupine používateľov, tentokrát pomocou voľby edquota -g skupina, nastavenie je úplne rovnaké ako v prípade používateľa.
Hromadné nastavenie kvót
Spôsob, popísaný vyššie, je vhodný na nastavenia jednotlivcov. Ak potrebujete nastaviť kvóty viacerým používateľom možno využiť voľbu -p, ktorá umožňuje kopírovať nastavenie kvót od iného používateľa. Napríklad nastavenie kvót všetkým používateľom, ktorých UID je 1000 a vyššie zaistí príkaz:
edquota -p slavko $(awk -F: '$3 > 999 {print $1}' /etc/passwd)
Prípadne nastavenie kvót pre členov skupiny users:
edquota -p slavko $(members users)
Nastavenie povolenej doby
Doteraz popísané použitie edquota bolo o nastavení jednotlivcov (hoci i hromadne). Povolená doba (grace period) sa nastavuje pre celý systém (všetkých používateľov) pomocou príkazu 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/disk/by-uuid/skrátené 7days 7days
Je však možné nastaviť povolenú dobu aj jednotlivcom, pomocou edquota -T používateľ:
Times to enforce softlimit for user slavko (uid 1000):
Time units may be: days, hours, minutes, or seconds
Filesystem block grace inode grace
/dev/disk/by-uuid/skrátené unset unset
Ako som už spomínal vyššie, povolená doba (ak je nastavená) mení správanie mäkkého limitu a umožňuje jeho prekročenie po povolenú dobu. Po uplynutí tejto doby je ďalší zápis do súborového systému odmietnutý… Povolená doba môže byť zadaná v sekundách, minútach, hodinách alebo dňoch. V uvedenom výpise je systémová povolená doba nastavená na 7 dní a používateľ nemá nastavenú dobu.
setquota
Nástroj setquota slúži na neinteraktívne nastavenie kvót a je vhodný najmä na nastavovanie kvót pomocou rôznych skriptov. Pri jeho použití je treba pamätať, že vždy musíte nastaviť hodnoty všetkých limitov, teda pre tie, ktoré nechcete zapínať treba zadať 0:
setquota slavko 200 250 0 0 -a
Uvedený príklad nastavuje kvóty používateľovi slavko, pričom nastavuje mäkký (200) a tvrdý (250) limit veľkosti súborov, vypína sledovanie počtu súborov a nastavuje to pre všetky súborové systémy. Ak chcete nastaviť kvóty len pre konkrétny súborový systém, jednoducho na konci nahraďte voľbu -a menom prípojného bodu:
setquota slavko 200 250 0 0 /home
Vypnúť sledovanie kvót daného používateľa možno nastavením hodnoty 0 pre všetky kvóty:
setquota slavko 0 0 0 0 -a
V prípade nastavovania kvót skupiny je postup rovnaký, len meno skupiny treba uviesť voľbou -g (pretože implicitne je predpokladaná voľba -u):
setquota -g users 1000 1000 0 0 -a
Pomocou nástroja setquota možno nastavovať aj povolené doby, a to ako aj systémovú dobu:
setquota -t 1209600 1209600
…tak aj povolené doby jednotlivcov:
setquota -T slavko 1209600 1209600
setquota -T -g users 1209600 1209600
Treba však dať pozor, že v oboch prípadoch je nutné zadať čas udaný ako počet sekúnd (1209600 s = 14 dní).
warnquota
Nástroj warnquota slúži na zasielanie upozornení o prekročení
kvóty. Po inštalácii je všetko pripravené na pravidelné denné
posielanie emailov, ale predvolene je toto posielanie vypnuté. Na jeho
zapnutie je potrebné nastaviť premennú run_warnquota v súbore
/etc/default/quota
na hodnotu true. Samozrejme, príkaz možno
spustiť aj manuálne.
/etc/warnquota.conf
– konfiguračný súbor/etc/quotatab
– popis zariadení/etc/quotagrpadmins
– administrátori skupín
V konfiguračnom súbore /etc/warnquota.conf
možno nastaviť
podrobnosti posielaného emailu a niektoré ďalšie informácie, ktorá by
mali pomôcť používateľovi vyriešiť jeho problém s prekročenou kvótou:
MAIL_CMD = "/usr/sbin/sendmail -t"
FROM = "root(at)localhost"
SUBJECT = Prekročená kvóta
CC_TO = "root(at)localhost"
SUPPORT = "root(at)localhost"
PHONE = "01 23 456"
CHARSET = UTF-8
Ak posielanie emailov zapnete, iste bude vhodné tieto nastavenia prispôsobiť svojej potrebe, teda zdať reálne emailové adresy, či číslo telefónu…
Súbor /etc/quotatab
slúži na nahradenie mena zariadenia niečim
oveľa popisnejším, aby aj menej znalý používateľ chápal, kde prekročil
kvótu (pamätajte, že takým používateľom /dev/disk/by-uuid/...
veľa
nepovie…). Východzie email vyzerá takto:
We noticed that you are in violation with the quotasystem
used on this system. We have found the following violations:
/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d
Block limits File limits
Filesystem used soft hard grace used soft hard grace
/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d
+- 246 200 300 6days 17 0 0
Po pridaní pomenovania do súboru /etc/quotatab
:
/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d:Disk F:
Už email povie používateľom trochu viac:
...
Disk F: (/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d)
Block limits File limits
Filesystem used soft hard grace used soft hard grace
/dev/disk/by-uuid/fa0219cf-1465-4b5d-b6ce-afbcb0b8425d
+- 246 200 300 6days 17 0 0
„Disk F” je historické pomenovanie, ktoré je v práci zaužívané ešte z dôb Win98 a aby som to používateľom zbytočne nekomplikoval, je zdieľané pripájané s týmto menom, hoci už dávno nie je na disku F…
Konfiguračný súbor /etc/quotagrpadmins
slúži na nastavenie
používateľa, ktorému má byť poslaný email v prípade prekročenia
skupinovej kvóty. Zmysel tohoto konfiguračného súboru je jednoduchý –
v prípade prekročenia kvóty skupiny neexistuje spôsob ako informovať
daného používateľa, ktorý prekročenie spôsobil. A i keby na to systém
existoval, nie vždy môže za prekročenie kvóty ten používateľ, ktorý
zápis prekročenie kvóty spôsobil a posielanie emailov všetkým členom
je neužitočné… Preto môže správca v tomto súbore definovať ktorému
používateľovi má byť, v prípade prekročenia kvóty, poslaný email.
Zápis je veľmi jednoduchý:
skupina:používateľ
Takže, ak dôjde k prekročeniu kvóty skupiny skupina, dostane email používateľ používateľ, napríklad:
users:slavko
Takže o prekročení skupinovej kvóty skupiny users bude informovaný používateľ slavko.
Záver
Správa používateľských kvót je veľmi účinný nástroj na zjednodušenie života nie len správcovi, ale najmä používateľom, pretože im nikto nezneprístupní disk, len oni sami. Privítal by som ešte nejaký pekná grafický nástroj, ktorý by využitie kvót prehľadne zobrazil, napríklad vo webovom prehliadači, ale o žiadnom neviem.