# Journalointi

**Journalointi** on tiedostojärjestelmän mekanismi, jossa tiedostojärjestelmä ylläpitää erikoistunutta tiedostoa (loki, *journali*), jolla voidaan korjata epäjohdonmukaisuudet tiedostojärjestelmässä. Tarve korjauksille johtuu yleensä tietokoneen epänormaalista sammuttamisesta virransyötön häiriön tai ohjelmistovian seurauksena.

Tiedostojärjestelmät vaativat useita vaiheita yksinkertaiseen kirjoitusoperaatioon:

* lohkojen varaaminen tiedolle
* lohko-osoittimien päivittäminen
* tiedoston koon päivittäminen
* itse tiedon kirjoittaminen

Järjestelmän keskeyttäminen ennen operaatioiden valmistumista johtaa levyjärjestelmän korruptoitumiseen (ei-eheään tilaan).

Journaloinnin tavoite on tehdä tiedostojärjestelmästä vikasietoisempi ja välttää korruptoitumista. Menetelmä toimii pitämällä journalissa tiedossa muutoksia, jotka ovat tulossa tiedostojärjestelmään, jolloin journalin tietoihin palaamalla vältetään järjestelmän korruptoituminen. Ennen muutoksia levyllä oleviin tietoihin journaliin kirjoitetaan tehtävät muutokset. Kun journaliin on tallennettu täydet tiedot (merkitään ”commit record” tiedolla) voi käyttöjärjestelmä tehdä päivitykset levylle omaan tahtiin. Koska kiintolevyillä on suuret välimuistit ja ne voivat järjestää operaatiota uudelleen on journalin päivityksestä oltava erityisen huolellinen.

Journalointia kutsutaan myös *etukäteen kirjoitettavaksi logiksi* (engl. *write-ahead logging*). Journalointi voidaan toteuttaa fyysisenä tai loogisena: fyysisessä kaikki kirjoitetaan kahdesti, joka voi olla hidasta, kun taas loogisessa journaloinnissa vain metadata kirjoitetaan journaliin.

Journalointia voidaan käyttää eri toimintatiloissa:

* *writeback mode* -tilassa vain metatieto journaloidaan ja varsinaiset datalohkot kirjoitetaan suoraan paikalleen levylle
* *ordered mode* -tilassa vain metatieto journaloidaan mutta datalohkot kirjoitetaan ennen metatiedon journalointia
* *data mode* -tilassa sekä metatieto että varsinainen data journaloidaan, jolloin kaikki tieto kirjoitetaan kahdesti

Ilman journalointia tiedostojärjestelmän eheyttäminen erilaisilla työkaluilla, kuten fsck Unixin kaltaisissa järjestelmissä, on hitaampaa eikä välttämättä yhtä tuloksellista.

## Historia

IBM esitteli JFS:n (nykyisin nimellä JFS1) vuonna 1990 AIX-käyttöjärjestelmään ja myöhemmin sen toinen versio JFS2 julkaistiin AIXille, OS/2:lle ja Linuxille. Silicon Graphics esitteli XFS:n vuonna 1994 IRIX:lle ja myöhemmin myös Linuxille. Amigalle julkaistiin Smart File System vuonna 1998, mutta julkaistiin myöhemmin myös Linuxille. Ext3 kehitettiin ext2:n laajennuksena ja on ollut tuettuna Linuxissa vuodesta 2001 lähtien. Ext4 on kehitetty taaksepäin- ja eteenpäinyhteensopivana.

BeOSille kehitettiin BFS vuonna 1997 ja julkaistiin myöhemmin Haiku-käyttöjärjestelmälle.

Journalointia pidetään neljännen sukupolven tiedostojärjestelmän ominaisuutena.

## Tiedostojärjestelmät

Journalointia tukevia tiedostojärjestelmiä on kehitetty lukuisia, eräitä esimerkkejä:

* AdvFS (Digital)
* Btrfs (Oracle)
* Ext3 ja Ext4
* JFS (IBM)
* NTFS (Microsoft)
* Smart File System
* Veritas File System
* XFS (SGI)
* ZFS (Sun)

## Vaihtoehtoiset ratkaisut

Menetelmälle on kehitetty myös vaihtoehtoja kuten ”pehmeät päivitykset” (*Soft Updates*).

Useat eri tahot ovat esitelleet konsepteja transaktiopohjaisista tiedostojärjestelmistä.

Haihtumattomaan muistiin tallennuksen yhteydessä tarve journaliin kirjoitukselle on vähäisempi ja on kehitetty useita vaihtoehtoja kirjoitusoperaatioiden vähentämiseen.

## Katso myös

* ACID
* Tietokanta

## Lähteet