Diskové kvóty

Úvod

Tímto článkem pravděpodobně neřeknu zkušenějším správcům Linuxu nic nového. Ale vždy se najde dostatečný počet začínajících, kteří potřebují nějakým způsobem omezit roztahovačné uživatele a nevědí jak na to. Ale nakonec i zkušenější se někdy dají nachytat: "Strčím do serveru 160 GB disk, to ti čuníci hned tak nezapráskají..." Jenže po pár týdnech nevycházejí z údivu, když je disk ze sedmadevadesáti procent plný životně důležitých dat - zálohy nějakého obskurního účetního serveru, který byl zrušen už v prvé polovině devadesátých let minulého století, zálohy záloh, patnáct celovečerních filmů, čtyři PST soubory, každý o velikosti neuvěřitelných dvou GB (jeden originál a tři nepostradatelné zálohy), kopie instalačního CD Windows 95 (a samozřejmě záloha)...

Disky sice dneska nejsou příliš drahé, ale každého rozumného správce musí po uklidnění a odložení studeného obkladu z čela napadnout, že kupovat další disk možná nebude ideální řešení. No a protože služební brokovnice nebývá ve firmách zcela obvyklá, je nutné sáhnout po řešení někde mezi fyzickou likvidací a koupí dalšího disku. Takovým řešením mohou být diskové kvóty.

Jak to pracuje

Diskové kvóty nejsou jen jednoduchým omezením diskového prostoru. Po správné konfiguraci jsou uživatelé omezování ve svém užívání hned několika způsoby (ponechávám anglické názvy, protože ty se používají při konfiguraci):

Hard limit

Pevná mez, přes kterou vlak nejede. Uživateli se nikdy nepodaří na disk uložit více, než je uvedeno v tomto parametru.

Soft limit

"Nezávazná mez" - uživatel může uložit na disk i více, ale při překročení této meze dostane od systému varování.

Inodes, Blocks

Kvóty lze nastavit jak na celkový objem dat na disku, tak na počet souborů.

Grace period

Uživatel může dočasně uložit na disk více, než je uvedeno v parametru "soft limit" na dobu zadanou parametrem "grace period". Po uplynutí této doby se uživateli nepodaří na disk uložit více, i když ještě nepřekročil mez zadanou parametrem "hard limit".

Limity lze pochopitelně nastavovat pro každého uživatele nebo skupinu uživatelů zvlášť. Omezit lze jak celkovou velikost souborů, tak i jejich počet.

Nutné ingredience

Základním předpokladem pro fungování diskových kvót je podpora v kernelu. V howto je doporučováno implementovat diskové kvóty opečováním kernelu. Nicméně osobně bych se tomuto postupu vyhnul. V inteligentní distribuci by měly být diskové kvóty součástí systému a mělo by postačovat pouze nainstalovat potřebné balíčky. Není-li ve vaší distribuci podpora kvót, sáhněte raději po nějaké jiné distribuci. Ta vaše bude orientovaná pravděpodobně více na desktop a na serverové použití bude méně vhodná.

Osobně používám distribuci RedHat (už od verze 3) a můžu zodpovědně prohlásit, že kvóty byly určitě ve verzi 4.2 (nejstarší CD, které se mi válí v šuplíku) - s největší pravděpodobností už dříve. V distribuci RedHat stačí nainstalovat balíček quota a zkonfigurovat systém.

Vlastnímu kernelu bych se vyhnul i z toho důvodu, že existují dvě různé verze kvót. Zatímco RedHat 8 například podporuje novější verzi, standardní kernel stejné verze (údajně) používá verzi starší. Potom samozřejmě můžete čekat nečekané, když si novější utility z distribuce nebudou rozumět s kernelem.

Dostanete-li se ovšem do situace, kdy distribuce kvóty neobsahuje a změna z jakéhokoliv důvodu není možná, najdete potřebné balíky zde:

Jádro
ftp://ftp.kernel.org
Jaderná záplata
ftp://atrey.karlin.mff.cuni.cz/pub/local/jack/quota/
Utility
http://sourceforge.net/projects/linuxquota/
Quota mini-HOWTO
http://www.tldp.org/HOWTO/Quota.html

Postup při záplatování, konfiguraci a překladu jádra byl popsán například zde na Abc Linuxu v článku Kompilovanie jadra.

Základní konfigurace, spuštění

Každý souborový systém, na kterém chcete mít aplikované kvóty, musí být přimontovaný s volbou usrquota. I když je v manuálové stránce příkazu mount uvedeno, že se tato volba ignoruje, rozhodně není ignorována různými utilitami - musí být proto uvedena. Volbu uvedeme do tabulky /etc/fstab

LABEL=//ext3defaults11
LABEL=/uzivatele/uzivateleext3usrquota,grpquota12

V horním řádku (systém souborů /) nejsou kvóty použité. Podobně vypadal před úpravou i druhý řádek. Na serveru poskytujícím diskový prostor by rozhodně měly být uživatelské diskové oblasti oddělené od systémových (root, var, usr a podobně).

Diskové kvóty nelze použít na všech typech souborových systémů - určitě se vám nepodaří aplikovat kvóty třeba na FAT nebo NFTS. Bez problémů je to ale u obvyklého systému ext2 a ext3.

V nejvyšším adresáři souborového systému vytvořte soubory pro práci kvót. I když podle manuálové stránky by měl příkaz quotacheck vytvořit soubory sám, nevěřte tomu:

touch aquota.user
touch aquota.group
chmod 600 aquota.*

U distribuce RedHat tímto veškerá instalace téměř končí. Všechno ostatní by měly obstarat startovací skripty (konkrétně /etc/rc.d/rc.sysinit). Nejjednodušším pokračováním je restart.

Nemůžete-li systém restartovat, proveďte instalaci ručně:

quotacheck -avug
quotaon -avug

Program quotacheck může protestovat, že systém souborů není přimontovaný pouze pro čtení a doporučí vám volbu -m.

U distribucí, které nemají kvóty shůry dáno, musíte zajistit startování výše uvedených dvou příkazů při startu systému.

Nastavení pro jednotlivé uživatele

Příkazem edquota můžeme měnit kvóty jednotlivých uživatelů. Příkaz vyžaduje nejméně jeden parametr - uživatelské jméno. Máte-li v systému více diskových oblastí s kvótami, bude nutné použít ještě parametr -F:

edquota -F /home marena

V editoru se vám otevře tabulka, ve které můžete nastavit pro uživatele kvóty:

Disk quotas for user marena (uid 1030):
 Filesystem   blocks  soft  hard    inodes  soft  hard
 /dev/md0         24  1000  1500         3     0     0

Hodnoty upravíme, ukončíme editor - a od té chvíle by měl mít uživatel nastavené kvóty.

Grace period - doba, po kterou může mít uživatel překročený soft limit - se nastavuje pro celý disk společně, nelze ji nastavit pro každého uživatele zvlášť. Nastavuje se příkazem edquota -t -F /home. Čas lze nastavit od sekund po měsíce - pro označení použijte anglické názvy (seconds, minutes, hours, days, weeks, months). Mezi číslicí a názvem se nesmí objevit mezera.

Příkaz edquota volá normálně editor vi. Nevyhovuje-li vám tento editor, můžete ovlivnit chování příkazu edquota pomocí proměnné prostředí EDITOR:

export EDITOR=ed

Místo editoru ed napište cestu na vlastní oblíbený editor. Ed jsem uvedl jen jako žert (dostanete se z něj písmenem q).

Nastavení editoru můžete využít při hromadném zavádění kvót pro větší množství uživatelů. Nastavte vzorové kvóty uživateli standa a pro celou vaši školku pak můžete nastavit kvóty podle tohoto vzoru jednoduchým skriptem:

set EDITOR=true
for i in majdalenka apolenka veronika verka zdenka majka lenka monika
   do
   edquota -p standa $i
   done
unset EDITOR

Spolupráce s Windows

Kvóty se hlídají i při přístupu k disku z Windows protokolem smb. Při takovém použití kvót se můžete dostat do situace, že ačkoli je na disku nastavená kvóta 10 MB, podaří se vám uložit na disk třeba dva osmi megové soubory (dohromady tedy 16 MB). Příkaz ls -l říká 16, příkaz du -s říká 10, repquota říká 10. Soubory prostě mají menší velikost, než je udávaná.

Manuál (samba verze 2) pro tuto situaci doporučuje použití parametru samby strict allocate = yes. Nevýhodou je údajné zpomalení na některých systémech.

Při experimentech jsem si nevšiml, že by se Windows nějakým způsobem dozvěděly o překročení soft limitu. Aby se dal efektivně využít mechanismus "grace period", je potřeba dát uživatelům dát vědět jiným způsobem. K tomu se dá využít program repquota. Tím zjistíme využití kvót jednotlivými uživateli a při překročení pošleme uživateli poštu:

repquota /home |
 awk '($2~"-" || $2~"+") && $4!=0 && $3>$4 {print $1, $3, $4, $5;}' |
while read user block soft hard;
  do
  export user, block, soft, hard
  (echo "Mate na disku vice dat nez je povoleno:"
   echo "Na disku: $block"
   echo "Povoleno: $soft" ) |
  mail -s "Prekrocene kvoty" $user
   done

Dávka by měla být pravidelně spouštěná z cronu. Uvedený příklad je samozřejmě velmi jednoduchý, uživatelé by jistě uvítali například seznam jimi vlastněných souborů. Zvláště ve sdílených adresářích mívají uživatelé strašný binec a často vůbec netuší, které soubory jsou jejich.

Závěr

Diskové kvóty jsou mocným nástrojem na umravnění nepořádných uživatelů. Notoričtí zálohovači internetu vás za to nebudou mít rádi, takže tvrdá pravidla můžete uplatňovat jen tak dlouho, dokud se jednou ve firmě bez vašeho vědomí neobjeví služební brokovnice...