Tiedostojärjestelmä

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 (engl. allocation unit). Varausyksiköt ovat tyypillisesti 512 tavun kerrannaisyksikköjä (2x, 4x, 8x, 16x, jne.), mutta niiden tarkka koko riippuu massamuistin koosta. 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 (engl. block suballocation).
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.

Linuxin käyttämät tiedostojärjestelmät

Linux osaa käyttää kymmeniä eri tiedostojärjestelmiä VFS (Virtual File System) -abstraktiokerroksen ansiosta. Listassa (paitsi minix) nimenomaan Linuxille kehitettyjä tiedostojärjestelmiä.

Minix, xiafs

Linuxin alkuperäinen tiedostojärjestelmä oli Minix-käyttöjärjestelmän tiedostojärjestelmä. Seuraavan sukupolven tiedostojärjestelmiä olivat muun muassa xiafs ja extfs, jotka ovat nykyään jääneet käytöstä.

ext2fs, ext3fs, ext4fs

Versiot ovat yhteensopivia siltä osin kuin uusia ominaisuuksia ei käytetä, esimerkiksi voi ext3fs:n liittää ext2fs:nä, jolloin journali ei sillä kerralla ole käytössä.

Ext2

Ext2 korvasi aiemman Extfs:n vuonna 1993.
Ext2 on vielä suosittu esimerkiksi Flash- ja USB-muisteilla.

Ext3

Ext3 kehittyi laajennuksena aiemmalle Ext2:lle vuonna 1998.
Ext3 tukee journalointia.

Ext4

Ext4 kehittyi edelleen Ext3:sta ja julkaistiin Linux versiossa 2.6.28 vuonna 2008.
Ext4 tukee journalointia.

Btrfs

Btrfs on uutta kehitystä edustava tiedostojärjestelmä suunniteltu tukemaan copy-on-write mekanismia. 
Tiedostojärjestelmän kehityksen aloitti Oracle Corporation Linuxia varten vuonna 2007.
Btrfs tukee levyjärjestelmiä 16 eksatavuun saakka, joko suurina levyinä tai levyryhminä.
Tiedostojärjestelmän käyttäjiä ovat mm. Facebook.
Myös Jolla Oy:n Sailfish OS käyttää tiedostojärjestelmää.

FUSE

Linuxin FUSE (engl. Filesystem in Userspace) mekanismin avulla tuetaan tiedostojärjestelmiä, joiden lähdekoodit eivät lisenssiltään yhteensopivia suoraan ytimeen liittämiseksi.
Ubuntu käyttää tätä NTFS tuen kanssa.