Portál AbcLinuxu, 27. května 2024 12:09

Moderní souborové systémy - 1. část

27. 11. 2002 | Petr Novický
Články - Moderní souborové systémy - 1. část  

Úvod do tématiky žurnálovacích systémů.

Úvod

Mnozí z Vás se jistě chtěli seznámit s pojmem souborový systém hlouběji. Ačkoliv si myslím, že se drtivá většina s pojmem souborový systém setkala, přesto ho nejprve objasním. Je to software, který slouží k organizování a používání dat uložených na záznamových médiích (pevný disk, CD apod). Souborový systém zajišťuje integritu dat (přeloženo do českého jazyka ucelenost). Tudíž informace, které uložíme, budeme moci později vyvolat v nezměněné podobě.

Pro svou činnost filesystém ukládá informace o souborech a informace o sobě samotném (vlastnictví, datum, kontrola přístupu, délka souboru a jeho lokace na disku apod). Bez těchto informací, tzv. metadata, by souborový systém nemohl pracovat. Nebudu se tu zabývat souborovými systémy jako ext2fs (běžně používaný souborový systém v OS Linux), o něm byla jistě již spousta materiálu sepsána a tak nebudu nosit dříví do lesa. Navíc nové filesystémy mají lepší vlastnosti a nemají tak přísná omezení jako třeba právě ext2fs.

Motivace nových souborových systémů

Modernější filesystémy použijeme zvlášť, pokud chceme zajistit integritu dat i při náhlém přerušení práce počítače. Existuje několik možností, co se při náhlém přerušení práce může stát:

Standardní linuxový souborový systém (ext2fs) svému poškození částečně předchází tím, že udržuje redundantní kopii metadat, takže se většinou nestává, že bychom o ně přišli. Pomocí kontroly integrity souborového systému (fsck), klasicky během bootování, je systém schopen zjistit, kde jsou metadata poškozená a nahradí je prostým zkopírováním redundantní verze. Nebo dojde ke smazání souboru, který byl přerušením poškozen. Samozřejmě že kontrola trvá tím déle, čím větší máme diskový oddíl a kontrola opravdu velkého disku může trvat velmi dlouho. Žádná z uvedených vlastností se samozřejmě nikomu z nás nelíbí, naštěstí existuje alternativa k těmto klasickým druhům filesystémů. Jsou jimi souborové systémy, které pracují s tzv. žurnálem.

Žurnálovací souborové systémy

O co se jedná. Stručně řečeno žurnálovací filesystém si uchovává informace o operacích, které provedl a je pak v případě výpadku schopen rychle se dostat zpět do konzistentního stavu. Změny jsou evidovány jako tzv. transakce. Jedná se o nezávislé atomické operace. Po každé transakci následuje potvrzení, když dojde k uskutečnění daného úkonu (např. zápis na disk). Proto pokud systém "spadne", můžeme najít v záznamech informace o provedených změnách a vrátit vše do původního stavu. Mezi tyto souborové systémy patří např. ext3, ReiserFS, XFS a JFS. V našem seriálu se postupně zmíníme o každém z nich podrobněji.

Omezení souborových systémů

Problémy při výpadcích však nejsou zdaleka jedinými nevýhodami tradičních souborových systémů jako ext2fs. Všechny byly navrženy v době, kdy záznamová média neměla takovou kapacitu jako v současné době. Dnes máme větší soubory, adresáře a také diskové oddíly a starší souborové systémy už nestačí ať už z hlediska různých omezení velikostí nebo výkonu. Tyto problémy jsou důsledkem interních struktur, na kterých jsou založeny. Hlavním problém je, že mají pevně danou délkou, což limituje jejich možnosti. Také metody, které v dřívější době vyhovovaly, jsou už při dnešních možnostech z hlediska výkonu nedostačující. Souborové systémy nové generace jsou navrhovány tak, aby problémům omezení předcházely.

V následující tabulce si můžete porovnat omezení jednotlivých souborových systémů:

Filesystém Max. velikost filesystému Velikost bloků Max. velikost souboru
Ext2 4 TB 1KB-4KB 2 GB
Ext3 4 TB 1KB-4KB 2 GB
ReiserFS 16 TB až 64KB 2^10 PB *1
XFS 18000 PB *1 512B - 64KB 9000 PB *1
JFS 512 B / 4 PB *2 512B, 1024B, 2048B, 4096B 512B / 512Tb *2

*1) 1PB = 10^15 B

*2) Maximální velikost souborového systému závisí na velikosti bloku dat, velikosti pro ostatní hodnoty dostaneme jednoduše pomocí trojčlenky.

Optimalizace výkonu nových souborových systémů

Vyhledávání volných bloků

Dalším problémem jsou struktury, pomocí kterých souborový systém hledá volné bloky při ukládání dat. Často se jedná o seznam, kde jsou udržována čísla jednotlivých volných bloků. UFS a ext2fs používá bitmapu, což je pole bitů, kde každý z nich odpovídá jednomu logickému bloku na diskovém oddílu. S narůstající kapacitou délka pole narůstá a výkon klesá.

Problémům, týkajících se hledání volných bloků dat, se vyvarujeme použitím tzv. "extents" a balancovaného stromu. Extents je skupina sousedících logických bloků, které jsou používány některými filesystémy. Deskriptor extents obsahuje 3 údaje:

V případě použití extents nezávisí velikost struktury, kde si uchováváme informace o volném místu, na velikosti filesystému. Také použitím balancovaného stromu místo prostého seznamu dochází k dalšímu zvýšení výkonu.

Problémy s velkými filesystémy

V případě velkého počtu položek adresáře je efektivita u starších souborových systému opět slabší. Často jsou položky adresáře ukládány do seznamu, a tudíž jejich následné vyhledávání je zbytečně zdlouhavé. Jedním z řešení je opět použití balancovaného stromu, kde jsou tyto položky uspořádány podle jmen.

Výkonnost však nedostačuje ani u velkých souborů. Pro vysvětlení této oblasti si musíme neprve objasnit pojem i-node. Jedná se o strukturu, kde souborový systém udržuje informace o souboru, jako jsou práva, typ souboru a hlavně ukazatele na bloky souborového systému, kde je soubor uložený. Obsahuje jednak přímé ukazatele, a také tzv. nepřímé ukazatelé, odkazující na bloky s ukazately přímými. Viz obrázek:

Obrazek inodu

Problém spočívá v navržení struktury i-nody. Starší souborové systémy byly vytvářeny převážně pro práci s menšími soubory. Struktura i-nodů je proto ne zrovna efektivní. Čím větší soubor používáme, tím vícekrát přistupujeme k disku díky nepřímým pointrům. Důvodem, proč nepřímé pointry vůbec ext2fs používá, je to, že i-node má pevnou velikost.

Problém velkých souborů může být odstraněn použitím dynamického alokování i-nodů. Bohužel musíme vyřešit otázky jak zařídit mapování logických bloků i-nodu a jaké použít struktury na vyhledávání v rámci i-nodu. Řešením je většinou použití balancovaných stromů.

Řídké soubory

Omezení externí fragmentace a podpora řídkých souborů (sparse files) je také jednou z výhod nových filesystémů (ovšem jejich podpora je už v ext2fs). Pojem fragmentace většina čtenářů jistě zná, jen připomenu že se jedná o rozptýlení jednotlivých bloků souboru po disku a hlavička disku pak při čtení musí přejíždět z místa namísto. Samozřejmě výhodnější je mít bloky za sebou, operace pak budou rychlejší.

Řídké soubory jsou soubory, které vzniknou následujícím způsobem:

Zapíšeme například několik počátečních bytů dat a poté se chceme zapsat data uvnitř souboru, která odpovídají offsetu třeba 50000. Pokud nemá náš filesystém podporu pro řídké soubory, alokujeme všechny byty mezi počátkem a těmi bloky uvnitř souboru. Bloky mezi počátkem a offsetem 50000 nás však nezajímají a vůbec by alokovány být nemusely. Pokud použijeme souborové systémy s podporou řídkých souborů, pak se alokuje jen tolik místa, kolik zapisovaná data skutečně zabírají.

Odkazy a zdroje

Seriál Moderní souborové systémy (dílů: 5)

První díl: Moderní souborové systémy - 1. část, poslední díl: Moderní souborové systémy - JFS.
Následující díl: Moderní souborové systémy - ext3

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

27.11.2002 07:59 Quasar
Rozbalit Rozbalit vše Podivne hodnoty ReiserFS
Odpovědět | Sbalit | Link | Blokovat | Admin
Hm... Co se tyka FS, tak jsem uplny neznalec, ale neni mi jasne, jak se na filesystem velikosti 16TB vejde soubor velikosti 2^10 PB - viz ReiserFS. Diky za odpoved.
27.11.2002 09:31 Petr Adamek
Rozbalit Rozbalit vše Podivne hodnoty ReiserFS
Viz ridke soubory
27.11.2002 09:29 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše 2G
Odpovědět | Sbalit | Link | Blokovat | Admin
jakto ze ext3 ma omezeni na max velikost souboru 2G, kdyz mam normalne na disku soubory 4-5G?
-- Nezdar není hanbou, hanbou je strach z pokusu.
6.7.2008 15:30 Smajchl | skóre: 39 | blog: Drzy_Nazory | Praha
Rozbalit Rozbalit vše Re: 2G
+1
My máme všechno co chcem, my máme dobrou náladu!
houska avatar 23.6.2010 11:34 houska | skóre: 41 | blog: HW
Rozbalit Rozbalit vše Re: 2G

protoze to je zde uvedeno spatne ... wiki tvrdi ze je to zavisle na velikosti bloku:

ext3 has a maximum size for both individual files and the entire filesystem. For the filesystem as a whole that limit is 232 blocks.
Block size	Max file size	Max filesystem size
1 KB		16 GB		2 TB
2 KB		256 GB		8 TB
4 KB		2 TB		16 TB
8 KB[limits 1]	2 TB		32 TB
27.11.2002 09:34 zacatecnik stoural
Rozbalit Rozbalit vše velikost spoboru u ext2
Odpovědět | Sbalit | Link | Blokovat | Admin
Obavam se, ze omezeni velikosti souboru na 2GB u ext2 nebude uplne pravdive. Sam pouzivam fileserver s ext2 pro ukladani video souboru o velikostech pres 10GB - a bez potizi...
27.11.2002 10:29 Tom K | skóre: 21
Rozbalit Rozbalit vše ext2 a velikost souboru
Odpovědět | Sbalit | Link | Blokovat | Admin
Mozna by bylo vhodne napsat, ze velikost souboru 2GiB u ext2 bylo u 2.2.x jader, ale u 2.4 uz je tato velikost "trosku" jina (vetsi). Stejne tak maximalni velikost FS nepocita s limity jadra. Jeste u 2.4 lze udelat jen asi 2TiB veky FS. Tento limit je odbouran az od 2.5.42.
echo -n "u48" | sha1sum | head -c3; echo
28.11.2002 08:22 Martin Sedlacek
Rozbalit Rozbalit vše dotaz
Odpovědět | Sbalit | Link | Blokovat | Admin
Chtel bych se zeptat na extenty zminene v clanku. Pokud pouziji jen linearni seznam extentu (rekneme trojic: zacatek, delka, treti polozku jsem uplne nepochopil), tak ciste teoreticky muze nastat situace, kdy bude pocet extentu napr. polovina poctu bloku (kdyz bude prave kazdy druhy obsazeny). A to je docela zavisle na velikosti fs. Prehledl jsem neco?
29.11.2002 11:52 Petr Novický | skóre: 27
Rozbalit Rozbalit vše Re: dotaz
Ta treti polozka ukazuje proste na misto v souboru, kam data v danem extentu patri. No a tu tvou otazku jsem tedy tak docela nepochopil. Jestli jsi to myslel tak, ze bude filesystem, kde bude jeden blok obsazeny, druhy bude prazdny a tohle se bude opakovat... tak to bude samozrejme spatne... ale myslim, ze to je jen teorie.. k takovemu zpusobu naplneni jednoduse za normalnich podminek nedojde.
29.11.2002 16:17 Beda
Rozbalit Rozbalit vše velikos bloku XFS verze 1.1
Odpovědět | Sbalit | Link | Blokovat | Admin
je omezena na linux+x86 architekture velikosti stranky = 4Kbajty nic jineho se nepodari naformatofvat a kdyz jo, tak to stejnak nebude fungovat jako filesystem, ale spis jako hashovaci zarizeni s dalsimi nedokumentovanymi feature ;)
29.11.2002 16:21 Beda
Rozbalit Rozbalit vše velikos bloku XFS verze 1.1
ted me napada, ze novejsi x86 procesory maji vlastne 2 prepinatelny velikosti stranek, ale tusim, ze linux stejne nastavi velikost stranky na 4K a ne na 32K, ci kolik je ta druha velikost stranky.
22.8.2003 11:18 Mirek
Rozbalit Rozbalit vše nerozlišuje velká a malá písmena?
Odpovědět | Sbalit | Link | Blokovat | Admin
Existuje souborový systém pro linux, který nerozlišuje velká a malá písmena v názvu souboru?
4.2.2004 14:45 KIIV
Rozbalit Rozbalit vše nerozlišuje velká a malá písmena?
tusim ze rozlysovani pomoci dakritiky ponekud nezalezi na FS ale na jadre linuxu... BTW to rozlyseni velikosti je rychlejsi nez muset kazdej znak pri hledani a pod. prevest na nejakej treba upcase...

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