Hlavní navigace

ReiserFS a žurnálování na Linuxu: teorie

20. 10. 2000
Doba čtení: 4 minuty

Sdílet

ReiserFS je moderní žurnálový souborový systém pro Linux, který od roku 1994 vyvíjí skupina programátorů kolem Hanse Reisera. Oproti konvenčním souborovým systémům (Ext2fs, NTFS, apod.) přináší celou řadu téměř revolučních změn.

Již nějaký čas je možné jej nalézt v distribuci SuSE Linuxu, neboť právě tato německá firma sponzoruje jeho další vývoj. Spolehlivost a stabilita ReiserFS je velmi dobrá a snad jen osobní rozpory Hanse Reisera s některými předními vývojáři brání konečnému začlenění ReiserFS do standardní větve jádra.

Disková kapacita je souborovým systémem členěna do většího počtu bloků. Úkolem souborového systému je přidělovat volné diskové bloky souborům. Alokační bloky mívají pevnou velikost a její správná volba je vpravdě alchymistickou otázkou. Příliš velká velikost bloku způsobuje plýtvání diskovou i paměťovou kapacitou, neboť i ten nejmenší soubor obsadí právě jeden blok. Příliš malá velikost má zase negativní vliv na výkon, protože pro načtení jednoho souboru je potřeba přečíst větší počet bloků.

ReiserFS proto nepoužívá bloky jako alokační jednotky pro ukládání vlastních souborů, ale namísto toho definuje uvnitř těchto bloků vlastní stromovou strukturu, ve které ukládá všechny informace, jak o souborech, jejich jménech, adresářích a atributech, tak i samotná data. Tento přístup má podobné důsledky, jako by všechny soubory, adresáře a metadata byly umístěny v jedné velké databázi.

Mezi přednosti ReiserFS patří:

  • Optimální využití diskové kapacity pro malé soubory, kdy více menších souborů může sdílet jeden alokační blok.
  • Optimální využití diskové kapacity pro konce (paty) středních a větších souborů, které je možné také uložit do jednoho bloku
  • Lepší využití kapacity I/O bufferů a keší.
  • Výrazně vyšší výkon při práci s malými soubory – pro načtení více souborů je nutné načíst menší počet bloků → méně čtecích operací.
  • Výkon při čtení větších souborů se přitom nezmenší, neboť větší soubory používají neformátované bloky – podobně jako u ext2.

Samozřejmě nic není černobílé, proto lze nalézt i zápory:

  • Pokud se mění velikost souboru tak, že je potřeba rozložit jej do druhého alokačního bloku, je potřeba provést poměrně časově náročnou fragmentaci. Proto má ReiserFS nižší výkon u souborů s velikostí kolem vel. alokačního bloku (obvykle 4 KiB).
  • Sdružením pat souborů do jednoho bloku dochází k fragmentaci, což nepříznivě ovlivňuje výkon při čtení těchto souborů (tuto vlastnost však lze vypnout, pokud je rychlost důležitější než úspora místa).
  • Zatím nepodporuje diskové kvóty.

Koncepce ReiserFS se snaží odbourat tradiční přístup, kdy pro high-end nasazení je nutné ukládat data do dalších struktur, protože prostředky OS by jej vzhledem k omezení souborového systému nebyly schopny zpracovat. Typickým příkladem jsou vysoce využívané poštovní servery, které doručují poštu pro své uživatele do SQL databáze. To proto, že souborový systém by se jen těžko vyrovnal s obrovským množstvím drobných dat, které by se obtížně prohledávaly a velmi neefektivně ukládaly. Díky ReiserFS a jeho výkonu při přístupu k malým souborům se konec databází přiblížil :-)

Teprve nedávno dostal ReiserFS novou feature – žurnálování. V krátké době ji implementoval Chris Mason a ReiserFS se tak stal prvním dostupným souborovým systémem pro Linux, který podporoval žurnálování a zároveň byl schopen ostrého nasazení. Žurnálování je důležitou vlastností, která je nutná všude tam, kde je požadována vysoká spolehlivost.

Kromě vlastních datových souborů, jsou na každém diskovém zařízení uloženy ještě informace o struktuře souborového systému, kterým se říká metadata. Metadata obsahují například informaci o tom, které bloky tvoří ten který soubor, jak vypadá adresářová struktura apod. Metadata tedy tvoří jakousi infrastrukturu disku. Bez nich by operační systém ztratil přehled o rozmístění souborů a ty by pak vystupovaly jen jako neuspořádané shluky nul a jedniček.

Aplikační servery velmi často provádějí drobné operace se soubory. Vytváří je, zapisují do nich data, přistupují k nim, mění jejich obsah, ruší je. Při všech těchto operacích dochází k modifikacím metadat. Pokud dojde při zápisu metadat k chybě – například výpadek napájení, nebo selhání hardwaru – tak se mohou nacházet v nekonzistentním stavu. Je potřeba použít fsck, nebo jiný program, který zkontroluje stav strukturálních informací a snaží se je opravit. Úspěch je však velmi nejistý a někdy dochází ke ztrátě nebo poškození souborů.

Pokud však server používá souborový systém s podporou žurnálování, tak je situace jiná. Žurnálový systém si na zvláštní část disku zapisuje, jaké změny metadat provádí. Teprve potom zapíše tato data do „živé“ oblasti disku. Když tedy dojde k havárii, tak při kontrole disku žurnálovací obdoba fsck přesně ví, jaké změny se před havárií uskutečnily a dokáže je dokončit, nebo alespoň rekonstruovat původní stav.

Jako vedlejší produkt může působit fakt, že obnova dat na žurnálovacím systému je dokončena mnohem dříve než na souborovém systému bez žurnálu. Důvodem je skutečnost, že fsck nemusí prověřovat celý datový prostor, ale může se bezpečně zaměřit jen na poškozenou oblast. Tato vlastnost je důležitá zejména pro servery s velkými pevnými disky se spoustou souborů. Těm může kontrola fsck trvat často i několik hodin. Díky žurnálu je možné zkrátit dobu výpadku jen na nezbytné minimum.

Samozřejmě nic není zadarmo, vedení žurnálu je pro operační systém práce navíc a žurnálové souborové systémy jsou obvykle pomalejší než souborové systémy bez žurnálu.

V druhé (praktické) části se seznámíme s instalací ReiserFS na server a zjistíme, jak je to s jeho výkonem v porovnání s ext2.

root_podpora

Odkazy:

http://devlinux­.com/projects/re­iserfs/
http://idiom.com/~be­verly/hans_re­sume.html
http://www.li­nux.cz/linuxdoc/HOW­TO/Filesystems-HOWTO.html
http://devlinux­.com/projects/re­iserfs/
http://web.mit­.edu/tytso/www/li­nux/ext2intro­.html
http://www.be­open.com/featu­res/interview­s/reiser_index­.html
http://ftp.sta­vos.cz/pub/mpe/­journal-design.ps.gz

Byl pro vás článek přínosný?

Autor článku