Petra Vojnara už nebavilo kupovat nové disky do svého serveru...
Pevné disky jsou už v dnešní době poměrně levné, a tak není problém v případě nedostatku místa pořídit si disků
několik a získat tak slušnou kapacitu. Ovšem i na takovém domácím počítači většinou pracuje pár lidí, kteří nemusí
vědět, jak s diskovým prostorem zacházet tak, aby se dostalo na všechny členy rodiny.
Takový server, na kterém je typicky nejméně několik desítek či stovek uživatelů, to už je ovšem něco jiného. Zde se
nelze spolehnout jen na slib, že Franta už si opravdu žádné další DVD nebude do svého domovského adresáře zálohovat.
V tomto směru musí správce vládnout pevnou rukou (nebo dostatečnými financemi na nové disky) a jeho neocenitelným
pomocníkem se stanou právě kvóty.
Trocha teorie
Diskové kvóty jsou mocný nástroj pro omezení velikosti místa na disku, které může daný uživatel obsadit. Lze je
použít i na skupiny, pak se sčítají objemy dat všech uživatelů ve skupině, tedy stačí jeden nenasytný uživatel a
ostatní mají smůlu, lepší je tedy omezit všechny uživatele zvlášť.
Je třeba si vysvětlit význam následujících, pro kvóty základních, pojmů:
- soft limit - tj. překročitelná mez;
- hard limit - tj. nepřekročitelná mez;
- grace period - doba, po kterou může být překročen soft limit;
- blocks - představuje obsazené místo;
- inodes - představuje počet souborů;
Omezení místa lze rozdělit do dvou stupňů. Pokud např. uživatel stahuje a stahuje a... dřív nebo později narazí na
první mez, tzv. soft limit. Pokud ji překročí, obdrží sice varování, ale ukládat může vesele dál. Pak narazí
na další a tentokrát už pevnou mez, tzv. hard limit. Víc než mu stanovuje, už neuloží.
V souvislosti s mezí soft limit ještě existuje dobrá věc, a sice tzv. grace period. Tato hodnota představuje
dobu, po kterou může uživatel překročit soft limit. Pokud má uživatel po jejím vypršení stále uloženo více, než je
soft limit, na disk už nic dalšího neuloží (tj. soft limit se změní na hard limit).
Na závěr přípravné teoretické části ještě poznamenám, že diskové kvóty lze nastavit nejen na objem dat, tj. položka
blocks, ale též na celkový počet souborů, tj. položka inodes. Na první pohled to vypadá jako
nepotřebné, ale může se to někdy hodit. Každý souborový systém má totiž omezen celkový počet souborů.
Požadavky
Dříve než se pustíme do vlastního spuštění a konfigurace, musíme ověřit, zdá má náš systém pro provoz diskových kvót
předpoklady:
- podpora v jádře;
- nástroje pro nastavení a správu.
Ověření podpory kvót v jádře:
~# dmesg | grep quota
VFS: Disk quotas dquot_6.5.1
~# ls /lib/modules/`uname -r`/kernel/fs | grep quota
quota_v1.ko
quota_v2.ko
První požadavek ověříme snadno (viz rámeček). Všimněte si druhého příkazu, který testuje na přítomnost potřebných
modulů. V našem případě máme moduly jak pro starší, tak i pro novou verzi kvót (ta podporuje 32bitové UID a GID).
Pokud druhý příkaz nevypíše nic, je také možné, že jsou dané součásti zakompilovány přímo v jádře.
UID je jednoznačný číselný identifikátor (prostě číslo) uživatele a podobně GID je jednoznačný číselný identifikátor
skupiny.
Problém nastane, jestliže podporu v jádře nemáme. V dnešní době toto kritérium většina distribucí splňuje, takže je
to nepravděpodobné. Pokud nám opravdu podpora chybí, musíme si buď sehnat jádro, které ji mít bude, nebo si ji
vlastnoručně přidat. To znamená stáhnout záplatu, zkompilovat jádro a znovu jej nainstalovat. Vydáme-li se při
konfiguraci jádra cestou make config, pak jsou pro nás relevantní tyto položky:
-
CONFIG_QUOTA=y
-
CONFIG_QFMT_V2=m (lze i y)
Pokud použijeme lidštější způsob konfigurace, bude nás zajímat sekce File systems, položky Quota support a Quota
format v2 support.
Druhým požadavkem jsou pak příslušné nástroje, bez kterých by nám podpora v jádře byla na nic. Ověřte tedy pomocí
správce balíčků vaší distribuce, zda je balíček pro práci s kvótami nainstalovaný. Pokud ne, tak jej nainstalujte. V
nejhorším případě stáhněte zdrojové kódy, ty zkompilujte a pak nainstalujte binárky. Tímto je dokončena přípravná
fáze a nyní hurá do konfigurace.
Nastavení
Abychom na disku (tedy spíše na konkrétní diskové oblasti) mohli kvóty používat, musíme o tom systému nějakým
způsobem říct. Parametry jednotlivých připojovaných svazků se nastavují třeba editací souboru
/etc/fstab, tedy např.
# původní
... defaults 1 3
# podpora kvót
... usrquota,grpquota 1 3
V tomto případě daný oddíl podporuje jak kvóty pro uživatele, tak i pro skupiny. Pokud víte, že skupinové kvóty
nevyužijete, stačí místo usrquota,grpquota jen quota (ekvivalent usrquota).
Nezapomeňte také na to, že ne všechny souborové systémy kvóty podporují. Tedy např. na systémech typu FAT nebo NTFS
kvóty prostě nezprovozníte. Počítat však můžete se systémy ext2, ext3, reiserfs a xfs.
Spuštění
Pokud lze počítač, na němž se nyní snažíme zprovoznit kvóty, restartovat, máme odpracováno. Někdy to ale nejde, např.
proto, že se vyžaduje non-stop provoz. Pak musíme za startovací skripty vykonat zbytek práce sami.
Není to nic složitého, v podstatě se jedná o dva příkazy, např. spuštění kvót na svazku /home, který je
nastaven pouze pro využití uživatelských kvót:
quotacheck -ugm /home
quotaon -ug /home
Uveďme si ještě další příklad, a sice spuštění kvót na všech diskových oblastech, které jsou nastavené pro jejich
podporu, spolu s použitím upovídanějšího módu:
quotacheck -avugm
quotaon -avug
První příkaz vytvoří v kořenovém adresáři svazku soubory aquota.user a aquota.group nutné
pro správnou funkci kvót, a pokud se tak z nějakého záhadného důvodu nestane, je potřeba tyto soubory vytvořit ručně
pomocí příkazu touch aquota.{user,group} a nastavit jim práva na 600 příkazem chmod 600
aquota.*. V závislosti na obsazení svazku může příkaz quotacheck trvat i několik minut.
Pozor, u XFS jsou informace o kvótách uloženy přímo ve strukturách souborového systému. Zmíněné soubory tam tedy
nenajdete!
Druhý příkaz slouží pro vlastní aktivaci kvót. Od tohoto okamžiku již vše funguje, ale ještě pravděpodobně nejsou
nastavena žádná omezení. Tento příkaz lze též využít ke zjištění toho, zda je kvóta na daném oddílu aktivovaná. A
ještě poznámka: pokud třeba chcete kvóty dočasně vypnout, stačí zadat příkaz quotaoff.
Utahujeme opasky
Kvóty máme v provozu, ještě je tedy potřeba nastavit omezení pro dané uživatele, aby naše dosavadní činnost měla
nějaký praktický efekt.
Nastavování kvót lze provádět pouze pod uživatelem root a slouží pro to příkazy edquota a
setquota. První z nich spustí standardně editor vi, ve kterém pak nastavíme omezení pro konkrétního
uživatele. Pokud chcete použít jiný editor, stačí změnit proměnnou EDITOR nebo VISUAL.
Druhý příkaz se pak hodí do různých skriptů, protože se ovládá čistě pomocí parametrů.
Nejprve si tedy ukažme nějaké příklady použití příkazu edquota. Pokud tedy chceme nastavit kvóty pro
uživatele franta na všech svazcích, použijeme příkaz edquota franta. Pro konkrétní svazek je ještě třeba
parametr -f svazek.
Pokud nastavujeme stejné kvóty pro všechny uživatele, bylo by jistě velmi zdlouhavé nastavovat je pro všechny zvlášť.
Naštěstí má příkaz edquota paramter -p, pomocí kterého to lze udělat naráz, např. takto:
edquota franta
edquota -p franta `ls -1 /home | grep -v franta`
Nejdříve tedy nastavíme kvóty uživateli franta a toho pak použijeme jako příklad pro všechny ostatní.
Na začátku v teoretické části jsem se zmínil o tzv. grace period, což je doba, po kterou lze překročit soft
limit. Tato hodnota se nastavuje pro celý oddíl pomocí edquota -t -f oddíl, popř. pro všechny oddíly
pomocí edquota -t -a, nelze ji tedy nastavit pro každého uživatele zvlášť. Čas lze nastavit od sekund až
po měsíce, správný údaj je např. 7days (implicitní hodnota).
To, co jsme zatím udělali pomocí edquota, lze ovšem i pomocí setquota, tedy pro názornost:
setquota franta 10000 50000 1000 2000 -a
Uživateli franta tedy nastavíme na všech oddílech s kvótami soft limit a hard limit pro místo na 10000 a 50000; soft
limit a hard limit pro počet souborů na 1000 a 2000.
Nastavení grace period pak uděláme pomocí setquota takto:
setquota -t 86400 86400 -a
Tedy jak pro obsazené místo, tak i pro počet souborů na všech oddílech s kvótami je nastavena grace period na dobu
jednoho dne. Zde se bohužel musí uvádět ve vteřinách.
Pomocníci
Už tedy víme, jak kvóty nakonfigurovat, zprovoznit a nastavit pro naše uživatele. Pro plné využití nám však chybí
ještě pár nástrojů, stručný přehled následuje:
- quota - jediný uživatelský příkaz;
- repquota - globální informátor;
- warnquota - oznamovač překročení;
- rcp.rquotad - kvóty na NFS;
- quotastats - spíše ladicí příkaz;
- convertquota - konverze starého formátu.
A nyní si popíšeme jednotlivé příkazy opět trošku podrobněji. Pro běžné uživatele je základním příkazem
quota. Poskytuje informace o případném překročení kvóty. Pro lepší orientaci se zobrazí též obsazené
místo a počet souborů.
Dalším příkazem je repquota. Např. repquota -as nám pro všechny připojené oddíly vypíše
přehlednou statistiku. V ní se dovíme, jak je nastavená grace period, jak je využité místo a kolik je uložených
souborů. Ve výpisu uvidíme všechny uživatele, ale hlavně se zde ukáže, jestli nějaký uživatel, který má nastavenou
kvótu, tuto kvótu (soft limit) překročil. Samozřejmě se také dozvíme, kolik času (grace period) mu ještě zbývá, než
se dostane k mezní hodnotě (hard limit). Parametr -s pak zajistí výpis v jednotkách snadno čitelných pro
člověka.
Další užitečný program se skrývá pod příkazem warnquota. Ke své činnosti potřebuje správně nastavené
konfigurační soubory (viz manuálovou stránku).Tento příkaz posílá e-mailem upozornění těm uživatelům, kteří již
překročili své kvóty (soft limit). Je dobré jej spouštět v pravidelných časových intervalech, tedy např. pomocí
démonu cron.
Pokud používáte NFS (Network File System), tedy máte připojený nějaký oddíl z jiného počítače přes NFS, využijete na
vzdáleném počítači rpc.rquotad, což je server, který vám umožní nastavovat a vracet kvóty pro lokální
uživatele právě na tom připojeném oddílu.
Pro výpis statistiky o interním provozu kvót slouží příkaz quotastats, ale ten asi správce v běžném
provozu nevyužije, protože slouží spíše k účelům ladění.
A na závěr tohoto vyčerpávajícího seznamu se ještě musím zmínit o příkazu convertquota, který dělá
přesně to, co si asi teď myslíte, a sice převádí starý formát kvót do nového.
Nepoužívejte starý formát kvót! Dnešní distribuce obsahují nástroje, které si s ním nebudou rozumět.
Záludnosti
Jak už jsem uvedl výše, první problém většinou nastává tehdy, pokud quotacheck nevytvoří příslušné
soubory v kořenovém adresáři oddílu. Potom je tedy musíme vytvořit ručně, opět viz výše.
Dalším problémem může být to, že některé příkazy pro práci s kvótami pracují implicitně jen s uživatelskými kvótami,
pokud tedy používáte i skupinové, je nutné použít parametr -g, nejlépe -ug, což znamená
brát v potaz jak uživatelské, tak i skupinové kvóty. To se týká především příkazů quotacheck,
repquota, warnquota a convertquota.
Jiný zádrhel, který je trošku zákeřný, číhá za skupinovými kvótami. Máte-li je nastavené a jeden z uživatelů, který
do dané skupiny patří, tuto kvótu překročí, tak upozornění o tomto překročení obdrží pouze on. Pokud bude někdo další
pokračovat v překračování kvóty, už se to nedozví.
Důležité upozornění nakonec: Nikdy nenastavujte kvóty pro uživatele root na svazcích jako
/, /usr nebo /var. Ja vím, že je to každému jasné, ale člověk nikdy neví.
Závěr
Snad pro vás mé povídání o diskových kvótách nebylo příliš vyčerpávající. Doufám, že jste se naučili, jak je zkrotit
tak, aby vám věrně, dlouho a spolehlivě sloužily. Je to totiž mocná zbraň proti uživatelům, kteří neberou ohled na
ostatní a roztahují se po disku, kam se dá.