Naplózó fájlrendszer

A Wikipédiából, a szabad enciklopédiából

A naplózó fájlrendszer egy olyan fájlrendszer, amely naplózza a változásokat egy speciális naplóba (journal) (amely általában egy ciklikus napló, egy direkt erre fenntartott területen), mielőtt beírná azokat a valódi fájlrendszerbe.

Alapok[szerkesztés]

Egy fájlrendszer tekinthető egy nagyon nagyméretű adat struktúrának; aminek aktualizálása, a katalógusok és adattartalmak megváltoztatása általában több, egymástól független fizikai írással lehetséges. Az egymástól független írások miatt verseny állapot alakulhat ki, amely megszakítása (például feszültségkimaradás miatti rendszerleállás) érvénytelen köztes állapotba hozhatja az adatstruktúrát.

Például, a Unix fájlrendszerében a fájl törlés két lépésben hajtódik végre:

  1. A bejegyzést eltávolítja a könyvtárból
  2. A fájl inodeját úgy állítja, hogy az eddig használt terület a szabad területként legyen nyilvántartva

Ha a leállás előtt csak az első lépés fejeződik be, akkor lesz egy árva inode, és sehová sem tartozó adatterület. Ha a második lépés fejeződik be az első előtt, akkor viszont a nem átállított inode miatt esetleg egy másik fájl adatát írja felül, vagy olvas olyan adatot, ami nem a fájlhoz tartozik.

Egy ilyen helyzet után egy lehetséges mód a visszaállításra a teljes adat struktúra módszeres végigvizsgálata, és – ha felismerhető és javítható – a hibás állapot, akkor javítással az inkonzisztencia megszüntetése. Ezt a gyakorlatot követi a Unix-like operációs rendszereknél a fsck program. Az eljárás egy nagy fájlrendszer esetében nagyon lassú, és még lassabb is lehet, ha hálózati tárolókról van szó, ahol adott az I/O sávszélesség.

Másik mód a helyes állapot visszaállítására, ha a fájlrendszer egy nyilvántartást vezet a szándékozott változásokról, időben előre haladva. A visszaállításnál csak újra kell olvasni a nyilvántartást, és addig kell végrehajtani a naplózott változtatásokat, amíg a fájlrendszer újra konzisztens nem lesz. Ilyenkor a változásokról (elemi szinten, láthatatlanul) elmondható a következők valamelyike:

  • Eredetileg sikeresen végrehajtódott.
  • A visszaállítás alatt teljesen végrehajtódott.
  • Nem kell végrehajtani.

Néhány fájlrendszer megengedi, hogy a nyilvántartása bővülhessen, darabolódjon vagy újra allokálódjon, mint egy szabályos fájl; de a legtöbb esetben egy fix, folyamatos területre rögzítik a változásokat, egy láthatatlan, speciális fájlba, így biztosítva, hogy ne változhasson a mérete, ha az egységet csatlakoztatják.

Egy fizikai napló egy bitről bitre azonos másolata annak a blokknak, ami később lesz felírva. Az ext3 például ilyet használ. Egy logikai napló egy olyan napló, amiben a metaadat változások vannak feljegyezve, egy nagyon tömör formátum szerint. Ezzel növelhető a teljesítmény, jelentősen csökkenthető a napló olvasandó/irandó adatmennyisége, például egy metaadat intenzív művelet (egy nagy katalógus ág törlése) esetében is. Az XFS logikai naplózást használ.

A log-strukturált fájlrendszerekben önmaga, a fájlrendszer a napló. 2005-ig ugyan nem volt olyan általánosan használt fájlrendszer, amely log-strukturált lett volna, bár a WAFL és a Reiser4 néhány technológiát a log-strukturált fájlrendszerektől kölcsönöztek.

Az adatbázisok a naplózó fájlrendszerek technikái közül a legszigorúbbakat használják, hogy minden körülmények között megőrizhessék az adat integritásukat.

Csak metaadat naplózás[szerkesztés]

A naplózás hatása erősen érezhető a fájlrendszer teljesítményén, mivel minden adat (legalább) két írást igényel. A csak metaadat naplózás egy kompromisszum a teljesítmény és a megbízhatóság között, mert így csak a fájl metaadat változásait kell naplózni (amelyek általában kisebbek, és ezért kevesebb teljesítményt vesznek el). Ez a megoldás biztosítja, hogy a visszaállítás gyorsabb lehet egy rendszerkiesést követő újra csatlakoztatásnál, viszont fennáll a lehetősége az adatok sérülésének, mivel a nem naplózott fájl adatok és a naplózott metaadatok közötti szinkronitás megszűnhet.

Például, a Unix fájlrendszerében egy fájl bővítés (append) tipikusan három lépést igényel:

  1. Meg kell növelni a fájl hosszát a hozzá tartozó inode-ban.
  2. Le kell foglalni a bővítéshez szükséges területet a rendelkezésre álló szabad területből.
  3. A bővítéshez tartozó adatokat át kell írni a fájl – új – területére.

Csak metaadat naplózás esetében, egy rendszerkiesés után nem lehet tudni, hogy a 3. lépés megtörtént-e, mivel azt nem naplózták. Ha a 3. lépés nem történt meg, de az 1-es és 2-es lépést a rendszerkiesés után újra végrehajtották, akkor a fájl mérete megnövekszik egy ki nem használt területtel, aminek a tartalma bármi is lehet.

A gyorsítótárba (cache) írást a legtöbb operációs rendszer használja az átbocsátóképessége növelésére. A gyorsítótárból a tényleges írás általában valamilyen elevátor rendezés vagy hasonló eljárás szerint történik. A nem megfelelő sorrend szerinti írás kockázatának elkerülésére a fájl adatainak írását olyan sorrendbe kell rendezni, hogy azok írása a hozzájuk tartozó metaadatok írása előtt megtörténjen. Ennek megvalósítása nagyon trükkös lehet esetenként, mivel az írás vezérléséhez koordináció szükséges az operációs rendszer kernelje, a fájlrendszer és a gyorsítótár között.

A Soft updates a *BSD rendszerek egy lehetséges megoldása a naplózás "szétosztására", de biztosítani kell, hogy az összes diszkre írás sorrendje olyan legyen, hogy a fájl sohase kerülhessen inkonzisztens állapotba, illetve inkonzisztencia csak akkor léphessen fel, ha a tároló téveszt. A visszaállítás nagyon egyszerűen megoldható, mivel egy háttérben futó alkalmazás végigmegy a fájlrendszeren, és az "árva" adatot (ami nem tartozik sehová) egyből a szemétgyűjtőbe (felszabadítható, nem használt adat- vagy tároló terület) teheti.