Linux E X P R E S

Facebook

Jak ovládnout kvóty

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:

  1. podpora v jádře;
  2. nástroje pro nastavení a správu.

Obrázek: Podpora v jádře

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.

Obrázek: obr2.jpg

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.

Obrázek: obr3.jpg

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.

Obrázek: obr4.jpg

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.

Obrázek: obr5.jpg

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á.

Diskuze (1) Nahoru