ZFS

Linux.fista
Versio hetkellä 3. helmikuuta 2021 kello 16.23 – tehnyt Maakuth (keskustelu | muokkaukset)
Siirry navigaatioon Siirry hakuun

ZFS "Zettabyte File System" on Sunin (nyk. Oracle) Solarista varten kehittämä moderni tallennusjärjestelmä. Vapaista käyttöjärjestelmistä OpenSolaris-pohjaiset sekä FreeBSD tukevat sitä suoraan, ja Linux-porttaus on saatavilla. Avoimen lähdekoodin ZFS-toteutusta ylläpidetään yhtenäisenä OpenZFS-projektina ytimestä riippumatta. ZFS on tiedostojärjestelmän, loogisen taltionhallintajärjestelmän sekä RAID-toteutuksen yhdistelmä.

Mikä ZFS on?

ZFS on tallennusjärjestelmä, jossa on luovuttu perinteisestä tallennusjärjestelmän abstraktiojaosta matalan tason tallenuskerrokseen (levy suoraan tai RAID), loogiseen taltiohallintaan ja tiedostojärjestelmään. Tämä mahdollistaa toimintoja, jotka perinteisellä kerrosjaolla on vaikea toteuttaa, ainakaan suorituskykyisesti. ZFS on ollut jo pitkään tuotantovalmis Solaris-järjestelmissä, ja nykyisen myös sen Linux-porttausta voidaan pitää vakaana.

ZFS tarjoaa datan eheyden varmistuksen, tuen suurille tietomäärille, tilannekuville ja datan kirjoituksen yhteydessä tehtävälle kopioinnille (copy-on-write) sekä tuen itseparantuvalle datalle. ZFS:n lähdekoodi avattiin OpenSolariksen yhteydessä, CDDL:n alaisuudessa. Tämä lisenssi on vaikeuttanut ZFS:n porttaamista Linux-ytimeen, mutta ainakin Ubuntu-jakelu tarjoaa nykyään ZFS-tukea. CDDL:n ja ytimen GPL-lisenssin epäyhteensopivuusongelmaa kierretään Ubuntun tapauksessa toimittamalla ZFS-tuki ytimen moduulina. Ratkaisun juridista kestävyyttä ei ole koeteltu tuomioistuimissa.

ZFS:n ryhmitetty varanto

ZFS käyttää ryhmitetyn varannon (pooled storage) konseptia hallitsemaan fyysistä talletustilaa. Tiedostojärjestelmät on perinteisesti luotu yksittäisen fyysisen laitteen päälle. Loogisen levyn (volume manager) konsepti on otettu käyttöön mahdollistamaan useamman laitteen hyödyntämistä ja tarjoamaan datan redundanttisuutta, jolloin tiedostojärjestelmiä ei tarvitse muuttaa kun hyödynnetään useampaa levylaitetta. Loogisen levyn mallin käyttö lisäsi kompleksisen lisäkerroksen ja lopulta esti joidenkin tiedostojärjestelmien kehittymisen, koska tiedostojärjestelmällä ei ollut kontrollia datan fyysiseen sijoittumiseen virtualisoiduilla taltioilla.

ZFS poistaa täysin loogisen taltionhallinnan. Sen sijaan, että sinut pakotettaisiin luomaan virtualisoitu taltio, ZFS niputtaa laitteet yhdeksi ryhmitetyksi varannoksi. Ryhmitetty varanto kuvaa varannon fyysiset ominaisuudet (laitteiden asettelun, datan redundattisuuden ja niin edelleen) ja toimii mielivaltaisena datavarastona, jolle tiedostojärjestelmät voidaan luoda. Yksittäiset laitteet eivät enää rajoita tiedostojärjestelmiä, mahdollistaen niiden jakaa levytilaa kaikkien varannon tiedostojärjestelmien kesken. Tiedostojärjestelmän kokoa ei tarvitse ennalta päättää, koska tiedostojärjestelmä kasvaa automaattisesti ryhmitettyyn varantoon allokoidun levytilan puitteissa. Kun uusi varanto lisätään, kaikki varannon tiedostojärjestelmät voivat käyttää lisälevytilaa ilman lisätyötä. Ryhmitetty varanto toimii monin tavoin samalla tavalla kuin virtuaalinen muistijärjestelmä: kun muistikampa lisätään järjestelmään, ei käyttöjärjestelmä pakota sinua suorittamaan komentoja muistin konfiguroimiseksi ja ohjaamaan sitä yksittäisten prosessien käyttöön. Kaikki järjestelmän prosessit käyttävät lisämuistia automaattisesti.

ZFS koostuu ryhmitetyistä varannoista. Yksi ryhmitetty varanto sisältää yhden tai useamman levysetin. Levysetti voi olla joko yksittäinen levy, peilattu levypari (tai usempi levy peilattuna keskenään), kolme tai useampi levy sarjoitettuna raidz1:llä (Solariksen vastine RAID-5:lle), tai neljä tai useampi levy sarjoitettuna raidz2:lla (mahdollistaa kahden levyn hajoamisen ilman datan katoamista). Jos varannosta loppuu levytila, niin tarvitsee ainoastaan lisätä uusi levysetti ryhmään ja ZFS laajentaa tiedostojärjestelmän automaattisesti käyttäen saatavilla olevan lisätilan. ZFS tarjoaa myös tuen usealle tiedostojärjestelmälle, joita on helppo muodostaa lennossa, vaikka oma jokaiselle käyttäjälle.

Tapahtumasemantiikat

ZFS on tapahtumallinen tiedostojärjestelmä, mikä tarkoittaa sitä, että tiedostojärjestelmän tila on aina levyllä konsistentti eli ristiriidaton. Perinteiset tiedostojärjestelmät ylikirjoittavat dataa käytössä, joka tarkoittaa sitä, että jos järjestelmän virta katkeaa esimerkiksi sen välillä, jolloin tietolohkoa allokoidaan ja jolloin se linkitetään hakemistoon, tiedostojärjestelmä joutuu epäkonsistenttiin tilaan. Historiallisesti tämä ongelma ratkaistiin fsck-komennon käytön avulla. Tämä komento oli vastuussa läpikäydä ja varmistaa tiedostojärjestelmän tilanteen ja yrittää korjata mahdolliset epäkonsistenttiudet tämän prosessin aikana. Tiedostojärjestelmien epäkonsistenttiuden ongelma on aiheuttanut suurta harmia ylläpitäjille ja fsck-komennon käyttö ei ole koskaan taannut kaikkien mahdollisten ongelmien ratkeamista. Hiljattain tiedostojärjestelmiin on esitelty kirjauksen (journaling) konsepti. Kirjanpitoprosessi tallentaa toiminnot erilliseen kirjanpitoon, joka voidaan tarvittaessa läpikäydä uudelleen turvallisesti mikäli järjestelmä kaatuu. Tämä kirjauksen prosessi aiheuttaa tarpeetonta kuormaa koska data pitää kirjoittaa kahdesti, joka johtaa joukkoon uusia ongelmia, kuten silloin, kun kirjanpitoa ei voida asianmukaisesti läpikäydä uudelleen.

Tapahtumallisessa tiedostojärjestelmässä data hallitaan käyttäen kopio- tai kirjoitussemantiikkaa. Dataa ei koskaan ylikirjoiteta ja jokainen sarja operaatioita on joko täysin kommitoitu tai täysin hylätty. Siten tiedostojärjestelmä ei voi koskaan korruptoitua virtakatkoksen tai järjestelmän kaatumisen seurauksena. Vaikka viimeiset kirjoitetut osat datasta voivat kadota, tiedostojärjestelmä on itsessään konsistentti. Lisäksi synkroninen data (joka kirjoitetaan käyttäen O_DSYNC-lippua) on aina taatusti kirjoitettu ennen jatkamista, joten data ei koskaan pääse katoamaan.

Tarkistussummat ja itse-parantuva data

ZFS:ssä kaikki data ja metadata varmistetaan käyttämällä käyttäjän valittavissa olevia tarkistussumma-algoritmeja. Perinteisissä tiedostojärjestelmissä, jotka tarjoavat tuen tarkistussummilla varmistamiselle, ne on suoritettu lohko-perustaisesti, tarpeettomasti loogisen levyjen hallintakerroksen ja perinteisen tiedostojärjestelmämallin vuoksi. Perinteinen suunnittelu tarkoittaa sitä, että tietyt häiriöt, kuten kokonaisen lohkon kirjoittaminen väärään sijaintiin, voi johtaa virheelliseen dataan, mutta myös tarkistussumman virheisiin. ZFS:ssä tarkistussummat talletetaan siten, että nämä häiriöt tunnistetaan ja niistä voidaan palautua sulavasti. Kaikki tarkistussummien ja datan palauttaminen suoritetaan tiedostojärjestelmän tasolla, ja ne ovat läpinäkyviä sovelluksille.

Lisäksi ZFS tarjoaa tuen itse-parantuvalle tiedolle. ZFS tukee tallennusvarannoja, jotka tarjoavat vaihtoehtoisia tapoja datan redundanssille. Kun epäkelvollinen datalohko tunnistetaan, ZFS noutaa korrektin datan toisesta redundantista kopiosta ja korvaa epäkelvollisen datan sillä.

Skaalautuvuus

Yksi oleellinen suunnitteluvaatimus ZFS:lle on skaalautuvuus. Tiedostojärjestelmä on itsessään 128-bittinen, mahdollistaen 256 tuhatta biljoonaa tavua tallennustilaa. Kaikki metatieto on allokoitu dynaamisesti, joten ei ole tarvetta esivarata tunnustietueita (inodeja) tai muulla tavoin rajoittaa tiedostojärjestelmän skaalautuvuutta kun se on ensimmäisen kerran luotu. Kaikki algoritmit on kirjoitettu skaalautuvuus huomioiden. Hakemistoissa voi olla jopa 2^48 (256 triljoonaa) alkiota ja tiedostojärjestelmien tai tiedostojen lukumäärälle ei ole ylärajaa.

Tilannekuvat

Tilannekuva (snapshot) on vain luettavissa oleva kopio tiedostojärjestelmästä tai taltiosta. Tilannekuvia voidaan luoda nopeasti ja helposti. Aluksi tilannekuvat eivät kuluta lainkaan lisälevytilaa varannosta. Kun data aktiivisessa datasetissä muuttuu, tilannekuva alkaa kuluttamaan levytilaa viittaamalla vanhaan dataan. Tämän seurauksena tilannekuva estää datan vapauttamisen takaisin varantoon.

Yksinkertaistettu ylläpito

Kaikkein tärkeimpänä, ZFS tarjoaa merkittävästi yksinkertaistetun ylläpitomallin. Hierarkkista tiedostojärjestelmän mallia hyödyntämällä, ominaisuuksien periytyminen ja automaattinen liitäntäpisteiden hallinta ja NFS-jakojen semantiikan avulla, ZFS on helppoa luoda ja hallita tiedostojärjestelmiä ilman tarvetta käyttää useita komentoja ja konfiguraatiotiedostojen muokkaamista. Voit helposti asettaa kiintiöitä tai varauksia, kääntää pakkauksen päälle tai pois, tai hallita liitäntäpisteitä lukuisille tiedostojärjestelmille yhdellä komennolla. Voit tutkia tai korvata laitteita opettelematta loogisen levynhallinnan omia komentoja. Voit lähettää ja vastaanottaa tiedostojärjestelmän tilannekuvien tietovirtoja. ZFS hallitsee tiedostojärjestelmää hierarkian kautta, joka sallii sen yksinkertaistetun ominaisuuksien hallinnan, kuten kiintiöt, varaukset, tiivistäminen ja liitospisteet. Tässä mallissa tiedostojärjestelmät ovat keskeisiä kontrollipisteitä. Tiedostojärjestelmät ovat itsessään taloudellisia (vastaavasti kuin hakemiston luonti), joten tiedostojärjestelmän luontia kannustetaan jokaiselle käyttäjälle, projektille, työtilalle ja niin edelleen.

Aiheesta muualla

v  k  m
 Linuxin tukemia tiedostojärjestelmiä
Btrfs | Ext2 | Ext3 | Ext4 | FAT | JFS | NFS | NTFS | ReiserFS | Reiser4 | SMB | SquashFS | XFS