Žurnálovací systém souborů
Žurnálovací systém souborů zapisuje změny, které mají být v počítačovém systému souborů provedeny, do speciálního záznamu nazývaného žurnál (anglicky journal). Žurnál je obvykle realizován jako cyklický buffer a jeho účelem je ochránit data na pevném disku před ztrátou integrity v případě neočekávaných havárií (výpadek napájení, neočekávané přerušení vykonávaného programu, pád systému apod.).
V obecném smyslu označujeme žurnálováním vytváření libovolných podrobných záznamů o prováděné činnosti (logů).
Popis funkce
[editovat | editovat zdroj]Souborové systémy jsou velmi komplexními datovými strukturami. Při změně v souborech nebo adresářích je nutné vykonat řadu jednotlivých (atomických) operací, což může vést k problému se souběhem (anglicky race condition). Sérii jednotlivých operací, které je potřeba provést, nazýváme transakce.
Při přerušení transakce může dojít k tomu, že data na disku ztratí integritu (jsou narušeny vazby, které data spojují ve smysluplný celek). Uvedení dat do opětovné integrity znamená naplánovanou transakci dokončit nebo se vrátit k původnímu stavu před započetím transakce. Žurnálování umožňuje velmi rychle a bezpečně uvést souborový systém do konzistentního stavu.
Souborové systémy, které žurnálování nepodporují, je nutné kompletně zkontrolovat speciálním programem (např. scandisk, fsck), což je časově velmi náročná operace a může to navíc způsobit ztrátu dostupnosti dat, které nebyly havárií postiženy přímo.
Princip žurnálu
[editovat | editovat zdroj]Žurnál je pro ochranu prováděné transakce využíván následujícím způsobem:
- do žurnálu je zapsáno, co a kde se bude měnit
- je provedena vlastní série změn
- do žurnálu je zapsáno, že operace byla úspěšně dokončena
- záznam v žurnálu je zrušen
Pokud dojde v kterémkoliv okamžiku k přerušení, je možné pomocí dat uvedených v žurnálu uvést systém souborů do konzistentního stavu buď návratem zpět ke stavu před započetím transakce nebo dokončením přerušené transakce.
Optimalizace
[editovat | editovat zdroj]Žurnál je obvykle umístěn na speciálním místě souborového systému a je umístěn tak, aby zabíral souvislý prostor (srovnej s fragmentací). Může to být i obyčejný soubor (ext3), avšak obvykle je označen jako systémový a je běžnému uživateli skryt, aby nemohl být snadno poškozen.
Pro zvýšení výkonu je někdy možné umístit žurnál na jiný disk. Speciálním případem jsou systémy souborů, které jsou navrženy tak, že žurnál nepotřebují a odstraňují tak problém dvojitého zápisu na disk. Jsou to například tzv. soft updates v UFS nebo souborové systémy založené na principu zápisu do logu.
Žurnálování metadat
[editovat | editovat zdroj]Žurnálování snižuje výkonnost souborového systému při zápisu dat, protože všechna data musí být zapsána dvakrát (nejprve do žurnálu, pak do souborového systému). Podstatné zvýšení výkonu je možné dosáhnout žurnálováním pouze metadat (tj. informací, které popisují umístění dat na disku), které umožní velmi rychlou opravu souborového systému po pádu systému, avšak neřeší problém pádu samotných programů. Navíc může dojít k nekonzistenci mezi daty a metadaty.
Je-li použito žurnálování pouze metadat (např. u NTFS nebo implicitní stav u ext3), může se stát, že při prodlužování souboru je při pádu systému ochráněno zvětšení délky souboru a alokace potřebných datových bloků na disku, avšak samotný zápis není dokončen. V takovém případě by v souboru byla v místě prodloužení pouze náhodná data. Proto operační systém v tomto případě zajišťuje, že zápis dat na disk proběhne před zápisem metadat. Některá zařízení však mohou pro zvýšení výkonu pořadí zapisovaných dat měnit (technologie NCQ u pevných disků), což opět přináší výše zmíněné riziko, které musí operační systém ošetřit (např. čekáním na potvrzení zápisu od pevného disku nebo nuceným vylitím cache pevného disku).
Souborové systémy se žurnálováním
[editovat | editovat zdroj]Žurnálování podporuje v systémech Windows NT souborový systém NTFS (FAT žurnálování nepodporuje), v systému Mac OS X podporuje žurnálování souborový systém HFS+, v Linuxu pak ext3, ext4, ReiserFS, XFS (od firmy SGI), JFS (od firmy IBM), v systému Solaris je to ZFS atd.