**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
-------

1. 1 2 3  Journaling Filesystem Definition *linfo.org*.  13.4.2007. Viitattu 29.5.2019. (englanniksi)
2. 1 2 3  Steve Best: IBM's Journaled Filesystem  1.1.2003. Linux Journal. Viitattu 29.5.2019. (englanniksi)
3. 1 2 3 4 5 6 7 8  M. Tim Jones: Anatomy of Linux journaling file systems  4.6.2008. IBM Developerworks. Viitattu 29.5.2019. (englanniksi)
4. 1 2 3  Jonathan Corbet: Barriers and journaling filesystems  21.5.2008. Lwn.net. Viitattu 29.5.2019. (englanniksi)
5. 1 2 3  Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Crash Consistency: FSCK and Journaling (PDF) *pages.cs.wisc.edu*. Viitattu 16.2.2017.
6. ↑  Jake Edge: XFS: There and back ... and there again?  1.4.2015. LWN.net. Viitattu 25.5.2019. (englanniksi)
7. ↑  The Third Extended Filesystem *linfo.org*. Viitattu 29.5.2019. (englanniksi)
8. ↑  Andrew Hudson: The BeOS file system, an OS geek retrospective  5.7.2018. Ars Technica. Viitattu 29.5.2019. (englanniksi)
9. ↑  Jim Salter: Bitrot and atomic COWs: Inside "next-gen" filesystems  15.1.2014. Ars Technica. Viitattu 13.11.2019. (englanniksi)
10. ↑  Margo I. Seltzer, Gregory R. Ganger, M. Kirk McKusick, Keith A. Smith, Craig A.N. Soules, Christopher A. Stein: Journaling Versus Soft Updates: Asynchronous Meta-data Protection in File Systems Usenix. Viitattu 29.5.2019. (englanniksi)
11. ↑  Robert Escriva & Emin Gün Sirer: The Design and Implementation of the Wave Transactional Filesystem (PDF) *arxiv.org*. Viitattu 29.5.2019. (englanniksi)
12. ↑  Yige Hu & Zhiting Zhu & Ian Neal & Youngjin Kwon & Tianyu Cheng & Vijay Chidambaram & Emmett Witchel: TxFS: Leveraging File-System Crash Consistency to Provide ACID Transactions (PDF) *cs.utexas.edu*. Viitattu 29.5.2019. (englanniksi)
13. ↑  wrJFS: A Write-Reduction Journaling File System for Byte-addressable NVRAM IEEE. doi:10.1109/TC.2018.2794440.  Viitattu 29.5.2019. (englanniksi)