LINUXSOFT.cz
Username: Password:     
    CZ UK PL

> Provozujeme linuxový server (6) - rozdělení disku, kvóty

Rozdělení disku na víc oddílů je na serveru téměř nezbytné – například usnadňuje práci a zlepšuje spolehlivost běžících služeb. Na závěr dnešního článku se podíváme také na praktické nastavení kvót.

17.5.2005 06:00 | Ondřej Čečák | read 30157×

DISCUSSION   

You can tune a filesystem, but you can't tune a fish.
  -- man tunefs(8), sekce BUGS

Úvodem – vhodné rozdělení disku může být velmi prospěšné, ale přesto existují situace, kdy je skoro zbytečné. U jednoduchých embedded zařízení, routeru nebo firewallu to může být spíše komplikující.

Proč a jak dělit

Způsobů, jak rozdělit disk, je mnoho. Jako nejrelevantnější způsob dělení se zdá rozdělit diskový prostor na

  • (read-only) systémové složky (vlastní programy a jejich konfigurační soubory, které může měnit pouze správce při (de)instalaci nebo změnách v konfiguraci)
  • uživatelská data (/home, /srv – sdílená data, data pro webserver, ftp server a podobně)
  • prostor, kam zapisují nejrůznější démoni svá runtime data (typicky adresář /var – logy, tisková a emailová fronta, zámky a různé cache, ...)

Toto rozdělení se vyplatí z mnoha důvodů. Jedním z nich je snadná administrace – například můžete jednoduše přeinstalovat systém, aniž byste se nějak dotkli uživatelských dat v /home. Dále si můžete zjednodušit proces zálohování – oddělené svazky pak lze snadno zálohovat různými způsoby. V neposlední řadě tak také zvýšíte bezpečnost a stabilitu; na zápis do oddílu / (root) nebude mít nikdo kromě superuživatele právo a současně to bude jediný svazek, který bude namountovaný bez voleb nosuid a nodev. Stabilitě systému pomůže vhodné oddělení lepší kontrolou a jistou ochranou před zaplněním svazku (uživatelé tak nebudou moci omylem způsobit pád mnoha démonů, kteří potřebují určitý volný prostor pro zápis runtime dat). Rozdělení prostoru je také vhodnější pro vytváření kvót.

V čem může být problém

Problém může nastat v případě, kdy špatně odhadnete velikost; pak bude někde volné místo chybět a jinde přebývat. I tato situace se dá řešit – předejít tomu můžete např. umístěním svazků na LVM. Pro začátek nastavíte oddílům malou velikost (a necháte si tak dostatečnou část disku nevyužitou) a pak postupně zvětšujete prostor dle potřeby. Tento postup je lepší než zmenšování; i když ho filesystém podporuje, tak je přece jenom více riskantní. Mimochodem, např. XFS a EXT3 mohou být zvětšovány přímo za chodu.

Jak tedy konkrétně dělit

Začněme od rootu (/). Na něm by nemělo být nic, co se za normálního chodu mění, uživatelé by tam neměli mít možnost zápisu. Všechny svazky kromě / by se měly mountovat s volbami nosuid (znefunkční spouštění programů pod jiným uživatelem nebo skupinou než je uživatel, který program spouští) a nodev (na filesystému nebudou interpretována bloková nebo znaková zařízení). Pokud si nebudete jistí, jestli nejsou suid programy na jiných svazcích než na /, můžete použít příkaz find /home -type f -perm -4000, který prohledá adresář /home a vypíše všechny programy s příznakem SUID.

Určité místo by mělo být vyhrazeno pro swap. Ten se dá v Linuxu snadno přidávat a ubírat za chodu a může být případně pouze v souboru na nějakém existujícím filesystému. Swap může být umístěn na LVM; umisťovat byste ho ale neměli na softwarový RAID (kvůli možnosti deadlocku, který může nastat v případě, kdy bude systému docházet volná paměť).

Svazek /tmp by měl být už z principu oddělen, právo k zápisu do tohoto adresáře má obvykle každý a přesto je poměrně důležitý (pro běh různých služeb apod.) – je rozumné, aby na něm byly nastaveny kvóty nebo alespoň rezervované místo pro roota.

Adresáře s daty (/home, /srv) a podobně je vhodné umístit na jeden oddíl. Pro vlastní realizaci adresářů můžete použít symlinků a nebo mount s parametrem --bind, který dokáže určitý adresář připojit na jiném místě. Jak už bylo zmíněno výše, tento postup se vyplatí kvůli snadnějšímu zálohování nebo zásahům do systému.

Zvláštní oddíl by měl mít také adresář /var, který je trochu problémový – je životně důležitý pro mnoho démonů a uchovávají se v něm systémové logy. Ve /var je několik adresářů, kam má právo zápisu kdokoli (např. /var/lock) a proto by zde měli mít ti, kteří ve /var nemají moc co dělat, nastavenou nějakou kvótu. Přes všechna opatření ale musíte počítat s tím, že pokud bude uživatel chtít, může tento svazek snadno zaplnil (např. hromadou nedoručitelných emailů, které se budou hromadit ve frontě MTA nebo přinucením logování nějakého démona).

Pro lokální zálohování je dobré vytvořit oddíl /backup (ať už dostupný uživatelům pouze pro čtení, nebo neveřejný). Jeho oddělení má smysl už proto, že jeho obsah nebudete zálohovat. V případě, že se rozhodnete zálohy zveřejnit, pořádně si tento krok promyslete, aby jste předešli situaci, kdy se mohou nepovolaní snadno dostat k cizím datům (proto je lepší archivy se zazálohovanými daty raději schovat, popř. ještě zašifrovat).

Užitečné bývá také vytvoření adresáře, který je dostatečně velký a dostupný všem (podobně jako /tmp), ovšem bez rizik plynoucích z jeho možného přeplnění.

Diskové kvóty

Úvodem – v Linuxu (a ostatně ve všech běžných unix-like systémech) je možné definovat kvóty dvěma způsoby a to sice per user/group a nebo per filesystem. V prvním případě můžete nastavovat pravidla pro uživatele nebo skupiny v rámci systému, v druhém pro celé souborové systémy.

Uživatelé můžou omylem a nebo svým nevhodných chováním snadno zaplnit přidělený prostor, což může komplikovat práci dalším uživatelům a tak dále. Pomocí kvót můžete definovat uživateli nebo skupině maximální možný limit diskového prostoru, který svými daty může zabrat. Pro možnost práce s kvótami potřebujete podporu filesystému a userspace nástroje (typicky balíček quota).

Nastavení kvót (ext2, ext3, ReiserFS)

Před vlastním zavedením kvót bude ještě potřeba udělat pár úprav. Tou první je dopsání volby usrquota do /etc/fstab. Část fstabu by pak mohla vypadat například takto:


    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>  <type>  <options>             <dump>  <pass>

    # static
    /dev/hda2       /               ext3    defaults    	 0       0
    /dev/hda3       none            swap    sw			 0       0
    /dev/hda4       /home           ext3    defaults,usrquota    0       0
  

Poznámka: pokud chcete používat kvóty per group, doplňte či nahraďte usrquota o grpquota.

Pokud na to nemáte distribuční skripty, bude nutné uvést kvótování do provozu ručně pomocí příkazu quotacheck -avug; nejspíš budete upozorněni, že žádný svazek není namountován s volbou usrquota. Pokud jste do /etc/fstab tuto volbu připsali, nezbývá než s touto volbou filesystém připojit, v našem příkladu pomocí příkazu mount /home -o remount. Výše uvedený příkaz můžete zkusit znovu, odpoví vám, že filesystém není připojen pouze pro čtení – buďto ho přemountujte a nebo použijte parametr -m (během testování by se na testovaný svazek nemělo zapisovat). Po dokončení můžete kvótování aktivovat příkazem quotaon -avug.

Tak, nyní zbývá už jenom omezení nastavit. S tím souvisí několik pojmů:

Hard limit je maximální možné obsazení diskového prostoru; nad tuto hranici si uživatel už nic neuloží. Soft limit je hranice nižší než u hard limitu, lze ji překročit, nicméně uživatel bude varován a poběží mu grace period, časový limit, po kterém už nebude moci ukládat přes soft limit. Kvótu lze nastavit na počet bloků (block) nebo inodů (inodes).

Známe-li už potřebné pojmy, můžeme se pustit do vlastní konfigurace:

linuxovy_server# edquota -F vfsv0 -f /home -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/hda4                                             7days	                7days

linuxovy_server# edquota -F vfsv0 -f /home -u uzivatel
      
Disk quotas for user uzivatel (uid 501):
   Filesystem                            blocks   soft    hard     inodes   soft     hard
   /dev/hda4                             251664      0	     0      11308      0        0

Pojďme si to postupně vysvětlit (modře obarvený text označuje zadané příkazy). Nejprve jsme pomocí programu edquota spustili editor nastavení, kterým díky parametru -t na konci nastavíme grace period. Důležité je, že tento "časový limit" je možné nastavit pouze pro určitý oddíl a ne pro jednotlivé uživatele/skupiny. Po zadání příkazu se standardně spustí program vi, v případě, že byste chtěli použít něco jiného, nastavte proměnnou EDITOR (v BASHi např. export EDITOR=pico). V textovém editoru pak pouze nastavte místo nul soft/hard limit pro bloky nebo inody (aktuální zabraný počet už máte pro představu vyplněný).

Druhý zadaný příkaz už nastavuje kvótu uživateli uzivatel. Ještě dodám, že parametr -F slouží pro určení verze kvóty 2 (s jiným typem formátu by to nefungovalo), -f určuje svazek.

Pokud budete chtít nastavit stejné limity i dalším uživatelům, můžete snadno použít parametr -p, který nastavení zkopíruje, např.: edquota -p uzivatel uzivatel2 uzivatel3 uzivatel4 uzivatel5.

Po našem úspěšném nastavení kvót se uživatel může podívat, jak na tom s místem na disku je:

uzivatel@linuxovy_server:~$ quota -v

Disk quotas for user uzivatel (uid 501):
  Filesystem                  blocks   quota   limit   grace   files   quota   limit    
  /dev/hda4                   251664* 250000  500000   7days   11308       0       0

Jak je asi zřejmé, uživatel uzivatel překročil soft limit v blocích a má 7 dní na to, aby to napravil.

Nastavení kvót v XFS

XFS má oproti představeným souborovým systémům výhodu – při jeho návrhu se s kvótami už počítalo, takže jsou informace o nich přímou součástí metadat a nejsou potřeba speciální soubory (a)quota.user a případně (a)qouta.group jako v předchozím případě. Také je pěkné, že obslužné programy jako například xfsdump a xfsrestore kvóty dokáží také zálohovat.

Před tím, než si začnete s kvótami na XFS hrát, musíte zapnout jejich podporu. O to by se měly starat skripty při spouštění systému, spustit by měly příkaz quotaon -a.

Stejně jako v předchozím případě je nutné do /etc/fstab připsat k volbám mountovaného souborového systému usrquota popřípadě grpquota.

Pomocí příkazu edquota opět můžete snadno definovat omezení:

linuxovy_server# edquota -f /srv -u uzivatel

Disk quotas for user uzivatel (uid 501):
  Filesystem                               blocks   soft     hard    inodes  soft    hard
  /dev/scsi/host0/bus0/target1/lun0/part1       0  70000    80000         0  1500    2000

Stav kvót můžete otestovat jako superuživatel nebo i jako uživatel:

linuxovy_server# repquota /srv

*** Report for user quotas on device /dev/scsi/host0/bus0/target1/lun0/part1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used	soft  hard  grace
----------------------------------------------------------------------
root      --   25492       0       0              4	0     0
uzivatel  --   24000   60000   80000              1	1500  2000	

Poznámka: v případě, že chcete nastavit kvóty na kořenovém svazku, musíte postupovat trošku odlišně – nejprve je nutné zapnout kvótování pomocí quotaon a vlastní nastavení budete moci provést až po rebootu.

Mimochodem, vyplatí se spouštět periodicky nějaký skript, který otestuje stav kvót a v případě překročení pošle administrátorovi třeba email. Použít k tomu můžete třeba program warnquota.

Závěr

Vhodné rozdělení svazku a případně nastavené kvóty jsou rozhodně přínosem, a to jak pro vás, tak i pro uživatele.

Používáte také dělení disků na svých serverech? Dělíte je trochu jinak, máte na dělení jiný názor? Podělte se o své zkušenosti v diskuzi pod článkem.

 

DISCUSSION

For this item is no comments.

Add comment is possible for logged registered users.
> Search Software
> Search Google
1. Pacman linux
Download: 4878x
2. FreeBSD
Download: 9066x
3. PCLinuxOS-2010
Download: 8564x
4. alcolix
Download: 10947x
5. Onebase Linux
Download: 9661x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6243x

1. xinetd
Download: 2413x
2. RDGS
Download: 937x
3. spkg
Download: 4760x
4. LinPacker
Download: 9966x
5. VFU File Manager
Download: 3198x
6. LeftHand Mała Księgowość
Download: 7203x
7. MISU pyFotoResize
Download: 2808x
8. Lefthand CRM
Download: 3563x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3120x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz