Portál AbcLinuxu, 6. května 2025 17:54

Diskové kvóty

8. 6. 2004 | Petr Bravenec
Články - Diskové kvóty  

Co jsou diskové kvóty a jak jich využít k ukáznění nepořádných uživatelů. Popis instalace a nastavení. Spolupráce s Windows.

Ú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 opatchová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 Red Hat (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 Red Hat 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 Red Hat 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 souboru /etc/fstab.

LABEL=/           /           ext3   defaults           1  1
LABEL=/uzivatele  /uzivatele  ext3   usrquota,grpquota  1  2

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 Red Hat 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 osmimegové 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...

Související články

Seriál: Moderní souborové systémy
Seriál: Súborové systémy
Seriál: Zálohování v Linuxu
Šifrované filesystémy

Další články z této rubriky

Úvod do Dockeru (1)
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Unixové nástroje – 26 (triky pro práci v Bashi)
Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)
Linux: systémové volání splice()

Diskuse k tomuto článku

Ruža Becelin avatar 8.6.2004 08:32 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše quota soubory
Odpovědět | Sbalit | Link | Blokovat | Admin
Jen pro doplnění: někdy je nutné místo aquota.user a aquota.group vytvořit quota.user a quota.group - viz Quota mini-howto...
8.6.2004 12:28 roman
Rozbalit Rozbalit vše Re: quota soubory
Rekl bych, ze prave quota a aquota jsou ty NOVE a STARE verze quoty.

Mel bych i dotaz: jak je to s podporou kvot na ReiserFS - pouzivam jadro z krenel.org (bez jakychkoliv patchu) a kvoty mi funguji na ext2 i ext3, na ReiserFS nikoliv. Je potrreba aplikovat nejaky patch ?
8.6.2004 12:57 i
Rozbalit Rozbalit vše Re: quota soubory
ftp://ftp.suse.com/pub/people/mason/patches/
8.6.2004 17:01 Tom K | skóre: 22
Rozbalit Rozbalit vše quoty a FS
Odpovědět | Sbalit | Link | Blokovat | Admin
bylo by vhodne dodat, ze ne vsechny filesystemy potrebuji vytvaret nejake soubory pro potrebu quoty. Napriklad v XFS a JFS myslim taky se pocitalo s quotama primo v navrhu, takze tam vyse zminovane soubory nenajdete (Teda pokud je udelate rucne :-).
echo -n "u48" | sha1sum | head -c3; echo
8.6.2004 21:14 jiri.b | skóre: 30 | blog: jirib
Rozbalit Rozbalit vše Re: quoty a FS
Tak to jsem nepochopil co jsi chtel presne rict :(
9.6.2004 07:45 Tom K | skóre: 22
Rozbalit Rozbalit vše Re: quoty a FS
chtel jsem rict, ze treba na xfs nenajdes soubory quota, aquota a podobne, protoze informace o quotach je ulozena primo ve strukturach FS. Ja to jasnejsi ?
echo -n "u48" | sha1sum | head -c3; echo
9.6.2004 08:12 mm
Rozbalit Rozbalit vše warnquota
Odpovědět | Sbalit | Link | Blokovat | Admin
upozornovanie uzivatelov vykonava standartne skript z balicku warnquota
17.6.2004 10:37 Vit Kasprzak
Rozbalit Rozbalit vše Hromadne nastaveni kvot
Odpovědět | Sbalit | Link | Blokovat | Admin
Stejne kvoty pro vice uzivatelu je mozno nastavit zadanim parametru -p prikazu edquota (viz man edquota). Takze napriklad:

edquota -p franta pepa lojza

pouzije aktualni nastaveni kvot uzivatele franta jako mustr pro uzivatele pepa a lojza.
2.8.2005 12:57 Vlastimil Šetka
Rozbalit Rozbalit vše Problém
Odpovědět | Sbalit | Link | Blokovat | Admin
Když chci zapnout kvóty pomocí příkazu quotaon, vypíše se:

quotaon: using /home/aquota.user on /dev/hda3 [/home]: Function not implemented

Při překročení kvót uživatelem se pak nic neděje, nicméně při kontrole příkazem quota userneme, se překročení ukáže.

Čím to může být?
2.8.2005 14:11 Petr Bravenec
Rozbalit Rozbalit vše Re: Problém
Je přeložená podpora v kernelu? Je použitý filesystém, který podporuje kvóty?
3.8.2005 09:55 Vlastimil Šetka
Rozbalit Rozbalit vše Re: Problém
Filesystem je ext2, v tom tedy problém není. Používám Debian 3.0 woody, jádro idepci, kvóty jsem nainstaloval jako balíček quota a podle všeho je i podpora v jádře.
3.8.2005 11:31 Vlastimil Šetka
Rozbalit Rozbalit vše Re: Problém
Odpovím si sám, opravdu to bylo jádrem, v dokumentaci se sice uvádí podpora kvót v předkompilovaném jádře, ale to platí pro jádro vanilla, v jádře idepci kvóty skutečně podporovány nejsou. Jinak díky za vaši ochotu pomoci začátečníkovi.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.