Manažment partícií    -     Partition magic

3.1 Úvod

Pri inštalácii servera ste si mohli vytvoriť toľko partícií, koľko ste chceli. Nasledujúce odporúčania sa vám hodia, ak server ešte len idete (re)inštalovať. V prípade, že sa hodláte potrápiť s už rozdeleným diskom, nemusím (alebo musím??) hádam nikomu vysvetľovať, že to je veľmi nepríjemné a náročné a pred každou činnosťou súvisiacou s diskom by ste mali zálohovať všetky údaje!

3.2 Partície

Partícia (partition, oddiel, slice) je oblasť pevného disku, na ktorej bude neskôr vytvorený súborový systém (filesystem). Niekedy sa tieto dva pojmy spájajú a za partíciu sa označuje aj samotný súborový systém. Ak používate Windows, určite ste sa už stretli s partíciami vo forme logických diskov. Je dôležité vedieť, že na každej partícii môže byť ľubovoľný súborový systém. Preto je možné mať na jednom fyzickom disku niekoľko operačných systémov. Linux dokáže pracovať so súbormi uloženými na rôznych súborových systémoch, čo určite výhodne použijete napríklad pre sprístupnenie súborov na partícii s Windows.

Je dôležité vedieť, že partícii ako takej je úplne jedno, aký súborový systém na nej neskôr vytvoríte. Každá partícia obsahuje iba označenie typu partície, aby ju "spoznal" operačný systém. Kým začnete vytvárať partície, je vhodné si ich veľkosť a počet vopred premyslieť podľa toho, aký účel budú mať súborové systémy, ktoré na nich neskôr vytvoríte.

3.2.1 Partičná tabuľka (partition table)

Na začiatku každého pevného disku (v 0. sektore) sa uchováva tzv. partičná tabuľka, ktorá obsahuje údaje o partíciách (príznak bootovania, typ, začiatok a koniec partície). Z historických dôvodov možno mať na jednom disku najviac 4 tzv. "primárne partície" (primary partition, v prípade DOS a Windows 9x je použiteľná iba jedna). V prípade, že to nestačí (a obyčajne to nestačí), môžete jednu z primárnych partícií definovať ako "rozšírenú" partíciu (extended partition). Rozšírená partícia potom môže obsahovať ďalšie partície, teoreticky ľubovoľné množstvo. Podľa "HOWTO Partition" je to 63 partícií pre IDE disk resp. 15 pre SCSI disk.

3.2.2 Označovanie partícií

Linux ma iné označovanie partícií ako Windows - neexistujú disky C:, D: a tak ďalej. Namiesto toho sa používa systém označovania, ktorý - ak sa ho raz naučíte - vám povie veľmi presne, kde sa daná partícia nachádza.

Jednotlivé partície sú (ako veľa vecí v Linuxe) špeciálne (blokové) zariadenia/súbory v adresári "/dev". Začínajú sa písmenami "hd" (IDE disky) alebo "sd" (SCSI disky). Ďalšie písmeno určuje, o ktorý fyzický disk ide. "/dev/hda" je prvý fyzický IDE disk. "/dev/hdb" je druhý fyzický IDE disk. "/dev/sda" je prvý fyzický SCSI disk, "/dev/sdb" druhý fyzický SCSI disk a tak ďalej. Toto označenie sa používa aj pre samotnú partičnú tabuľku.

Posledný údaj v označení partície je jej poradové číslo. "/dev/hda1" označuje prvú partíciu na prvom fyzickom IDE disku. "/dev/hda2" je druhá partícia na prvom fyzickom IDE disku. "/dev/sdb1" je prvá partícia na druhom fyzickom SCSI disku.

Primárne partície sú vždy prvé 4 partície na disku, teda napr. v prípade prvého fyzického IDE disku: "/dev/hda1", "/dev/hda2", "/dev/hda3" a "/dev/hda4". Čo sa stane, ak použijeme viac partícií? Nič zvláštne, pokračujeme v číslovaní od "5" - niektorá z primárnych partícií musí byť označená ako rozšírená a ďalšia partícia bude mať označenie "/dev/hda5".

Poznámka: ak používate diskové polia (napr. servery HP), označenia diskov budú takmer na 100% odlišné.

Radšej si ukážeme príklad (môj domáci počítač s jedným IDE diskom a dvomi operačnými systémami - Windows a Linux). Zatiaľ sa zamerajte na prvý a posledný stĺpec, už o chvíľu sa dozviete viac:

fdisk -l /dev/hda

/dev/hda1   *         1       281   2257101    b  Win95 FAT32
/dev/hda2           282       524   1951897+   5  Extended
/dev/hda5           282       412   1052226    b  Win95 FAT32
/dev/hda6           413       414     16033+  83  Linux
/dev/hda7           415       421     56196   82  Linux swap
/dev/hda8           422       524    827316   83  Linux

Partície:

  • /dev/hda1: primárna partícia. Ekvivalent vo Windows: C:
  • /dev/hda2: primárna partícia označená ako rozšírená (Extended). Neobsahuje nijaké dáta.
  • /dev/hda5: partícia v rámci rozšírenej partície. Ekvivalent vo Windows: D:
  • /dev/hda6: partícia v rámci rozšírenej partície. (pozn: tento disk Windows nevidia)
  • /dev/hda7: partícia v rámci rozšírenej partície. (pozn: tento disk Windows nevidia)
  • /dev/hda8: partícia v rámci rozšírenej partície. (pozn: tento disk Windows nevidia)

Ako vidíte, zariadenia "/dev/hda3" a "/dev/hda4" sa nenachádzajú vo výpise, čo (celkom logicky) znamená, že tieto primárne partície nie sú využité.

3.2.3 Prečo používať viaceré partície v rámci jedného operačného systému

Ako sme si povedali, na jednotlivých partíciách môžu byť vytvorené rôzne súborové systémy a tak na jednom disku môžu spolu "žiť" rôzne operačné systémy. Partície však môžete využiť aj v prípade jedného operačného systému:

  • odkladací súbor: jedna alebo viacero partícií môžu byť vyhradené na odkladací súbor (virtuálna pamäť)
  • bootovanie s problémovým BIOSom: na niektorých počítačoch nie je možné nabootovať operačný systém, ak sa nachádza mimo prvých 1024 cylindrov disku. Preto sa zvykne vytvoriť osobitná, pármegabajtová partícia s kernelom, z ktorej systém nabootuje. Takáto partícia zvykne byť pripojená ako adresár "/boot".
  • bezpečnosť uloženia údajov: v prípade softvérového poškodenia súborového systému partície sa poškodenie pravdepodobne obmedzí iba na túto partíciu
  • bezpečnosť servera: pre jednotlivé súborové systémy na partíciách môžete nastaviť odlišné parametre (ignorovanie príznaku "setuid", ignorovanie špeciálnych zariadení, zákaz spúšťania programov, len na čítanie, kvóty atď), ktoré zásadným spôsobom obmedzia zneužitie obsahu partície deštruktívne naladenými používateľmi a/alebo útočníkmi
  • ochrana proti zastaveniu služieb zaplnením disku: oddelením súborových systémov, na ktorých sa nachádzajú používateľské adresáre, maily a adresáre s dočasnými súbormi (do ktorých má prístup každý používateľ) zabránite zaplneniu disku s neočakaváteľnými následkami. Ak by ste mali všetky súbory na jedinej partícii, v prípade plného disku by prestalo fungovať logovanie, príjem mailov atď.

3.2.4 Aký typ partície použiť

Pri vytváraní partícií pod Linuxom sa môžete najčastejšie stretnúť s týmito partíciami:

  • Linux swap (typ 82): partícia určená na odkladací súbor. Podľa niektorých odporúčaní by mala byť jej veľkosť dvojnásobkom fyzickej pamäte. Ja osobne odporúčam veľkosť swapu ako niečo medzi veľkosťou fyzickej pamäte a jej dvojnásobkom. Tak či tak, ak bude Váš server často swapovať, práca bude neskutočne pomalá.
  • Linux native; Linux (typ 83): bežná partícia určená pre Linux
  • Extended (typ 5): rozšírená partícia
  • Win95 FAT32 (typ b): partícia s podporou dlhých názvov súborov pre Windows

3.2.5 Práca s partičnou tabuľkou

Pozor! Pri práci s partičnou tabuľkou buďte maximálne opatrní, pretože pri manipulácii s partíciami (odstránenie, zmena veľkosti, posun začiatku partície) sa vymaže ich obsah (dáta)!

Na prácu s partičnou tabuľkou slúži program fdisk. Program je interaktívny a potrebuje ako parameter označenie disku, na ktorom sa nachádza partičná tabuľka. Vo väčšine prípadov ide o prvý disk (v tomto príklade IDE).

Partičnú tabuľku si môžete vypísať pomocou príkazu

fdisk -l /dev/hda

(kde /dev/hda určuje umiestnenie partičnej tabuľky - v tomto prípade prvý IDE disk). Na mojom domácom počítači sa zobrazí:

Disk /dev/hda: 255 heads, 63 sectors, 524 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1       281   2257101    b  Win95 FAT32
/dev/hda2           282       524   1951897+   5  Extended
/dev/hda5           282       412   1052226    b  Win95 FAT32
/dev/hda6           413       414     16033+  83  Linux
/dev/hda7           415       421     56196   82  Linux swap
/dev/hda8           422       524    827316   83  Linux

Zobrazené stĺpce znamenajú (príklady vychádzajú z tučne zobrazeného riadku):

  1. zariadenie/partícia (/dev/hda8)
  2. príznak bootovania - iba pre jednu partíciu
  3. začiatok partície (422. cylinder)
  4. koniec partície (524. cylinder)
  5. veľkosť partície (827316 blokov)
  6. typ partície (83, t.j. Linux)

Ak chcete partičnú tabuľku zmeniť, musíte program spustiť bez parametra "-l" a s rootovskými právami.

fdisk /dev/hda

Po stlačení "m" sa zobrazí menu s ovládacími klávesami:

  • a toggle a bootable flag: nastaví bootovaciu partíciu.
  • b edit bsd disklabel:
  • c toggle the dos compatibility flag:
  • d delete a partition: vymaže partíciu. Aj s pôvodným obsahom.
  • l list known partition types: zobrazí typy partícií
  • m print this menu: zobrazí toto menu
  • n add a new partition: umožní pridať partíciu. Budete zadávať číslo partície (podla číslovania spomenutého vyššie), typ, začiatočný sektor a veľkosť partície
  • o create a new empty DOS partition table:
  • p print the partition table: zobrazí partičnú tabuľku (to isté ako výpis príkazu "fdisk -l /dev/hda"
  • q quit without saving changes: ukončenie programu bez uloženia zmien!
  • s create a new empty Sun disklabel:
  • t change a partition's system id: zmení typ vybranej partície
  • u change display/entry units: prepína zobrazovanie údajov o začiatku a konci partície medzi sektormi a cylindrami
  • v verify the partition table: skontroluje partičnú tabuľku, overí, či sa partície neprekrývajú a nealokované miesto na disku
  • w write table to disk and exit: zapíše zmeny v programe do partičnej tabuľky!!!
  • x extra functionality (experts only):

3.3 Súborové systémy

Súborový systém je spôsob uloženia údajov na partícii, pričom údaje sa uchovávajú v súboroch, ktoré sú organizované do adresárov. Údaje o súboroch sa uchovávajú rôznym spôsobom, napr. súborový systém "ext2" (a mnohé iné) rozlišujú i-uzly (inodes) a bloky (blocks). Bloky obsahujú samotné údaje, i-uzly uchovávajú všetky informácie o súbore s výnimkou jeho mena a zoznam dátových blokov súboru. Adresáre sú v skutočnosti tiež iba súbory, ktoré obsahujú mená súborov a odkazy na zodpovedajúce i-uzly.

Na každom súborovom systéme existuje minimálne jeden adresár, ktorý sa nazýva hlavný alebo koreňový (root) adresár. Na Unixových systémoch sa označuje ako "/".

Z hľadiska administrátora majú súborové systémy niekoľko kľúčových vlastností:

  • typ súborového systému: určuje, ako sú organizované údaje a aké vlastnosti má súborový systém
  • partícia (zariadenie), na ktorom sa súborový systém nachádza:
  • pripájací bod (mount point): určujú bod (adresár) v hierarchii adresárov, na ktorý sa pripojí celý súborový systém a pod ktorým bude prístupný
  • atribúty (parametre) pripojenia: určujú vlastnosti súborového systému, napr. či je pripojený iba na čítanie a pod.

3.3.1 Pripájací bod súborového systému

Na počítači môže existovať niekoľko súborových systémov, dohromady však musia byť prepojené s hlavným súborovým systémom. Jednotlivé súborové systémy sa pripájajú na vopred vytvorené (a prázdne - inak by "prekryli" pôvodné údaje) adresáre v rámci hlavného súborového systému. Tieto adresáre sa nazývajú pripájacie body. Po pripojení súborového systému (príkazom "mount") sa jeho obsah objaví ako obsah adresára, ktorý je pre daný súborový systém pripájacím bodom.

Informácie o momentálne pripojených súborových systémoch získate zadaním príkazu "mount" (bez parametrov). Informácie o súborových systémoch, ktoré sa automaticky pripoja pri štarte servera sa nachádzajú v súbore "/etc/fstab".

3.3.2 Typ súborového systému

Pri vytváraní súborových systémov na jednotlivých partíciách (v prípade niektorých distribúcií prebieha proces rozdeľovania disku a vytvorenia súborových systémov v jednom "kroku") si treba vybrať správny súborový systém. Našťastie, ak používate Linux, nie je ich veľa, takže to nie je také ťažké:

  • ext2: štandardný súborový systém používaný na Linuxe
    • výhody: podporuje ho každá (aj stará) distribúcia Linuxu
    • nevýhody: v prípade poškodenia súborového systému (výpadok prúdu a pod.) nie je vždy možné stopercentne opraviť chyby.
  • ext3: "ext2" s podporou žurnálovania
    • výhody: súborový systém si vytvára transakcie a potvrdzuje ich po úspešnom dokončení (podobne ako databázy). Na základe transakcií a záznamov o nich možno opraviť chyby vzniknuté výpadkom prúdu a pod. a vrátiť súborový systém do bezchybného stavu. Kontrola disku je navyše oveľa rýchlejšia ako v prípade "ext2". Ďalšou výhodou tohto systému je možnosť konverzie súborového systému "ext2" na "ext3" aj s údajmi:
      1. zakompilujte do jadra podporu "ext3" (v časti "Filesystems"), ak chcete používať "ext3" aj pre koreňový adresár, NESMIETE použiť modul, ale pevné zakompilovanie do jadra (alebo "initrd", s čím vám však neporadím). Reštartujte počítač s novým jadrom.
      2. zadajte "tune2fs -j /dev/XXX" postupne pre všetky súborové systémy, kde chcete zapnúť žurnálovanie. Mám otestované, že to funguje aj pre živé, pripojené súborové systémy, ale ak môžete, urobte to radšej v jednopoužívateľskom režime ("init 1").
      3. v súbore "/etc/fstab" nahraďte "ext2" za "ext3" pre všetky súborové systémy, kde ste zapli žurnálovanie.
      4. príkazom "mount /dev/XXX -o remount" znovu pripojte jeden zo súborových systémov, mali by ste vidieť hlásenie o vytvorení žurnála. Ak je všetko OK, urobte to pre ďalšie súborové systémy alebo reštartujte počítač. Po ďalšom boote budú súborové systémy pripojené ako "ext3".
      Tento súborový systém vám odporúčam.
    • nevýhody: podpora tohto súborového systému je až v jadrách 2.4.x. Systém je pomalší ako "reiserfs".
  • reiserfs: iný žurnálovací súborový systém.
    • výhody: rýchlejší súborový systém ako "ext3" a dokonca aj "ext2"! Už dlhší čas ho podporujú distribúcie Mandrake a Red Hat.
    • nevýhody: nemožno konvertovať súborový systém aj s údajmi
  • vfat: súborový systém, ktorý používa Windows 9x (dlhé názvy súborov)
    • výhody: možnosť pracovať so súbormi uloženými na partíciách s Windows (DOS)
    • nevýhody: používateľ nepotrebuje tak často nabootovať Windows ;-)

Odporúčanie: Neviem, ako sú na tom s podporou žurnálovania jednotlivé distribúcie; bezpečne viem o tom, že Mandrake podporuje vo verzii 8.2 rovnako reiserfs aj "ext3" (testoval som "reiserfs", po reinštalácii som prešiel na "ext3") a v starších verziách 8.x bola minimálne podpora "reiserfs". Vo všeobecnosti však platí, že ak si máte možnosť vybrať niektorý z týchto súborových systémov, tak to urobte.

3.3.3 Atribúty pripojenia

Najdôležitejšie atribúty pripojenia (o všetkých sa môžete dočítať v manuálovej stránke "man mount):

  • atime: pri každom prístupe k i-uzlu sa bude aktualizovať čas prístupu (default). Opak: noatime môže za určitých okolností zvýšiť rýchlosť práce so súborovým systémom.
  • defaults: predvolené možnosti: rw, suid, dev, exec, auto, nouser, async
  • dev: povolí interpretovanie špeciálnych súborov - zariadení. Opak: nodev zvyšuje bezpečnosť na súborových systémoch, kde nepotrebujete vytváranie špeciálnych zariadení, napr. systém s domácimi adresármi používateľov.
  • exec: povolí spúšťanie programov. Opak: noexec zvyšuje bezpečnosť na súborových systémoch, kde nepotrebujete spúšťať programy - napríklad adresáre pre dočasné súbory. Dajte si pozor, aby ste nenastavili tento flag na partícii, kde sú uložené skripty! (Napr. Debian má na "/var" odložené inštalačné skripty k balíkom!)
  • suid: povolí spúšťanie programov s právami vlastníka a/alebo skupiny (setuid). Opak: nosuid zvyšuje bezpečnosť na súborových systémoch, kde nepotrebujete spúšťať setuid programy, napr. domáce adresáre, adresáre pre dočasné súbory a pod.
  • remount: umožní znovu pripojiť už pripojený súborový systém, typicky sa používa pri zmene atribútov z príkazového riadku, nie v súbore "/etc/fstab"!
  • ro: pripojí súborový systém iba na čítanie
  • rw: pripojí súborový systém na čítanie a zápis
  • user: umožní pripojiť súborový systém aj bežnému používateľovi (štandarne pripája súborové systémy iba root). Toto je dobré napríklad na pripájanie CD ROM, disketovej mechaniky a pod. Táto možnosť automaticky zapína atribúty noexec, nosuid a nodev, pokiaľ ich nezmeníte nasledujúcimi atribútmi exec, suid, resp. dev.
  • quota: zapína používateľské kvóty na súbory na tomto súborovom systéme. Pravdu povediac, tento parameter uvádzam spolu s "usrquota", ale jeho význam ako samostatného parametra mi zatiaľ uniká.
  • usrquota: zapína používateľské kvóty na súbory na tomto súborovom systéme
  • grpquota: zapína skupinové kvóty na súbory na tomto súborovom systéme

3.3.4 Pripájanie súborových systémov

Súborovy systém môžete pripojiť príkazom mount:

mount -t TYP -o atribut1,atribut2,...,atributN zariadenie adresar
mount -o atribut1,atribut2,...,atributN zariadenie | adresar

Príklad 1: pripojenie súborového systému ext2 na zariadení/partícii /dev/hda4 na pripájací bod /home:

mount -t ext2 /dev/hda4 /home

Príklad 2: pripojenie súborového systému, ktorý sa nachádza v /etc/fstab a má pripájací bod /home s atribútmi nosuid, nodev, rw (netreba uvádzať typ a zariadenie):

mount -o nosuid,nodev,rw /home

Príklad 3: pripojenie súborového systému, ktorý sa nachádza v /etc/fstab na zariadení /dev/hda4 s atribútmi nosuid, nodev, rw (netreba uvádzať typ a pripájací bod):

mount -o nosuid,nodev,rw /dev/hda4

Príklad 4: pripojenie už pripojeného súborového systému s pripájacím bodom /home s atribútmi suid, dev, rw

mount -o remount,suid,dev,rw /home

Odpojenie súborového systému je jednoduché:

umount zariadenie | adresar

Príklad:

umount /home

Aby ste nemuseli šamaniť na príkazovom riadku, existuje už spomínaný súbor "/etc/fstab", ktorý obsahuje zoznam súborových systémov s parametrami. Tieto súborové systémy sa pri štarte servera automaticky pripoja a pri zastavení alebo reštarte automaticky odpoja.

Ukážka súboru "/etc/fstab" z môjho domáceho počítača:

  #part.      prip. bod   system     atributy                                              dump fsck
  
  /dev/hda8   /           ext2       defaults                                              1    1
  /dev/hda6   /boot       ext2       defaults                                              1    2
  none        /dev/pts    devpts     mode=0620                                             0    0
  /mnt/cdrom  /mnt/cdrom  supermount fs=iso9660,dev=/dev/cdrom                             0    0
  /mnt/floppy /mnt/floppy supermount fs=vfat,dev=/dev/fd0                                  0    0
  /dev/hda1   /mnt/win_c  vfat       ro,user,exec,umask=0,codepage=852,iocharset=iso8859-2 0    0
  /dev/hda5   /mnt/win_d  vfat       ro,user,exec,umask=0,codepage=852,iocharset=iso8859-2 0    0
  none        /proc       proc       defaults                                              0    0
  /dev/hda7   swap        swap       defaults                                              0    0
  

Ukážka toho istého súboru z môjho nového počítača:

  #part.      prip. bod   system     atributy                                                                  dump fsck
  /dev/hda9   /           ext3       defaults                                                                  1    1
  /dev/hda3   /boot       ext3       defaults                                                                  1    2
  none        /dev/pts    devpts     mode=0620                                                                 0    0
  /dev/hda8   /home       ext3       defaults                                                                  1    2
  none        /mnt/cdrom  supermount dev=/dev/scd0,fs=auto,ro,--,iocharset=iso8859-1,codepage=850,umask=0      0    0
  none        /mnt/floppy supermount dev=/dev/fd0,fs=auto,--,iocharset=iso8859-1,sync,codepage=850,umask=0     0    0
  /dev/hda1   /mnt/win_c  ntfs       iocharset=iso8859-1,ro,umask=0                                            0    0
  /dev/hda5   /mnt/win_d  vfat       iocharset=iso8859-1,ro,codepage=850,umask=0                               0    0
  /dev/hda6   /mnt/win_e  vfat       iocharset=iso8859-1,ro,codepage=850,umask=0                               0    0
  none        /proc       proc       defaults                                                                  0    0
  /dev/hda7   /var        ext3       defaults                                                                  1    2
  /dev/hda4   swap        swap       defaults                                                                  0    0
  /dev/hdd1   /mnt/disk   auto       user,iocharset=iso8859-1,kudzu,codepage=850,noauto,umask=0,exec           0    0
  1. zariadenie/partícia (none: virtuálne zariadenia, napr. súborový systém "/proc" a pod.)
  2. pripájací bod (mount point)
  3. súborovy systém (auto: autodetekcia, supermount: automaticky pripájateľný súborový systém, využíva napr. Mandrake na pripájanie CD ROM a disketovej mechaniky)
  4. atribúty pripojenia pre príkaz "mount"
  5. označenie zálohovania tohto súborového systému (1 = zálohovať)
  6. označenie poradia, v akom budú súborové systémy kontrolované na chyby programom "fsck" (1 = hlavný súb. systém, 2 = ostatné, ktoré sa majú kontrolovať, 0 = súborové systémy, ktoré sa nemajú kontrolovať na chyby - typicky súborové systémy Windows, CDROM, disketová mechanika, NFS)

TODO: pokecať o tom viac, aj ukážka fs s nodev a pod. z príkladov hore

Na pripojenie/odpojenie všetkých súborových systémov v "/etc/fstab" môžete použiť príkaz:

mount -a [-t TYP]

resp.

umount -a [-t TYP]

Ak uvediete parameter "-t TYP", pripoja/odpoja sa iba súborové systémy zadaného typu.

3.4 Súborové kvóty (file quotas)

Súborové kvóty umožňujú obmedziť používateľské súbory (ich celkovú veľkosť a počet) pre jednotlivé súborové systémy. Aby ste ich mohli bez problémov používať, potrebujete:

  1. vytvoriť samostatnú partíciu (a súborový systém) pre používateľské súbory ("/home")
  2. vytvoriť samostatnú partíciu (a súborový systém) pre používateľské maily ("/var/spool/mail") alebo "/var" alebo uchovávať maily priamo v domácich adresároch používateľov (formát Maildir namiesto mailbox v nastavení mail servera)
  3. zapnúť podporu súborových kvót v kerneli
  4. upraviť "/etc/fstab" pre používanie kvót
  5. zapnúť podporu kvót pri štarte servera
  6. vytvoriť prototypy kvót pre používateľov
  7. zaviesť kvóty pre existujúcich používateľov podľa prototypov

Z vyššie uvedených bodov vyplýva, že každý používateľ bude môcť vo svojom domácom adresári používať iba obmedzené množstvo a veľkosť súborov. Stále mu zostane možnosť používať adresáre pre dočasné súbory ("/tmp", "/var/tmp"), ktoré však z principiálneho hľadiska nebudeme obmedzovať (slúžia práve na dočasné odkladanie súborov, ktoré nie je možné uložiť inde), ale budeme ich periodicky čistiť.

3.4.1 Druhy kvót

Pri práci s kvótami sa stretnete s týmito pojmami:

používateľská kvóta
Určuje obmedzenia na súbory pre jednotlivých používateľov. V ďalšom sa budeme zaoberať iba touto kvótou.
skupinová kvóta
Určuje obmedzenia na súbory pre skupiny používateľov. Obyčajne sa nepoužíva, nebudem sa ňou teraz zaoberať.
kvóta pre veľkosť súborov
Určuje maximálnu celkovú veľkosť súborov používateľa (skupiny).
kvóta pre počet súborov
Určuje maximálny počet súborov používateľa (skupiny).
soft quota, hard quota, grace period
Pojmom "soft quota" sa označuje kvóta, ktorú používateľ môže dočasne prekročiť (na obdobie "grace period" - bežne 1 týždeň), ale pri zápise súborov sa mu vypisujú varovania. "Hard quota" určuje skutočný maximálny limit, ktorý systém nikdy nedovolí používateľovi prekročiť (pri zápise súboru sa súbor skráti na nulovú dĺžku alebo sa vôbec nevytvorí).
V prípade, že používateľ prekročí limit "soft quota", po uplynutí "grace period" sa systém správa, ako pri naplnení limitu "hard quota".

Poznámka: všimol som si, že niekedy po prekročení kvóty používateľ už nemôže súbory ani vymazať. Momentálne to nemôžem overiť, ale ak by sa vám to stalo, pomohlo mi jedine to, že som používateľovi kvótu dočasne odstavil, zmazal mu súbory a potom zapol kvótu.

3.4.2 Vytvorenie samostatných partícií

Pokiaľ ste si samostatné partície "/home" a "/var" (alebo "/var/spool/mail") vytvorili pri inštalácii servera, je všetko v poriadku. Pokiaľ nie, budete musieť odzálohovať údaje na serveri a vytvoriť si partície teraz. Práci s partičnou tabuľkou sa venujem na inom mieste.

Ak by ste sa predsa len pokúsili pokračovať bez vytvorenia špeciálnych partícií, majte na pamäti, že kvóty vám síce budú fungovať, ale pokiaľ máte len jeden súborový systém ("/"), na ktorom sa nachádzajú okrem používateľských údajov aj adresáre pre dočasné súbory, budú tieto obmedzenia platiť aj pre ne!

3.4.3 Podpora kvót v kerneli

Ak používate predinštalované jadro, pravdepodobne je podpora kvót zakompilovaná. Úplná istota vám však celkom isto neublíži. Spustite konfiguráciu kernelu ("make menuconfig") a presvedčte sa, že je zapnutá možnosť "QUOTA_SUPPORT". Ak nebola, zapnite ju, ukončite konfiguráciu a prekompilujte kernel.

3.4.4 Zmeny v "/etc/fstab"

Predpokladajme, že už pracujete s novým jadrom s podporou kvót. Môžete pristúpiť k ďalšiemu kroku, a to je úprava "/etc/fstab", kde sa nachádzajú informácie o súborových systémoch na vašom počítači.

Príklad: zavádzanie kvót pre súborové systémy "/home" a "/var".

Pôvodný "/etc/fstab":

..
/dev/hda6 /home ext2 defaults,nosuid,nodev 1 2
/dev/hda4 /var  ext2 defaults,nosuid,nodev 1 2
..

Upravený "/etc/fstab"

..
/dev/hda6 /home ext2 defaults,nosuid,nodev,usrquota,quota 1 2
/dev/hda4 /var  ext2 defaults,nosuid,nodev,usrquota,quota 1 2
..

Teraz treba opätovne primountovať súborové systémy:

mount -a -o remount

Ak máte zakompilovanú podporu kvót v jadre, malo by byť všetko v poriadku.

Teraz prichádza na rad použitie jednopoužívateľského režimu. Budeme totiž počítať súbory a ich veľkosť a nebolo by dobré, keby nás pri tom svojimi zmenami rušil nejaký proces či používateľ. Zadajte z konzoly:

init 1

a počkajte, kým sa opäť objaví shell. Teraz už môžete spustiť ďalší program, "quotacheck", ktorý pripraví všetko potrebné na zavedenie kvót (zistí veľkosti súborov používateľov) a pri prvom spustení vytvorí súbory s kvótami "quota.user" v koreňovom adresári na každej partícii, pre ktorú zavádzate kvóty (v našom prípade to budú: "/home/quota.user" a "/var/quota.user". Program "quotacheck" sa spúšťa aj pri každom bootovaní servera. Parametre: "-a": spracuje všetky súborové systémy z "/etc/fstab", ktoré majú zapnutú podporu kvót ("usrquota" resp. "grpquota"), "-v": verbose, "-u": spracujú sa len používateľské (nie skupinové) kvóty:

quotacheck -avu

Ak je všetko v poriadku, môžete:

  1. reštartovať server a veriť, že nabehne s kvótami: to naozaj neznie až tak fantasticky, pretože skripty v "/etc/init.d" by si mali testovať, či používate kvóty a ak áno, zapnú ich automaticky. Odporúčam použiť práve túto možnosť, pri súčasných distribúciách je to v pohode
  2. zmeniť runlevel (ste v runleveli 1): opäť sa spoliehate na init-skripty
  3. zapnúť podporu kvót ručne:
    quotaon -avu
    hneď uvidíte prípadné chybové hlásenia, ale zostanete v runleveli 1

Poznámka: ak Vám príkaz "quotacheck" vytvoril súbory "aquota.user" ("aquota.group"), môže sa Vám stať, že príkaz "quotaon" nebude fungovať, pretože bude očakávať súbory "quota.user" ("quota.group")! Mne osobne sa to stalo na Debiane (Woody) s kernelom 2.4.21. Po chvíli pátrania som prišiel na to, že východiskom z problému je vytvorenie prázdnych súborov "quota.user" ("quota.group") na rovnakom mieste, ako sa vytvorili "aquota.user" resp. "aquota.group" (vytvoríte ich príkazom "touch quota.user" resp. "touch quota.group"). Súbory "aquota.*" potom vymažte a opäť spustite "quotacheck". Program síce vypíše varovanie o tom, že súbory neobsahujú platné údaje, ale použije ich - a my sme za vodou.

3.4.5 Prototypy používateľov

Prototypy používateľov slúžia ako šablóny, aby ste nemuseli definovať kvóty každému používateľovi samostatne. Definujete kvóty iba raz ako prototypy a potom podľa potreby ktorémukoľvek používateľovi zavediete kvótu podľa daného prototypu. Je to nielen rýchle, ale aj veľmi elegantné. A dá sa to robiť skriptom ;-)

Vytvorte si fingovaných používateľov, ktorých úloha bude len vystupovať v súbore "/etc/passwd". Napríklad ja budem používať dva prototypy, jeden pre "študenta" ("q-stud", kvóty obmedzené pre žiakov na vyučovaní) a druhý pre "používateľa" ("q-user", väčšie kvóty určené skutočným používateľom), ktoré sa budú líšiť v maximálnej veľkosti súborov. Sadnite si a navrhnite si prototypy, aké budete potrebovať vy. V školách sa napríklad môže ešte často môže použiť obmedzenie kvóty pre študentov, resp. učiteľov. Nezabudnite si určiť veľkosti kvót tak, aby súčty kvót jednotlivých používateľov boli menšie, nanajvýš rovné veľkosti vyhradenej partície. Musíte si tiež ponechať diskovú rezervu pre pridávanie používateľov v budúcnosti.

Vytvorenie prototypových používateľov: Debian

adduser --system --no-create-home --disabled-password q-stud
adduser --system --no-create-home --disabled-password q-user

Vytvorenie prototypových používateľov: iná distribúcia

useradd -c "Quota prototype (student)" -d "/tmp" -r -s "/bin/false" q-stud
useradd -c "Quota prototype (user)" -d "/tmp" -r -s "/bin/false" q-user

Parameter "--system" ("-r") spôsobí, že UID protypového používateľa bude menšie ako 100 (500) a bude patriť k "systémovým" kontám na serveri. Je to len konvencia. Parameter "--disabled-password" je však dôležitý: určuje, že protypový používateľ bude mať automaticky zablokované heslo a že ho nikto nebude môcť zneužiť na prihlásenie. V niektorých distribúciách má používateľ automaticky po vytvorení konto zablokované až do zadania hesla, v iných (Debian) si "adduser" vypýta heslo používateľa. Keďže my prototypových používateľov v skutočnosti používať nebudeme, heslo zablokujeme a ušetríme si robotu. V iných distribúciách alebo pri použití programu "useradd" je (malo by byť!) heslo defaultne zablokované.

Teraz vytvoríme kvótu pre tieto prototypy:

edquota q-stud

Spustí sa editor v ktorom nastavujete limity (vo väčšine prípadov "vi", ale môžete zmeniť premennú "EDITOR" vo vašom prostredí ešte pred zadaním príkazu):

bash:

export EDITOR=joe

csh, tcsh:

setenv EDITOR joe

Všimnite si, že v nasledujúcich príkladoch (a samozrejme aj v reálnej praxi) sa v súboroch s definíciou kvót nespomínajú pripájacie body diskov, ale priamo špeciálne zariadenia (napr. "/dev/hda4"). Preto si vždy pred úpravou kvót (alebo aj počas nej) nechajte vypísať Vaše disky príkazom "mount" (bez parametrov).

Quotas for user q-stud:
/dev/hda4: blocks in use: 0, limits (soft = 1000, hard = 1024)
        inodes in use: 0, limits (soft = 5, hard = 5)
/dev/hda6: blocks in use: 0, limits (soft = 3072, hard = 4096)
        inodes in use: 0, limits (soft = 475, hard = 500)

Týmto príkazom nastavíte kvóty na pre jednotlivé partície používateľa "q-stud" takto:

  • "/var": soft: 1000 KB, hard: 1024 KB; max. 5 súborov (v skutočnosti by mal stačiť 1, pretože ide o súbor s mailami, ale niektoré programy na prácu s mailami môžu vytvárať uzamykacie súbory... takže pre istotu)
  • "/home": soft: 3072 KB, hard: 4096 KB; počet súborov: soft: 475, hard: 500
edquota q-user

Quotas for user q-user:
/dev/hda4: blocks in use: 0, limits (soft = 8000, hard = 8192)
        inodes in use: 0, limits (soft = 5, hard = 5)
/dev/hda6: blocks in use: 0, limits (soft = 8000, hard = 8192)
        inodes in use: 0, limits (soft = 850, hard = 900)

Týmto príkazom nastavíte kvóty na pre jednotlivé partície používateľa "q-user" takto:

  • "/var": soft: 8000 KB, hard: 8192 KB; max. 5 súborov
  • "/home": soft: 8000 KB, hard: 8192 KB; počet súborov: soft: 850, hard: 900

Teraz aplikujeme hodnoty prototypov na všetkých skutočných používateľov (Pozor! Nie pre roota a systémové kontá!!! Pre démonov by sa síce zišlo mať nejaké obmedzenia, ale nie je to triviálna záležitosť a v prípade, že urobíte chybu, niečo vám prestane fungovať - obyčajne ten démon ;)). Má to tú výhodu, že už nebudete musieť vôbec nič editovať:

Pre zavedenie kvót podľa prototypu "q-user" pre používateľov "janko", "marienka" a "peter":

edquota -p q-user janko marienka peter

Pre zavedenie kvót podľa prototypu "q-stud" pre používateľov "pokus", "novak" a "jozef":

edquota -p q-stud pokus novak jozef

Ak máte používateľov rozdelených do skupín, ktorým chcete zaviesť potenciálne rôzne kvóty, môžete použiť na vypísanie používateľov tento skriptík v bashi:

cat /etc/passwd |awk -F: '{if ($4 == XXX) print $1}'

kde "XXX" je číslo (GID) skupiny, ktorá Vás zaujíma (zistíte ho prehľadaním súboru "/etc/group". Ak vizuálne skontrolujete výstup príkazu, môžete ho použiť na zavedenie kvót:

edquota -p q-user `cat /etc/passwd |awk -F: '{if ($4 == XXX) print $1}'`

Dôsledkom príkazu bude, že všetci zobrazení používatelia (skupina "XXX") budú mať zavedenú kvótu podľa prototypu "q-user".

Alternatívne môžete chcieť zaviesť rovnakú kvótu všetkým používateľom servera. V takom prípade si zo súboru "/etc/passwd" zistite UID prvého nesystémového používateľa (pravdepodobne 500 alebo 1000 - v tomto príklade použijeme "500") a použite skriptík takto:

cat /etc/passwd |awk -F: '{if ($4 > 500) print $1}'

a ak ste spokojní s výstupom, zavediete kvóty príkazom:

edquota -p q-user `cat /etc/passwd |awk -F: '{if ($4 > 500) print $1}'`

následkom čoho budú mať všetci vypísaní používatelia zavedenú kvótu podľa prototypu "q-user". No a teraz mi povedzte, že to nie je elegantné! :) Kvóty sú hotové. Na ich kontrolu teraz a kedykoľvek počas prevádzky servera môžete použiť programy "quota" a "repquota":

Príklad:

quota janko

Disk quotas for user janko (uid 657):
     Filesystem  blocks   quota   limit   grace   files   quota   limit     grace
     /dev/hda4       89    8000    8192               1       5       5
     /dev/hda6     4087    8000    8192             601     850     900

Poznámka: výpis príkazu "repquota" je z môjho servera, takže číselné údaje pre kvóty v ňom nesedia s tu uvedenými príkladmi. Sorry, nie je čas to teraz meniť. Všimnite si však, ako systém upozorňuje na prekročenie kvóty na disku "/dev/hda4" u používateľa "user6".

repquota -auv
*** Report for user quotas on device /dev/hda4
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    2077       0       0              5     0     0
nobody    --       0    1000    1024              0     5     5
admin     --       1       0       0              1     0     0
q-stud    --       0    1000    1024              0     5     5
q-user    --       0    8000    8192              0     5     5
user1     --       0       0       0              1     0     0
user2     --    1316       0       0              1     0     0
user3     --   27593       0       0              1     0     0
user4     --   15743       0       0              1     0     0
user5     --      28       0       0              1     0     0
vix       --     132       0       0              1     0     0
user6     +-    8182    8000    8192   none       1     5     5

*** Report for user quotas on device /dev/hda6
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   64632       0       0           2124     0     0
www-data  --    1554       0       0             56     0     0
nobody    --       1    3072    4096              1   475   500
mysql     --     226       0       0             57     0     0
admin     --     579       0       0            111     0     0
q-stud    --       0    3072    4096              0   475   500
q-user    --       0    8000    8192              0   850   900
user1     --   17766       0       0           1650     0     0
user2     --   62389       0       0            122     0     0
user3     --  346932       0       0           1244     0     0
user4     --  691711       0       0           7741     0     0
user5     --   75841       0       0            574     0     0
vix       --  288035       0       0           8443     0     0
user6     --    5025    8000    8192            195   850   900

Pre rýchle zrušenie kvót pre nejakého používateľa ("lenka") môžete použiť:

edquota -p root lenka

Za predpokladu, že používateľ "root", ktorého sme práve použili ako prototyp, nemá určenú kvótu!

To je všetko. V budúcnosti po pridaní nového používateľa do systému mu jednoduchým spustením programu "edquota" podľa predchádzajúcich príkladov zavediete automaticky aj kvótu. Pre väčšie pohodlie môžete príkaz "edquota" pridať do súboru "/usr/sbin/adduser.local" (ak používate balík "adduser" na Debiane). TODO ukážka

Upozornenie: ak používateľovi nastavíte kvótu podľa prototypu, znamená to len toľko, že sa použijú tie isté nastavenia, ako používa prototypový používateľ. Ak zmeníte nastavenia prototypového používateľa, nastavenia kvót používateľov, ktorých ste vytvorili podľa tohto prototypu sa nezmenia! Pre aktualizácku budete musieť opätovne zaviesť kvóty, napríklad pomocou toho jednoriadkového skriptíku, ktorý som tu napísal. Takže vlastne - žiaden problém!

Upozornenie: nikdy nezavádzajte kvóty systémovým používateľom, ak presne neviete, čo robíte. A absolútne nikdy nezavádzajte kvótu používateľovi "root"!

3.4 Odporúčania na vytváranie súborových systémov

Keď vytvárate partície, mali by ste od začiatku mať na pamäti, na čo ich budete chcieť použiť. Od toho totiž závisí, aké veľké partície si vytvoríte a kde budú ich pripájacie body. Plánované rozdelenie disku môže veľmi významne prispieť k zvýšeniu bezpečnosti.

Pripájacie body sa definujú v súbore "/etc/fstab" spolu s atribútmi jednotlivých súborových systémov. Moje odporúčania sú takéto:

3.4.1 Minimalistická konfigurácia

Rozdelenie disku - minimalistická serverová konfigurácia
pripájací bod popis súborový systém parametre (/etc/fstab)
  SWAP žiaden (partícia: linux swap) defaults
/ hlavný súborový systém ext3 (reiserfs, ext2) defaults
/home domáce adresáre používateľov ext3 (reiserfs, ext2) defaults,nosuid,nodev,usrquota
/tmp umiestnenie dočasných súborov ext3 (reiserfs, ext2) defaults,nosuid,nodev,noexec

3.4.2 Bezpečnejšia konfigurácia

Rozdelenie disku - bezpečnejšia serverová konfigurácia
pripájací bod popis súborový systém parametre (/etc/fstab)
  SWAP žiaden (partícia: linux swap) defaults
/ hlavný súborový systém ext3 (reiserfs, ext2) defaults
/boot umiestnenie kernelu - nepovinné ext3 (reiserfs, ext2) defaults,nosuid,nodev
/home domáce adresáre používateľov ext3 (reiserfs, ext2) defaults,nosuid,nodev,usrquota
/var súbory, ktoré sa počas behu systému menia (dočasné súbory, čakajúce maily, rôzne databázy, ...) ext3 (reiserfs, ext2) defaults,nosuid,nodev*

*: ak budete na tejto partícii vytvárať vyhradené adresáre pre démonov (chroot()), je pravdepodobné, že budete potrebovať aj zariadenia (napr. "/dev/null") a tento parameter budete musieť vynechať!
/var/log logovacie súbory ext3 (reiserfs, ext2) defaults,nosuid,nodev*,noexec
/var/spool/mail
(ak uchovávate maily v tomto formáte)
umiestnenie doručených mailov ext3 (reiserfs, ext2) defaults,nosuid,nodev,noexec,usrquota
/tmp umiestnenie dočasných súborov ext3 (reiserfs, ext2) defaults,nosuid,nodev

© 2009 Všetky práva vyhradené.

Tvorba web stránok zdarmaWebnode