pienoiskuva|Hakemistopuu perustasolta eli juurihakemistosta Unixin kaltaisessa käyttöjärjestelmässä.
Tiedostojärjestelmä on käyttöjärjestelmän toiminto, jolla informaatio järjestetään massamuistiin. Käyttöjärjestelmä tekee abstraktion tallennusmedian fyysisistä ominaisuuksista ja tarjoaa loogisen tallennusyksikön eli tiedoston. Käyttöjärjestelmä hallinnoi tiedostojen sijoittamisen fyysiseen tallennuslaitteeseen, joka on normaalisti haihtumatonta eli tallennettu sisältö säilyy virran katkaisussa ja järjestelmän uudelleen käynnistyksessä. Tiedostojärjestelmä tallettaa tiedostojen lisäksi hakemistorakenteen ja tiedostojen käyttöoikeudet.
Käyttäjän näkökulmasta tiedostojärjestelmä on käyttöjärjestelmän tärkeimpiä ominaisuuksia, joka pitää huolen tietojen säilömisestä pitkäaikaisesti, ja mahdollistaa tietojen järjestämisen kätevällä tavalla.
Fyysisellä massamuistilaitteella tiedostot ja hakemistot voivat olla tallennettuna pieninä paloina eikä jatkuvina kokonaisuuksina. Tiedostojärjestelmä pitää huolen palojen sijainnista, jotta tiedosto näkyy yhtenä jatkuvana kokonaisuutena sitä käsittelevälle ohjelmalle. Tiedostot järjestetään loogiseen hakemistohierarkiaan (hakemistopuu), joka säilötään erikseen tiedostojärjestelmässä.
Tiedostojärjestelmä luodaan tyypillisesti massamuistille tai kiintolevyn osiolle. Windows-käyttöjärjestelmässä osiot näkyvät eri levyasemakirjaimina. Unix-tyyppisissä käyttöjärjestelmissä eri tiedostojärjestelmiä ei oteta automaattisesti käyttöön kuin järjestelmän käynnistyksen vaatimat. Loput tiedostojärjestelmät liitetään () hakemistopuuhun hakemistojen alle. Esimerkiksi hakemisto /home voi olla liitoskohta (mount point) tiedostojärjestelmälle joka sisältää käyttäjien omat tiedot. Myös uudemmat Windows-käyttöjärjestelmät osaavat liittää tiedostojärjestelmiä hakemistopuuhun.
Historia Tiedostojärjestelmät voidaan jakaa sukupolviin seuraavasti: sukupolvi 0: ei järjestelmää, vain tietovirta. Esimerkiksi reikäkortti tai C-kasetti. sukupolvi 1: varhainen hajasaanti. Useampia nimettyjä tiedostoja ilman hakemistoja tai metatietoa. sukupolvi 2: varhainen järjestäminen (hakemistot, kansiot). Paljon tiedostoja. sukupolvi 3: metatiedot kuten käyttäjäoikeudet ja omistajuus. Useiden käyttäjien tuki. sukupolvi 4: journalointi, joka parantaa vikasietoisuutta ongelmatilanteissa ja tekee epätodennäköisemmäksi tietojen menettämisen.
Viidennen sukupolven määrittää sisäänrakennettu taltionhallinta, lohkokohtainen tarkistussumma, itsekorjaava RAID, copy-on-write tilannekuvat, asynkroninen replikointi ja tulevaisuuteen skaalautuvuus.
Tiedostojärjestelmän ikä ei vastaa sen sukupolvea: uudet sulautettuihin järjestelmiin suunnatut tai muut erikoistuneet tiedostojärjestelmät eivät sisällä uudemman sukupolven ominaisuuksia kuten zonefs:ssä.
Ensimmäinen käyttöjärjestelmä, jossa oli hierarkkinen tiedostojärjestelmä, oli mahdollisesti Multics. Multicsin tiedostojärjestelmästä kerrottiin vuonna 1965, jossa mainittiin että tiedosto oli vain lineaarinen taulukko dataa, johon voidaan viitata symbolisellä nimellä. Unixissa oli hierarkkinen tiedostojärjestelmä, joka salli minkä tahansa syvyyden hakemistopuulle.
Hakemistot ja tiedostot
Nykyiset tiedostojärjestelmät sisältävät käyttäjälle näkyviä tiedostoja, jotka organisoituvat hierarkkiseksi (tai joskus jopa verkkomaiseksi) järjestelmäksi hakemistojen () avulla. Teknisestä näkökulmasta hakemistot ovat tiedostoja, joissa on luettelo tiedostoista. Tyypillisesti tiedostot ovat tiedostojärjestelmän kannalta vain yksiulotteinen joukko tavuja ilman tiettyä rakennetta.
Graafisissa käyttöliittymissä hakemistot esitetään usein kansioina () tai laatikostoina ().
Tiedostojärjestelmän perustaso on niin sanottu juurihakemisto (), joka sisältää kaikki tiedostot ja hakemistot. Sisäkkäisistä hakemistoista muodostuu haarautuva, puumainen kokonaisuus, joka usein esitetään ylösalaisin, niin että juurihakemisto on ylhäällä ja hakemistopuu haarautuu alaspäin. Vaihtoehtoisesti juurihakemisto voi olla vasemmalla, jolloin hakemistopuu haarautuu ensisijaisesti oikealle. Tiedostoihin ja hakemistoihin viitataan hakemistopolun avulla eli luettelemalla sisäkkäiset hakemistot tiedostojärjestelmän juuresta lähtien. Tällöin hakemistot tyypillisesti erotetaan toisistaan ja tiedostosta vinoviivalla (/) tai kenoviivalla (\) joskin muitakin tapoja on käytetty: /etc/apt/sources.list A:\ATK\OMAT\Sol.exe x.Y (OpenVMS) Hard Drive:My Folder:My Document ("Classic" Mac OS)
Tiedostojärjestelmä voi sisältää symbolisia tai kovia linkkiä tiedostoihin: tiedostolla voi olla useampia nimiä ja samaan tiedostoon voidaan viitata myös eri hakemistosta. Kovalinkityllä tiedostolla on sama inode riippumatta nimestä ja sitä ei voida tehdä hakemistolle. Symbolinen linkki (myös pehmeä linkki) ei sisällä kohteen tietoja ja kohde voi sijaita myös esimerkiksi verkkolevyllä.
Tilanvaraus
Tiedostojärjestelmän tärkeä ominaisuus on hallita massamuistin vapaata ja varattua tilaa. Tämä koskee tietokoneeseen liitettyä fyysisista mediaa, ei niinkään verkkotiedostojärjestelmiä (niiden tilanvaraus tapahtuu palvelinkoneen massamuistilla).
Tyypillisesti massamuisti jaetaan määräkokoisiin lohkoihin, varausyksiköiksi (). Varausyksiköt ovat tyypillisesti 512 tavun kerrannaisyksikköjä (2x, 4x, 8x, 16x, jne.), mutta niiden tarkka koko riippuu tiedostojärjestelmästä ja sen parametreista. Pieni varausyksikkö lisää levyn kirjanpitoon kuluvaa tilaa ja saattaa hidastaa toimintaa. Suuri varausyksikkö taas tuhlaa tilaa pieniä tiedostoja tallennettaessa. Joissain tiedostojärjestelmissä kierretään ongelma tallentamalla useita pieniä tiedostoja yhteen varausyksikköön tai varatun tilan koko voi vaihdella tarvittaessa, esimerkiksi Btrfs ().
Yksittäisten lohkojen sijaan voidaan käyttää extent -lohkoja suurien jatkuvien osien varaamiseen suurille tiedostoille, jolloin vältetään yksittäisten lohkojen varaamiset: esimerkiksi JFS ja Ext4 tukevat tätä ominaisuutta.
Tiedostot pyritään tallentamaan siten että niille varattu tila on yhtenäinen. Jos näin ei voida tehdä, sanotaan että tiedosto fragmentoituu eli pirstoutuu. Tämä on haitallista etenkin levymuisteilla, koska tiedostoa luettaessa joudutaan lukupäätä siirtämään, mikä vie aikaa ja hidastaa toimintoa. Tilanvaraus on vaikeaa, koska käyttöjärjestelmä ei yleensä tiedä tiedoston kokoa kun sitä aletaan kirjoittaa. Lisäksi vanhoja tiedostoja poistettaessa myös tiedostojärjestelmän tyhjä tila fragmentoituu. Tämä vuoksi joissain käyttöjärjestelmissä on mukana erityinen ohjelma tiedostojärjestelmän tiedostojen tai/ja tyhjän tilan eheyttämiseksi eli defragmentoimiseksi.
Yksi tilanvaraukseen liittyvä erikoiskysymys on vapaan tilan hallinta. Vapaa tila voidaan käsittää tilaksi, joka ei ole minkään tiedoston käytössä (esim. MS-DOSin FAT). Vapaa tila voi myös olla erikoinen tiedosto tai tiedostoja, joista siirretään tilaa muille tiedostoille tarvittaessa. Eräissä käyttöjärjestelmissä voidaan myös rajoittaa osa tilasta vain ylikäyttäjän käyttöön siten että tavallinen käyttäjä ei voi täyttää levyä ja kaataa tärkeitä palvelinohjelmistoja.
Tiedostojärjestelmän tallentamat tiedot
Tiedostojärjestelmä tallentaa tiedostojen data lisäksi myös muita tietoja. Tiedoston nimi on tyypillisin. Lisäksi tiedostojärjestelmä pitää kirjaa tiedostoihin liittyvistä aikaleimoista kuten luontipäivä, muutospäivä tai viimeisin lukupäivä (tiedoston avaus) tai sen tilan muutos. Muita tiedostoihin liittyviä tietoja ovat niiden tyypit ja tietoturvaan liittyvät tiedot, kuten tiedoston omistaja/luoja ja pääsylistat. Tilanvaraukseen liittyviä tietoja ovat tiedoston koko ja sille varatut varausyksiköt.
Käsitteitä Journalointi eli lokinpito tarkoittaa tiedostojärjestelmän kykyä säilyttää tiedon johdonmukaisuus vaikka tietokoneen toiminta katkeaisikin virtakatkokseen tai ohjelmistovirheeseen. Tämä saavutetaan pitämällä kirjaa tehdyistä muutoksista erityisellä tiedostojärjestelmän osalla (loki, engl. journal), josta tiedot päivitetään transaktion päättymisen jälkeen varsinaiseen tiedostojärjestelmään. 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. Osio () on yhdelle massamuistille luotu alue, jolle luodaan erillinen tiedostojärjestelmä kapasiteetin jakamiseksi Tilannekuva () tarkoittaa hetkellisen tilanteen jäädyttämistä, jotta tilanteeseen voidaan palata myöhemmin. Tämä voi myös helpottaa varmennuksien tekemistä. Taltio () viittaa useiden levyjen kapasiteetin yhdistämiseen virtuaaliseksi levyksi, vähintään yhden osion kapasiteetti. Klusteroitu tiedostojärjestelmä tarkoittaa levyjärjestelmää, joka kattaa useiden tietokoneiden levykapasiteetin. Klusteroituja tiedostojärjestelmiä on pääasiassa kahta tyyppiä: hajautettu levyjärjestelmä sekä jaettu levyjärjestelmä. Tiedostojärjestelmä voi rakentua esimerkiksi TCP/IP protokollan päälle tai muiden kuten Fibre Channel, iSCSI, InfiniBand. Klusteroitua tiedostojärjestelmää kutsutaan toisinaan myös verkkotiedostojärjestelmäksi. Verkkotiedostojärjestelmä: katso Klusteroitu tiedostojärjestelmä inode on Unix- ja Unixin kaltaisissa käyttöjärjestelmissä käytetty tietorakenne, joka sisältää tiedostosta kaiken muun tiedon paitsi sen nimen ja varsinaisen sisällön (datan)
Unix-tyyppisten käyttöjärjestelmien tiedostojärjestelmiä Kategoriaan kuuluvat nimenomaan Unix-tyyppisille käyttöjärjestelmille kehitettyjä tiedostojärjestelmiä, joita voidaan tukea myös muunkaltaisilla alustoilla.
Unix Filesystem (UFS)
UFS on Unixin alkuaikojen tiedostojärjestelmä, joka vakiinnutti nykyisen käytännön joka sallii tiedoston käyttää minkä vain määrän tavuja (ei sidottu ”tietueen” kokoon). UFS on levinnyt laajasti eri käyttöjärjestelmiin (BSD, Nextstep, Mac OS X ja Solaris). Alkuaikojen tiedostojärjestelmä oli hyvin yksinkertainen toteuteukselta ja myös hyvin hidas. Siihen on tarpeen vaatiessa kehitetty lisäominaisuuksia kuten journalointi ja soft-updates. Ei yhtä standardia toteutusta: paljon eri variaatioita.https://www.kernel.org/doc/html/v5.5/admin-guide/ufs.html
Fast File System (FFS) Uudelleen toteutettu UFS nimellä ”Fast File System for UNIX” BSD 4.2:ssa.
UFS2
FreeBSD:n tiedostojärjestelmä UFS2
AdvFS Digital Equipment Corporationin AdvFS-tiedostojärjestelmä Digital Unixissa (myöhemmin Tru64 UNIX)
BFS UnixWaren Boot File System
EFS SGIn IRIX käyttöjärjestelmässä, korvasi aiemman tiedostojärjestelmän (System V -tyyppisen) myöhemmin korvattu XFS tiedostojärjestelmällä
Hi Performance FileSystem (HFS) HP-UX käytössä ollut tiedostojärjestelmä (eri kuin Mac OS:n Hierarchical File System) Variaatio alkuperäisestä Unix UFS-tiedostojärjestelmästä
LFS Log-structured File System on Berkeleyssä kehitetty lokirakenteinen tiedostojärjestelmä
QNX4FS, QNX6FS
QNX käyttöjärjestelmän tiedostojärjestelmä
Veritas File System (VxFS) 1988 lähtien perustunut UFS:ään alkuaikoina, myöhemmin BSD FFS useille alustoille, mm. HP-UX
XFS
XFS on Silicon Graphicsin (SGI) kehittämä journaloiva tiedostojärjestelmä, joka on kehitetty SGI:n IRIX-käyttöjärjestelmälle. Täysin 64-bittinen journaloiva tiedostojärjestelmä. Otettiin mukaan viralliseen Linux-kerneliin kehitysversiossa 2.5.36, mutta oli saatavilla ja yleisesti käytössä jo 2.4-sarjan aikana kernelistä 2.4.23 lähtien.
ZFS
Sun Microsystemsin kehittämä alun perin Solaris-käyttöjärjestelmälle. lähdekoodit on julkaistu CDDL-lisenssillä OpenSolaris projektissa vuonna 2010 Oracle Corporation jatkoi kehitystä suljetussa haarassa, jolloin avoimen lähdekoodin versio jatkui OpenZFS projektina
Linuxin tiedostojärjestelmät
Linux osaa käyttää kymmeniä eri tiedostojärjestelmiä virtuaalisen tiedostojärjestelmän (VFS, Virtual File System) abstraktiokerroksen ansiosta.https://www.kernel.org/doc/Documentation/filesystems/