Linux E X P R E S

Facebook

Linuxové souborové systémy

Když Linux přicházel na svět, kernelové sudičky mu mimo rychlosti a přenositelnosti daly do vínku ještě hojnost všelijakých souborových systémů - především ty klasické, ctící unixovou tradici (ext2, ext3, JFS, XFS), včetně několika fosilií (např. Minix FS, UFS). Pak jsou zde některé experimentální (jako třeba ReiserFS), jiné sloužící pro kompatibilitu s jinými světy (VFAT, NTFS, HFS+), souborové systémy síťové (NFS, Samba) a virtuální (mj. procfs, sysfs).


Již v kolébce (tedy při instalaci) můžeme vybrat filesystém, který bude našemu Linuxu nejlépe slušet, a upravit mu jej na míru. Během tohoto vybírání si budeme muset rozmyslet, jak vlastně hodláme svůj systém používat: Bude to desktop, nebo server? Plánujeme jej jen nainstalovat a spustit, nebo vyvádět psí kusy a měnit velikosti jednotlivých diskových oddílů jako na běžícím páse? Chystáme se na disku skladovat spíš něco větších souborů (filmy, hudba...), nebo ohromné množství malých (třeba adresáře plné e-mailů)? Až si na podobné otázky odpovíme, bude se nám vybírat lépe, ale nejprve se ještě budeme muset prokousat trochou nezbytné teorie.

Diskové oddíly se dělí na bloky a ten první a nejdůležitější se nazývá superblok. Funguje podobně jako cedule u vchodu do knihovny, která nám sdělí, kde jsme a kde máme hledat katalogy. Najdeme jej na začátku disku (jeho záložní kopie se ale vyskytují i v dalších blocích) a poskytne nám nejrůznější důležité informace o celém souborovém systému. Obsahuje například "magické číslo", které by mělo souborový systém jednoznačně identifikovat a umožnit např. příkazu mount, aby jej automaticky rozpoznal. Kromě toho se v něm uchovává mnoho údajů specifických pro daný filesystém, jako třeba údaje o počtu volných bloků.

Mountování je proces, při kterém systém nebo uživatel připojuje disk, diskový oddíl nebo jiné médium do adresáře v systému, aby tak zpřístupnil jeho obsah. Parametry připojování jsou uvedeny v souboru /etc/fstab, článek na toto téma najdete v květnovém čísle časopisu.

Na unixových souborových systémech existují soubory nezávisle na adresářích, adresář je dokonce jedním z možných typů souborů. Veškeré informace o souborech jsou uchovávány v datových strukturách, kterým se říká inody. Každý inode uchovává odkaz na obsah souboru a informace jako název souboru a metadata (mj. velikost souboru, UID vlastníka či čas poslední modifikace). Můžete si jej tedy představit jako kartičku z lístkového katalogu obsahující údaje umožňující vyhledat knihu v knihovně. Při vybírání souborového systému pro svůj diskový oddíl bychom měli vědět, že některé z nich mají pevně určený počet inodů již při vytvoření a počet souborů, které mohou uchovávat, je tedy omezen.

UID je user identifier čili číselné označení uživatele v systému. Obvykle je UID z intervalu 0-32767, přičemž nulu má vždy uživatel root. Dále platí následující omezení a podmínky: uživatel nobody býval opakem roota (měl tedy 32767), dnes už spíše platí, že má přiřazenu hodnotu z intervalu 65530-65535. Hodnoty 1-100 jsou rezervovány systému. Vztah mezi číselnou hodnotu a jménem uživatele je definován v souboru /etc/passwd. Volně dle Wikipedie.

Některé souborové systémy se snaží čelit problémům s možnou ztrátou dat při výpadcích proudu, zpanikařeném kernelu a podobných nepředvídatelných událostech pomocí vynálezu jménem žurnál. Představme si jej jako pomůcku starého zapomnětlivého knihovníka, který ukládá knížky do regálů, a přitom si poznamenává na papír, kam kterou knihu uklidil. Podle tohoto papíru potom vyplňuje katalogové lístky. Stejně tak pokud si při vytváření nového souboru na disku zapíšeme do žurnálu, že nejprve máme v plánu přichystat si pro něj inode, založit záznam v adresáři a potom zkopírovat na disk patřičná data, po výpadku proudu snadno zjistíme, co jsme ještě zvládli, a co už ne. Žurnál umožní během několika sekund odstranit nekonzistence, které je jinak potřeba zdlouhavě řešit pomocí příkazu fsck.

Systémová utilita fsck, zkratka z anglického výrazu file system check nebo file system consistency check, tj. kontrola (neporušenosti) souborového systému, je nástroj, který odhaluje a opravuje chyby ve struktuře souborového systému.

Chování souborových systémů se řídí podle nejrůznějších parametrů. Některé z nich musíme určit během jejich vytváření, a potom již nebudeme mít možnost je změnit. Jednotlivé filesystémy v tomto směru vykazují značné odlišnosti: zatímco např. mnohé z nich mají pevně oddělené různé oblasti (inody, datové bloky atd.), další umějí diskový prostor samy přerozdělovat podle potřeby. Jiné parametry můžeme měnit kdykoliv (např. velikost žurnálu) a ještě další budeme nastavovat až při mountování souborového systému. Do té poslední skupiny patří kromě jiných parametr noatime, kterým můžeme vypnout udržování časů posledního přístupu k souborům a zrychlit tak diskové operace. Souborový systém na každém oddílu si můžete pojmenovat (přidělit mu tzv. label), a pak se na něj při mountování tímto jménem odkazovat namísto jména oddílu, které se může po připojení dalšího zařízení změnit.

Žurnálování je technika používaná v informatice (hlavně u souborových systémů a databází), která zajišťuje integritu dat i v případě výpadku systému (např. při přerušení napájení v průběhu práce).

Principem techniky je uchovávání chronologického záznamu prováděných operací, do kterého se zapisují všechny prováděné činnosti. Pokud dojde např. k výpadku napájení, je po restartu nekonzistence opravena návratem do předchozího zaznamenaného stavu za pomoci záznamů z žurnálu.

Mezi žurnálující souborové systémy patří např. NTFS, Ext3 nebo ReiserFS. V obecném smyslu se jako žurnálování označuje vytváření libovolných podrobných záznamů prováděné činnosti (logů). Zdroj: Wikipedia

I při plavbě v linuxových vodách každý pirát i poctivý námořník tu a tam narazí na skaliska souborových systémů nepoznamenaných unixovou filozofií. Při mountování takových filesystémů je potřeba určit, jaká unixová přístupová práva mají soubory a adresáře dostat a také, jak se mají překládat znaky v cizích kódováních na kódování místní.

Nyní si prohlédneme jednotlivé souborové systémy podrobněji. U každého z nich se také podíváme na jeho nejdůležitější parametry, jejich přesná syntaxe je důkladně popsána v manuálových stránkách příkazu - man mount(8) - a ostatních příkazů tam zmíněných.

ext2: Second Extended Filesystem

Tento souborový systém je téměř tak starý jako Linux sám. Ještě nedávno jste jej nalezli přednastavený ve většině linuxových distribucí. Mezi jeho hlavní přednosti patří léty prověřená spolehlivost a slušná rychlost všech běžných operací. Nevýhodou je pomalost těch méně běžných (práce s milionem souborů v jednom adresáři apod.), pevně daný počet inodů a nutnost provádět kontrolu integrity po každém nekorektním restartu systému.

Při zakládání filesystému, ať už pomocí mkfs, nebo pomocí instalátoru distribuce, si lze zvolit velikost bloku. Použitelné velikosti se pohybují od 1024 do 4096 bajtů, menší bloky trochu šetří místo na disku, větší umožňují rychlejší práci se systémem a zejména rychlejší běh fsck. Na velikosti bloku rovněž závisí maximální možná velikost souboru. I pro bloky o velikosti 1 kB ovšem tento limit činí více než 16 GB.

Počet inodů na filesystému si mkfs zvolí podle kapacity oddílu, ve výchozím nastavení je to jeden inode na každých 8 kB kapacity, u malých oddílů na 4 kB. Tento poměr je při zakládání filesystému možné změnit, což se vyplatí zejména, pokud plánujeme skladovat na disku velké množství malých souborů nebo naopak několik málo velikánských.

Taktéž je možné určit, jaká část kapacity oddílu bude rezervována pro procesy spuštěné s rootovskými právy. Obvykle to bývá pět procent, u velkých oddílů nebo oddílů používaných jedním uživatelem se může vyplatit tuto hodnotu zmenšit.

ext3: Third Extended Filesystem

Filesystém ext3 je nástupcem ext2. Formát na disku má velice podobný (až do té míry, že pomocí tune2fs a fsck je možné z ext2 udělat ext3 i naopak) a nabízí navíc několik zajímavých vymožeností. Tou nejdůležitější je bezesporu žurnálování. Velikost žurnálu je volitelná. Taktéž si můžete vybrat, zda se budou žurnálovat všechny operace, nebo jenom metadata. První možnost je dokonale spolehlivá, ale poměrně pomalá. Naproti tomu druhá za svou vyšší rychlost platí tím, že při rebootu těsně po zapsání dat na konec souboru bude už soubor rozšířený, ale data ještě na svém místě nebudou. Proto ext3 nabízí i něco mezi: žurnálování metadat a uspořádání zápisů dat tak, aby se metadata měnila až v okamžiku, kdy už jsou bezpečně všechna data zapsána.

Druhou příjemnou vlastností, kterou si můžete objednat zapnutím přepínače dir_index, je rychlejší vyhledávání v adresářích. To zpříjemní život zejména milovníkům obrovských adresářů, čili například uživatelům sendmailu.

Tento filesystém je v současné době na Linuxu nejrozšířenější a pravděpodobně nás bude doprovázet ještě mnoho dalších let, protože jeho autoři plánují do budoucna spoustu zajímavých rozšíření. O podrobnostech se můžete dočíst v [2].

JFS: IBM Journaling Filesystem

Tento zajímavý kousek vznikl začátkem 90. let v laboratořích firmy IBM. Původně byl navržen pro operační systém AIX a časem přenesen i pod OS/2 a následně pod Linux. Byl to pravděpodobně první filesystém, ve kterém se objevilo žurnálování a celá řada dalších, na svou dobu velmi pokrokových, triků jako třeba dynamické alokování inodů a komprimované uložení alokačních tabulek.

JFS velice efektivně zvládne všechny druhy zátěže a snad jedinou jeho potenciální nevýhodou je to, že nepodporuje média menší než 16 MB. Při těchto vlastnostech je až ku podivu, že není v linuxovém světě moc známý.

XFS

Systém XFS byl vyvinut firmou Silicon Graphics pro operační systém IRIX a posléze zveřejněn a přenesen i pod Linux. Hlavním cílem autorů tohoto filesystému byl velký výkon při práci s objemnými daty. Zda se to zdařilo, posuďte sami: při jednom z testů se povedlo na 32procesorovém serveru dosáhnout přenosové rychlosti 7 GB/s. Co se týče pokročilosti návrhu a výkonu v obvyklejších případech, je dosti podobný JFS.

Jistou daní za tyto výhody je ovšem značná složitost kódu. Zdrojové texty XFS v jádru Linuxu měří více než sto tisíc řádků řádků (JFS má okolo 30000, ext3 cca 15000) a je těžko k uvěření, že by se v nich neskrývaly žádné další chyby.

ReiserFS a Reiser4

Tyto dva souborové systémy pochází z dílny Hanse Reisera a jeho firmy Namesys. Jsou založeny na dosti neobvyklých a zajímavých nápadech, jako je třeba uložení kompletní struktury filesystému do jednoho vyváženého stromu. Snaží se nabídnout efektivní práci s velkým množstvím maličkých souborů a spojit tak výhody souborového systému s výhodami databází. Aby toho dosáhly, ukládají zvlášť konce ("ocásky" neboli tails) souborů, které nezaplní celý blok; do jednoho bloku obvykle uloží ocásky více souborů. To na druhou stranu zpomaluje práci se středně velkými soubory, takže se někdy vyplatí filesystém namountovat s volbou notail, čímž se tato vlastnost vypne.

Znatelnou vadou na kráse těchto filesystémů je absence spolehlivého nástroje na opravu rozpadlých oddílů. To by sice díky žurnálování nemělo teoreticky nikdy nastat, ale praxe a nikdy nespící čerti nám tuto teorii obvykle brzy rozmluví.

V současných linuxových jádrech je integrován ReiserFS verze 3. Autoři od té doby dokončili verzi 4, která by měla odstraňovat zmíněné nevýhody a také fungovat o poznání rychleji. O její integraci do jádra se prozatím vedou mezi autory a kernelovými vývojáři vleklé spory, protkané spoustou technických problémů i osobních antipatií.

Benchmarky

Bylo by pěkné, kdyby náš přehled linuxových filesystémů končil nějakým testem ukazujícím, který souborový systém je mezi všemi ten nejdokonalejší a nejrychlejší. Toho ovšem budeme muset laskavého čtenáře ušetřit, neboť výkon filesystémů závisí na ohromném množství proměnných, například na typu prováděných operací, průměrné velikosti souborů a adresářů atd. Proto není nikterak těžké vybrat z publikovaných benchmarků pro každý filesystém takový benchmark, v němž zvítězí. Kvalitní test ukazující závislosti na parametrech se proto rozsahu našeho článku zcela vymyká a zájemci jej mohou najít např. v [6].

Diskuze (0) Nahoru