Journalointi

Wikipediasta
Siirry navigaatioon Siirry hakuun

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

Tiedostojärjestelmät vaativat useita vaiheita yksinkertaiseen kirjoitusoperaatioon:[2]

  • 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).[2]

Journaloinnin tavoite on tehdä tiedostojärjestelmästä vikasietoisempi ja välttää korruptoitumista.[3] 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.[3] Ennen muutoksia levyllä oleviin tietoihin journaliin kirjoitetaan tehtävät muutokset.[1][4] Kun journaliin on tallennettu täydet tiedot (merkitään ”commit record” tiedolla) voi käyttöjärjestelmä tehdä päivitykset levylle omaan tahtiin.[4] Koska kiintolevyillä on suuret välimuistit ja ne voivat järjestää operaatiota uudelleen on journalin päivityksestä oltava erityisen huolellinen.[4]

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

Journalointia voidaan käyttää eri toimintatiloissa:[3]

  • 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.[5]

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.[2][3] Silicon Graphics esitteli XFS:n vuonna 1994 IRIX:lle ja myöhemmin myös Linuxille.[3][6] Amigalle julkaistiin Smart File System vuonna 1998, mutta julkaistiin myöhemmin myös Linuxille.[3] Ext3 kehitettiin ext2:n laajennuksena ja on ollut tuettuna Linuxissa vuodesta 2001 lähtien.[3][7] Ext4 on kehitetty taaksepäin- ja eteenpäinyhteensopivana.[3]

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

Journalointia pidetään neljännen sukupolven tiedostojärjestelmän ominaisuutena.[9]

Tiedostojärjestelmät

[muokkaa | muokkaa wikitekstiä]

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

Vaihtoehtoiset ratkaisut

[muokkaa | muokkaa wikitekstiä]

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

Useat eri tahot ovat esitelleet konsepteja transaktiopohjaisista tiedostojärjestelmistä.[11][12]

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

  1. a b c Journaling Filesystem Definition linfo.org. 13.4.2007. Viitattu 29.5.2019. (englanniksi)
  2. a b c Steve Best: IBM's Journaled Filesystem 1.1.2003. Linux Journal. Viitattu 29.5.2019. (englanniksi)
  3. a b c d e f g h M. Tim Jones: Anatomy of Linux journaling file systems 4.6.2008. IBM Developerworks. Viitattu 29.5.2019. (englanniksi)
  4. a b c Jonathan Corbet: Barriers and journaling filesystems 21.5.2008. Lwn.net. Viitattu 29.5.2019. (englanniksi)
  5. a b c 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)