ext4

Suuri tiedostojärjestelmä ext4-tiedostojärjestelmä voi tukea jopa 1 exbibietin (EiB) kokoisia volyymeita ja jopa 16 tebibietin (TiB) kokoisia yksittäisiä tiedostoja vakiomuotoisella 4 kiibin lohkokoolla. Tiedostojen, hakemistojen ja tiedostojärjestelmän enimmäiskokorajoitukset kasvavat vähintään samassa suhteessa tiedostojärjestelmän lohkokoon kanssa aina ARM- ja PowerPC/Power ISA -suorittimissa käytettävissä olevaan 64 KiB:n lohkokokoon asti. Extents Extents korvaa ext2:n ja ext3:n käyttämän perinteisen lohkokartoitusjärjestelmän. Laajuus on vierekkäisten fyysisten lohkojen alue, mikä parantaa suurten tiedostojen suorituskykyä ja vähentää pirstaloitumista. Yksittäinen ext4:n extent voi kartoittaa jopa 128 MiB yhtenäistä tilaa 4 KiB:n lohkokoolla. Suoraan inode-koodiin voi olla tallennettuna neljä extenttiä. Kun tiedostossa on enemmän kuin neljä extenttiä, loput extentit indeksoidaan puuhun. Taaksepäin yhteensopivuus ext4 on taaksepäin yhteensopiva ext3:n ja ext2:n kanssa, mikä mahdollistaa ext3:n ja ext2:n liittämisen ext4:ksi. Tämä parantaa hieman suorituskykyä, koska tiettyjä ext4-toteutuksen uusia ominaisuuksia voidaan käyttää myös ext3:n ja ext2:n kanssa, kuten uutta lohkojen jakoalgoritmia, vaikuttamatta levyn muotoon. ext3 on osittain yhteensopiva eteenpäin ext4:n kanssa. Käytännössä ext4 ei kytkeydy ext3-tiedostojärjestelmänä suoraan laatikosta, ellei tiettyjä uusia ominaisuuksia oteta pois käytöstä sitä luotaessa, kuten ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink ja ^extra_isize. Pysyvä esivaraus ext4 voi varata ennalta levytilaa tiedostoa varten. Useimmissa tiedostojärjestelmissä tämä tehdään siten, että tiedostoon kirjoitetaan nollat, kun se luodaan. ext4:ssä (ja joissakin muissa tiedostojärjestelmissä, kuten XFS:ssä) voidaan käyttää Linux-ytimen uutta järjestelmäkutsua fallocate(). Varattu tila olisi taattua ja todennäköisesti yhtenäistä. Tällä tilanteella on sovelluksia median suoratoistoon ja tietokantoihin. Viivästetty allokointi ext4 käyttää suorituskykyistä tekniikkaa nimeltä allocate-on-flush, joka tunnetaan myös nimellä viivästetty allokointi. Tämä tarkoittaa, että ext4 viivästyttää lohkojen jakamista, kunnes tiedot on siirretty levylle. (Sitä vastoin jotkin tiedostojärjestelmät varaavat lohkoja välittömästi, vaikka tiedot menisivätkin kirjoitusvälimuistiin.) Viivästetty allokointi parantaa suorituskykyä ja vähentää pirstaloitumista, koska se allokoi tehokkaasti suuremman datamäärän kerrallaan. Rajoittamaton määrä alihakemistoja ext4 ei rajoita alihakemistojen määrää yksittäisessä hakemistossa, paitsi itse hakemiston luontaisella kokorajoituksella. (ext3:ssa hakemistossa voi olla enintään 32 000 alihakemistoa.) Suurempien hakemistojen ja jatkuvan suorituskyvyn mahdollistamiseksi ext4:ssä Linux 2.6.23:ssa ja uudemmissa versioissa otetaan oletuksena käyttöön HTree-indeksit (erikoistunut versio B-puusta), jotka mahdollistavat hakemistojen tallentamisen 2-tasoiseen HTree-indeksiin jopa noin 10-12 miljoonaan merkintään asti ja hakemiston koon rajoittamisen 2 gigatavuun 4 kiibin lohkokoolla, riippuen tiedostonimen pituudesta. Linux 4.12:ssa ja sitä uudemmissa versioissa largedir-ominaisuus mahdollisti 3-tasoisen HTree-indeksin ja yli 2 GB:n hakemistokoot, jolloin yhteen hakemistoon mahtuu noin 6 miljardia merkintää. Journalin tarkistussummat ext4 käyttää tarkistussummia journalissa luotettavuuden parantamiseksi, koska journal on yksi levyn käytetyimmistä tiedostoista. Tällä ominaisuudella on sivuhyöty: se voi turvallisesti välttää levyn I/O-odotuksen journaloinnin aikana, mikä parantaa hieman suorituskykyä. Journalin tarkistussummat ovat saaneet inspiraationsa Wisconsinin yliopiston tutkimusartikkelista IRON-tiedostojärjestelmät (erityisesti kappaleesta 6, jonka nimi on ”transaktioiden tarkistussummat”), ja siihen on tehty muutoksia IRON-tiedostojärjestelmän suorittamien yhdistettyjen transaktioiden toteutuksessa (alun perin Sam Naghshineh ehdotti sitä RedHat-huippukokouksessa). Metatietojen tarkistussummatointi Vuonna 2012 julkaistusta Linux-ytimestä 3.5 lähtien Nopeampi tiedostojärjestelmän tarkistus ext4:ssä allokoimattomat lohkoryhmät ja inode-taulukon osiot on merkitty sellaisiksi. Tämän ansiosta e2fsck voi ohittaa ne kokonaan ja tiedostojärjestelmän tarkistamiseen kuluva aika lyhenee huomattavasti. Linux 2.6.24 toteuttaa tämän ominaisuuden.

fsck-ajan riippuvuus inode-lukumäärästä (ext3 vs. ext4)

Monilohkoallokaattori Kun ext3 liittää tiedostoon, se kutsuu lohkoallokaattoria kerran jokaiselle lohkolle. Näin ollen, jos on useita samanaikaisia kirjoittajia, tiedostot voivat helposti pirstaloitua levyllä. ext4 käyttää kuitenkin viivästettyä allokointia, jonka ansiosta se voi puskuroida dataa ja allokoida lohkoryhmiä. Näin ollen monilohkoallokaattori voi tehdä parempia valintoja tiedostojen jakamisesta levylle yhtenäisesti. Multiblock-allokaattoria voidaan käyttää myös silloin, kun tiedostot avataan O_DIRECT-tilassa. Tämä ominaisuus ei vaikuta levyn muotoon. Parannetut aikaleimat Kun tietokoneet yleensäkin nopeutuvat ja Linuxia käytetään yhä enemmän kriittisissä sovelluksissa, sekuntiin perustuvien aikaleimojen tarkkuus ei enää riitä. Tämän ratkaisemiseksi ext4 tarjoaa nanosekunneissa mitattuja aikaleimoja. Lisäksi aikaleimojen sekuntikentän merkittävimpiin bitteihin lisätään kaksi bittiä laajennetusta aikaleimakentästä, jotta vuoden 2038 ongelmaa voidaan lykätä vielä 408 vuodella. ext4 lisää myös tuen luomisen aikaleimoille. Mutta kuten Theodore Ts’o huomauttaa, vaikka inodeen on helppo lisätä ylimääräinen luontipäivämääräkenttä (ja siten teknisesti mahdollistaa näiden aikaleimojen tukeminen ext4:ssä), on vaikeampaa muuttaa tai lisätä tarvittavia järjestelmäkutsuja, kuten stat() (joka luultavasti edellyttäisi uutta versiota) ja erilaisia kirjastoja, jotka ovat riippuvaisia niistä (kuten glibc). Nämä muutokset vaativat monien projektien koordinointia. Siksi ext4:n tallentama luontipäivämäärä on tällä hetkellä vain Linuxin käyttäjäohjelmien käytettävissästatx()API:n kautta. Projektikiintiöt Tuki projektikiintiöille lisättiin Linux-ytimeen 4.4 8.1.2016. Tämä ominaisuus mahdollistaa levykiintiörajojen osoittamisen tietylle projektitunnukselle. Tiedoston projektitunnus on 32-bittinen numero, joka on tallennettu jokaiseen tiedostoon, ja se periytyy kaikille tiedostoille ja alihakemistoille, jotka on luotu sellaisen emohakemiston alle, jolle on annettu projektitunnus. Tämä mahdollistaa kiintiörajojen määrittämisen tietylle alihakemistopuulle riippumatta tiedoston käyttöoikeuksista, kuten käyttäjä- ja projektikiintiöistä, jotka riippuvat UID:stä ja GID:stä. Vaikka tämä muistuttaa hakemistokiintiötä, tärkein ero on se, että sama projektitunnus voidaan määrittää useille ylimmän tason hakemistoille, eikä se ole tiukasti hierarkkinen. Läpinäkyvä salaus Tuki läpinäkyvälle salaukselle lisättiin Linux-ytimeen 4.1 kesäkuussa 2015. Laiska alustaminen Lazyinit-ominaisuus mahdollistaa inode-taulujen siivoamisen taustalla, mikä nopeuttaa alustamista uutta ext4-tiedostojärjestelmää luotaessa. Se on ollut saatavilla vuodesta 2010 lähtien Linux-ytimen versiossa 2.6.37. Kirjoitusesteet ext4 ottaa oletusarvoisesti käyttöön kirjoitusesteet. Se varmistaa, että tiedostojärjestelmän metatiedot kirjoitetaan oikein ja järjestyksessä levylle, vaikka kirjoitusvälimuistit menettäisivät virtaa. Tästä aiheutuu suorituskykykustannuksia erityisesti sovelluksille, jotka käyttävät paljon fsynciä tai luovat ja poistavat monia pieniä tiedostoja. Jos levyillä on akkukäyttöinen kirjoitusvälimuisti, esteiden poistaminen käytöstä (vaihtoehto ’barrier=0’) voi turvallisesti parantaa suorituskykyä.

Vastaa

Sähköpostiosoitettasi ei julkaista.