**XFS** on ettevõtte Silicon Graphics, Inc. (SGI) loodud päevikuga suure jõudlusega failisüsteem. See on vaikefailisüsteem IRIX-is 5.3's[*viide?*] kui ka hilisemates versioonides ning hiljem porditud Linuxi tuuma. XFS-il on efektiivne paralleel-IO kasutus tänu oma grupipõhisele disainile. See avab võimalused IO-le, failisüsteemi läbilaskevõimele, failisüsteemile ja faili suurusele hõlmates mitmeid salvestusseadmeid. Näiteks on XFS kasutusel NASA-s, kus on kaks 300+ terabaidist XFS-failisüsteemi kahes SGI Altixi arhiveerimisserveris. Igaüks neist on ühendatud mitmekordse kiudkanaliga kettamassiiviga.

Ajalugu
-------

Silicon Graphics alustas XFSi arendamist 1993. aastal. Esimese väljalaskeni jõuti IRIX-iga 1994. aastal. Failisüsteem avalikustati 2000. aasta mais GNU General Public License tingimustega ja porditi Linuxi tuuma. Esmane Linuxi distributsiooni XFS tugi lisati 2001. aastal. Hiljem lisandus peaaegu kõikidele Linuxi distributsioonidele.
Esmalt liideti XFS tugi 2.4 Linuxi tuumale (umbes 2002. aastal), mis tegi selle universaalselt kättesaadavaks kõikides Linuxi süsteemis. Gentoo Linux oli esimene, kes pakkus tuge juba 2002. aasta keskpaigas. Arch, Debian, Fedora, openSUSE, Kate OS, Mandriva, Slackware, Ubuntu, VectorLinuxi ja Zenwalk Linuxi installiprogrammid pakkusid XFS-failisüsteemi võimalust. GRUBi mitteühilduvuse tõttu võimaldasid vähesed võtta XFS-failisüsteemi kasutusse kui /boot haakena. Detsembrist 2005 lisandus FreeBSD-le tugi kirjutuskaitstult. Juunis 2006 lisandus eksperimentaalne täistugi, mis oli mõeldud migreerimiseks Linuxi pealt, **mitte juur-sektsiooniks**. Red Hat Enterprise Linux 5.4 64-bit distributsioon sisaldas 2009. aastal Linuxi tuumas tuge, kuid ei olnud kaasatud käsurea tööriistu. CentOS-ist üle toodud tööriistad töötasid või anti need klienditoe poole pöördumisel. Alates 2010. aastast kaasab Red Hat Enterprise Linux 6.0 versioon põhjaliku XFS toe.

Kirjeldus
---------

### Mahutavus

XFS on 64-bitine failisüsteem. See toetab kuni 8 exabaidist fail (263 baiti), kuigi see sõltub operatsioonisüsteemi kehtestatud ploki suurusest. 32-bitiste Linuxi süsteemide korral on süsteemi- kui ka faililimiidiks 16 tebibaiti.

### Päevikupidamine

Päevikupidamine tagab failisüsteemi konsistentsuse voolukatkestuste ja ka süsteemi tõrgete korral. XFS peab päevikut failisüsteemi metaandmete kohta nii, et failisüsteemi uuendused kirjutatakse järjestikpäevikusse enne kui uuendatakse reaalseid ketta plokke. Päevik on kettaplokkidest koosnev ringpuhver, mida kunagi ei loeta tavapärases failisüsteemi operatsioonidega. XFS-failisüsteemi päevik on piiratud maksimaalse ploki suurusega 64 kB ja 128 M miinimumsuurusega, sõltudes siinkohal failisüsteemi ploki suurusest ja kataloogi ploki suurusest. Pannes päeviku välisele andmekandjale, mis on suurem kui maksimaalne määratud päeviku maht, jääb ülejäänud vaba ruum kasutamata. Seda võib hoida failisüsteemis andmetega ühes sektsioonis (sisemine logipäevik) või ka eraldi kettal vähendamaks ketta koormust. XFS-failisüsteemi päevik sisaldab "loogilisi" sissekandeid, milliseid operatsioone on kõrgemal tasemele tehtud (vastupidi "füüsilisele" päevikule, mis hoiab muudetavate plokkide koopiaid iga sissekande kohta). Päeviku uuendusi lisatakse asünkroonselt, vältimaks jõudluse vähenemist. Süsteemi kokkujooksmisel on võimalik sellele eelnenud operatsioonid päevikust välja võtta, mis tagab XFS-failisüsteemi ühtluse. Failisüsteemi parandamine on automaatne ühendamisel ning selle kiirus on sõltumatu failisüsteemi suurusest.

### Eraldusgrupid

XFS-failsüsteem on sektsioneeritud eraldusgruppidesse, mis on failisüsteemis jaotatud võrdsete suurustega lineaarseteks piirkondadeks. Failid ja kataloogid võivad ulatuda eraldusgruppidesse. Iga eraldusgrupp haldab oma infosõlme ja vaba ruumi eraldi, mis võimaldab mastaapsust ja paralleelsust. Mitu lõime ja protsessi saavad samas failisüsteemis samaaegselt toimetada I/O operatsioonidega. See arhitektuur aitab optimeerida paralleel I/O jõudlust mitmeprotsessori või mitmetuumaga süsteemides, kuna ka metandmete uuendused on paralleeliseeritavad. Sisemine sektsioneerimine eraldusgruppidesse on eriti kasulikud, kui failisüsteem ulatub üle mitme füüsilise ketta. Selline kasutus võimaldab alus-salvestuskomponentide optimaalse läbilaskevõime.

### Hargeraldus

Kui XFS-failisüsteem teha hargsalvestatud RAID-massiivile, siis saab kirjeldada hargnenud ketaste arvu. Selliselt tagatakse maksimaalne läbilaskevõime joondades andmete eraldused, andmesõlme eraldused ja sisemise päeviku andmed hargnenud kettale

### Extentil põhinev eraldus

Lihtne B+ puu näide, kus võtmeväärtused 1–7 ühendatakse andmeväärtustega d1-d7. Ühendatud nimekiri (punane) lubab selleks kiiret läbipääsusüsteemi
XFS-failisüsteemi failide all olevad plokid on hallatud muutuva pikkusega extentidega, kus ühte extenti kirjeldatakse ühte või mitme piirneva plokiga. See võimaldab märkimisväärselt lühendada loetelu, võrreldes failisüsteemidega, mis loetlevad kõiki plokkide all olevaid faile eraldi. Ka paljude teiste failsüsteemide ruumieralduse haldus on ühe või mitme plokkorienteeritud – XFS-failisüsteemis on need struktuurid asendatud extent-orienteeritud struktuuriga, sisaldades paari B+ puud igale failisüsteemi eraldusgrupile. Üks B+ puu indekseeritakse vabade exentide pikkuse järgi, millest teine indekseeritakse vabade extentide algusplokkide järgi. Selline kahekordne indekseerimisskeem võimaldab seada failisüsteemis väga efektiivselt vabu extente.

### Eri suurusega plokid

Üks plokk on minimaalne salvestuse suurus failisüsteemis. XFS võimaldab teha failisüsteemi ploki suurusega vahemikus 512 baiti kuni 64 kilobaiti, mis võimaldab failisüsteemi korraldada vastavalt selle kasutuse iseloomule. Kui on teada, et kasutusse tuleb palju väikeseid faile, siis on mõistlik kasutusse võtta väiksed plokid. Suurte failidega tuleks kasutusse võtta suuremad plokid, mis võib suurendada ka jõudlust.

### Hilistatud eraldus

XFS kasutab failieralduseks hilistatud laiska hindamismeetodit. Faili kirjutamisel, kirjutatakse see puhvervahemällu, mitte ei eraldada extent; XFS lihtsalt reserveerib vajaliku koguse plokke andmete jaoks, mis on mälus. Reaalne plokide eraldamine toimub ainult siis, kui andmed kirjutatakse lõplikult kettale. Sellisel juhul paraneb võimalus, et fail kirjutatakse kettale järjestiku plokkidegrupina, mis vähendab fragmenteerumise probleemi ja suurendab jõudlust.

### Hõredad failid

XFS pakub 64-bitist aadressiruumi igale failile, mis võimaldab väga suurt faili suurust ja *auke* failis, mille jaoks kettapinda ei eraldata. Kuna failisüsteem kasutab extentkaarti iga faili jaoks, siis faili eralduskaart hoitakse väike. Seal, kus eralduskaart on infosõlmes väga suur, viiakse eralduskaart B+ puusse, mis võimaldab andmete kiiret ligipääsu igal pool 64-bitises aadressiruumiga failis.

### Laiendatud attribuudid

Tänu laiendatud atribuutide arendusele varustab XFS-failid mitme andmeväljaga. Selline lähenemine lubab failile salvestada mitmeid nime/väärtuse paare. Nimed on 256 baidi pikkused nullotsaga inimloetavad tähemärgid, samas kui nendega seotud väärtused võivad sisaldada kuni 64 kB binaarseid andmeid. Nad on omakorda jaotatud kahte nimeruumi: `root` ja `user`. Laiendatud atribuutide, mis on salvestatud juurnimeruumis, muutmisõigusi omab ainult süsteemiülem. Samal ajal kui user nimeruumi saab muuta iga kasutja, kui tal on selleks failile kirjutusõigus. Laiendatud atribuute saab lisada iga tüüpi XFS infosõlmele, hõlmates sümbolnime, seadmesõlme, kataloogi jne. Käsuliidese utiiliga `attr` on võimalik manipuleerida laiendatud atribuute. `xfsdump` ning `xfsrestore` on teadlikud nendest ja oskavad varundada ja taastada atribuutide sisu. Enamik varundussüsteeme ei ole teadlikud laiendatud atribuutidest.

### Otsene I/O

Rakendustele, mis nõuavad suurt läbilaset kettale, võimaldab XFS otsest I/O arendust, mis lubab kasutajaruumis otsest I/O ligipääsu mitte-puhverdatud I/O'le. Andmed liigutatakse rakenduse puhvri ja ketta vahel kasutades DMA-d. Selline lähenemine lubab täisribalaiusega I/O ligipääsu alusketastele.

### Garanteeritud määraga I/O

XFS-i garanteeritud määraga I/O-süsteem on varustatud rakendusliidesega (API), mis lubab rakendustele failisüsteemis ribalaiust reserveerida. XFS arvutab dünaamiliselt jõudlust, mis on saada alusketastelt ja reserveerib piisava ribalaiuse, et tagada nõutud jõudlus määratud aja jooksul. Selline funktsioon on unikaalne XFS-failisüsteemile. Garandid võivad olla tugevad (hard) või pehmed (soft), esindades kompromissi usalduse ja jõudluse vahel, kuigi XFS lubab ainul tugevat (hard) granti kui alussalvestusüsteem seda toetab. Selline võimalus on kõige enam kasutuses reaalaja rakendustes nagu näiteks voogvideo.

### DMAPI

XFS-is on arendatud DMAPI liides, et toetada Hierarhilist Salvestuse Haldust IRIX-s. Oktoobrist 2010 Linuxi XFS arendus toetas DMAPI-le nõutud kettapealset metaandmeid, kuid kerneli tugi raporteeriti ebastabiilseks. Mõnda aega SGI pakkus OS-i tuuma puud, mis sisaldas DMAPI haaget, kuid selle tugi oli ebaadekvaatselt hooldatud, kuigi kerneli hooldajatel oli kavatsus viia see kaasaegsele tasemele.

### Tõmmised

XFS ei toeta otseselt hetktõmmiseid kuna ta eeldab hetktõmmiste protsessi teostust köitehaldurilt. `xfs_freeze` utiilga on võimalik XFS-failisüsteemi I/O külmutamine, misjärel on võimalik köitehalduril lasta teha hetktõmmis. Pärast tõmmise tegemist taastatakse failisüsteemi I/O normaalseteks operatsioonideks. Hiljem on võimalik hetktõmmis ühendada kirjutuskaitsult varundus eesmärkidel. IRIX-i poolt välja lastud XFS sisaldab XLV-nimelist köitehaldurit. See kettahaldur pole porditud Linuxisse, mistõttu XFS töötab selle asemel standardse LVM-iga. Viimastes Linuxi kernelites on `xfs_freeze` funktsionaalsus arendatud VFS-i kihis, mistõttu rakendatakse seda automaatselt, kui köitehalduri hetktõmmise funktsionaalsus välja kutsutakse. See oli kunagi väärtuslik funktsionaalsus kui EXT3-failisüsteemil puudus seiskamise võimalus, mistõttu kõitehalduril ei õnnestunud teha 'kuuma' hetktõmmist, et varundada tugevalt koormatud andmebaasi. See pole aga enam päevakohane, sest alates Linux kernelist 2.6.9 ext3, ext4, gfs2 ja jfs failisüsteemides on külmutamise võimalus olemas.

### Sidusdefragemntimine

Kuigi XFS-il on extendi-põhine olemus ja hilistatud eraldus märgatavalt parandab failisüsteemi vastupidavust fragmenteerivuse probleemile, on XFS-failisüsteemis defragmenteerimis utiil `xfs_frs`, millega saab defragemnteerida faile nii ühendatud kui ka aktiivses XFS-failisüsteemis.

### Sidusredimensioneerimine

XFS käsurea utiiliga `xfs_growfs` saab XFS-failisüsteemis teostada sidusalt redimensioneerimist. XFS-failisüsteemi saab suurendada järgijäänud kasutamata ruumi arvelt, mida hoiab failisüsteem. Selline võimalus on tüüpiliselt kasutuses koos köite (volume) haldusega kui muidu sektsiooni hoidev failisüsteem tuleb suurendada eraldi. XFS-failisüsteemi ei saa (seisuga augustist 2010) kahandada, kuid on ka arutaud teisi võimalusi.

### Loomulikud varundus-/taasteutiliidid

XFS pakub käsurea utiile `xfsdump` ja `xfsrestore` abistamaks varundada XFS-failisüsteemis olevaid andmeid. `xfsdump` utiil varundab XFS-failisüsteemi infosõlmede järjestuses. Kontrastiks traditsioonilisele UNIX-i failisüsteemile, kus failisüsteem peab olema enne tõmmise tegemist lahti ühendatud, garanteerimaks tõmmise konsistentsust, on XFS-i utiilid võimelised tegema tõmmist, kui süsteem on kasutuses. See ei ole sama mis hetktõmmis, kuna tõmmise tegemise ajal faile ei külmutata. XFS-i tõmmised ja taasted on ka taasalustatavad, neid saab katkestada ilma raskusteta. Mitmelõimeline `xfsdump` tagab kõrge varundus jõudluse sellega, et tükeldab tõmmise mitmeks vooks, millised omakord on võimalik saata erinevatesse sihtkohtadesse. Mitme vooga võimekus ei ole veel täielikult Linuxisse porditud.

### Kvoodid

XFS-i kvoodid lülitatakse sisse failisüsteemi ühendamise ajal. See on oluline erinevus võrreldes teiste failisüsteemidega, kus tuleb kvoodid eraldi sisse lülitada `quotaon` käsurea utiiliga.

Jõudluse kaalutlused
--------------------

### Kirjutusbarjäär

XFS-failisüsteemid ühendatakse "kirjutusbarjääridega". See lisaomadus põhjustab vahemälu tagasikirjutamist alusseadmetele teatavatel aegadel, eriti oluline on siin aga XFS-logifaili salvestamine. Antud lisaomadus on mõeldud tagamaks failisüsteemi ühtsust ning selle kasutus on seadmepõhine – mitte kõikide andmekandjate riistvara ei toeta puhvermälu tühjendamise taotlusi. Kui XFS-failisüsteemi kasutatakse loogilise RAID-ketta peal, millel on akutoitega varundatud puhvermälu, siis see põhjustab jõudluse märgatavat jõudluse kahanemist kuna failisüsteem pole teadlik, et vahemälu hoitakse eraldi ning kui kontroller aktsepteerib vahemälu tühjendamise nõuet, siis kirjutatakse füüsilisele kettale andmeid märgatavalt tihedamalt kui reaalselt vajalik. Võimalike toiteprobleemide puhul esinevate andmekadude vältimiseks tuleks sel juhul failisüsteem ühendada `nobarrier` võtmega.

### Päeviku asetus

Vaikimisi tehakse XFS-failisüsteem "sisemise" logiga, mis paneb failisüsteemi päeviku samale aluskettale, kus on failisüsteemi andmed. Kirjutamised failisüsteemi varasematele päeviku metaandmete uuendustele võib kaasa tuua konflikti. Üldjuhul, kui on väike koormus, ei esine sellist konflikti tihti, et mõjutada jõudlust. Süsteemides kus esineb peamisel juhuslik kirjutamine nagu näiteks andmebaasiserverites, põhjustab see jõudluse probleemi tänu just I/O konfliktile. Täiendav tegur, mis suurendab selle probleemi raskust, on päeviku sünkroonne kirjutamine – need peavad enne seotud andmete kirjutamist olema lõpetatud.

Optimaalse failisüsteemi jõudluse saavutamiseks, pakub XFS võimalust panna failisüsteemi päevik eraldi füüsilisele seadmele, millel on oma I/O tee. See nõuab vähest füüsilist pinda ja kui on olemas sünkroonsete kirjutamiste jaoks madala hilistusega I/O tee, siis võib see failisüsteemiga töötamisel anda märgatavat jõudluse kasvu. Sellisele lahendusele on sobiv kandidaat SSD seadmed või RAID süsteemid, millel on oma tagasikirjutuse vahemälu, ehkki viimasel juhul väheneb andmete kaitstus elektritoite probleemide puhul. Välise logi kasutamine nõuab lihtsalt failisüsteemi ühendamist `logdev` võtmega, viidates selle võtmega failisüsteemi päeviku hoidmiseks sobivale seadmele.

Puudused
--------

* XFS-failisüsteemi suurust ei saa vähendada
* XFS-failisüsteemi metaandmete operatsioonid on ajalooliselt olnud aeglasemad kui teistes failisüsteemides, näidates nõrgemat tulemust selliste operatsioonidega nagu näiteks suure hulga failide kustutamine. See metaandmete jõudluse probleem on olnud RedHati XFS failisüsteemi arendaja Dave Chinneri koodipaiga aluseks. See lisavõimalus on tuntud ka kui "ajatatud logimine". Selline tegevus tõstab metaandmete kallal tehtavate operatsioonide kiirust märgatavalt, lükates need peaaegu täielikult mällu. See koodipaik on lisatud pealiini kernelisse kui ka eksperimentaalne lisavõimalus versioonis 2.6.35 ning märgitud sobivaks stabiilsena kernelis 2.6.37. Alates kernelist 2.6.39 on see vaikimisi failisüsteemi päeviku pidamise meetod. 2010 aastal, arendajate poolt tehtud võrdlustest näitas, et selline lahendus väljendab samasugust jõudlust kui ext4 väikesearvuliste tegumite puhul ning paremat jõudlust suurearvuliste tegumite puhul.

Viited
------

1. ↑  XFS - File System
2. ↑  "Arhiivikoopia". Originaali arhiivikoopia seisuga 13. september 2008. Vaadatud 5. detsembril 2012.`{{netiviide}}`: CS1 hooldus: arhiivikoopia kasutusel pealkirjana (link)
3. ↑  "Arhiivikoopia". Originaali arhiivikoopia seisuga 8. märts 2016. Vaadatud 5. detsembril 2012.`{{netiviide}}`: CS1 hooldus: arhiivikoopia kasutusel pealkirjana (link)
4. ↑  "Arhiivikoopia". Originaali arhiivikoopia seisuga 15. veebruar 2013. Vaadatud 3. detsembril 2012.`{{netiviide}}`: CS1 hooldus: arhiivikoopia kasutusel pealkirjana (link)
5. ↑  Daniel Robbins (1. jaanuar 2002). "Common threads: Advanced filesystem implementor's guide, Part 9, Introducing XFS". *Developer Works*. IBM. Vaadatud 6. november 2011.
6. ↑  Daniel Robbins (1. aprill 2002). "Common threads: Advanced filesystem implementor's guide, Part 10, Deploying XFS". *Developer Works*. IBM. Vaadatud 6. november 2011.
7. ↑  "Bug 250843 -grub-install hangs on xfs". *Bug report*. Redhat.com. 4. mai 2009. Vaadatud 6. november 2011.
8. ↑  "Bug 521173 -xfsprogs is missing in RHEL-5.4". *Bug report*. Redhat.com. 24. mai 2010. Vaadatud 6. november 2011.
9. ↑  "3. File Systems". *Red Hat Enterprise Linux 6.0 release notes*. November 2010. Vaadatud 6. november 2011.
10. ↑  Christoph Hellwig (3. oktoober 2010). "Re: Linux and DMAPI". SGI. Originaali arhiivikoopia seisuga 27. september 2011. Vaadatud 6. november 2011.
11. ↑  Linux questions about freezing Ext3
12. ↑  Linux questions on LVM snapshots for database backup
13. ↑  Freeze Feature Commit to Linux kernel[*alaline kõdulink*]
14. ↑  "Bitubique.com". Originaali arhiivikoopia seisuga 1. aprill 2009. Vaadatud 3. detsembril 2012.
15. ↑  XFS.org, FAQ
16. ↑  "SGI.com". Originaali arhiivikoopia seisuga 7. juuni 2011. Vaadatud 3. detsembril 2012.
17. ↑  Dave Chinner (23. detsember 2010). "Improving Metadata Performance By Reducing Journal Overhead". *XFS.org wiki*. Originaali arhiivikoopia seisuga 6. oktoober 2011. Vaadatud 6. november 2011.
18. ↑  Dave Chinner (24. mai 2010). "Re: PATCH 0/12 xfs: delayed logging V6". Originaali arhiivikoopia seisuga 5. detsember 2011. Vaadatud 6. november 2011. `{{cite web}}`: eiran tundmatut parameetrit `|mailinglist=` (juhend)

Välislingid
-----------

* XFS.org, community wiki
* SGI.com, a high-performance journaling filesystem (vaadatud 10. jaanuar 2019)
* title=XFS: Recent and Future Adventures in Filesystem Scalability
* crossmeta.org, community port of XFS on Windows
* Data recovery from XFS with XFS Data Recovery Studio
* XFS for Linux Administration (SGI Document Number: 007-4273-003) (vaadatud 10. jaanuar 2019)

| * v
* r
Failisüsteemid |
| --- |
| Ketta | 

|  |
| --- |
| 
AdvFS  • Btrfs  • CrossDOS  • exFAT  • ext (ext2  • ext3  • ext3cow  • ext4)  • FAT (FAT12  • FAT16  • FAT16B  • FAT32)  • Files-11  • HFS Plus  • Minix  • Next3  • NILFS (NILFS2)  • NSS  • NTFS  • NWFS  • OneFS  • PFS  • QFS  • QNX4FS  • ReFS  • ReiserFS (Reiser4)  • Reliance  • Reliance Nitro  • SpadFS  • UBIFS  • Unix File System  • Veritas File System (VxFS)  • VFAT  • XFS  • Xsan  • ZFS |
| Optiline andmekandja | 
HSF  • ISO 9660  • ISO 13490  • UDF |
| Välkmälu / Pooljuhtketas | 
FAT  • exFAT  • CHFS  • TFAT  • FFS2  • F2FS  • JFFS  • JFFS2  • LogFS  • NVFS  • YAFFS  • UBIFS |
| Jagatud | 
Coda  • CXFS  • GFS2  • Google Failisüsteem  • OCFS2  • QFS  • Xsan |

 |
| Spetsialiseerunud | 

|  |
| --- |
| 
cramfs  • FUSE  • SquashFS  • UnionFS |
| Pseudo ja virtuaalsed | 
configfs  • devfs  • procfs  • specfs  • sysfs  • tmpfs  • WinFS |
| Krüpteeritud | 
EncFS  • EFS  • ZFS |

 |