Failisüsteem

**Failisüsteem** on andmestruktuuride, algoritmide ja tarkvara kogum, mille eesmärk on salvestusseadmele andmete organiseeritud paigutamine, et need oleksid hiljem leitavad ja kättesaadavad. Failisüsteem määrab failide paiknemise ja struktuuri füüsilisel kettal, seab piirangud failinimedele ja nende suurustele. Failisüsteem võimaldab faile salvestada, kustutada, nimetada, organiseerida, pakkida ja määrata failidele juurdepääsuõigusi.

## Tööpõhimõte

Failisüsteemi üks tähtsamaid ülesandeid on organiseerida loogilisi faile füüsilisel salvestusseadmel (enamasti kõvaketas). Kõvakettal olev ruum on jaotatud sektoriteks, traditsiooniliselt on sektori suuruseks 512 baiti. Kuna enamasti ei ole failisüsteemil nii väikeste andmeüksustega praktiline töötada, rühmitab failisüsteem sektoreid klastriteks. Klaster on mingi täisarvuline hulk kõvakettal järjest asuvaid sektoreid, 512-baidise sektori puhul on levinumad klastri suurused baitides 2048 (4x512), 4096 (8x512), 8192 (16x512), 16 384 (32x512) ja 32 768 (64x512). Suurema klastri kasutamisel väheneb suuremate failide puhul killustumine, kuid väiksemate failide puhul suureneb raisatud ruum (*slack*) – kui fail on väiksem, kui klastri suurus, ei täideta klastris vabaks jäänud ruumi uue failiga, vaid see jääbki tühjaks. Kui fail on suurem, kui klastri suurus, jaotub fail mitmesse klastrisse.

Sõltuvalt failisüsteemist kasutab see erinevaid süsteemseid andmestruktuure, nagu tabelid ja puud (täielikult hargnenud graafid), et hoida andmeid failide kohta. Tähtsamad andmed on failinimede nimikiri, kataloogipuu kirjeldus, failide asukohad salvestusseadmel (näiteks FAT-failisüsteemi puhul on salvestatud klastri number, millelt see fail algab) ning tabel tühjadest klastritest. Lisaks hoitakse ka nimekirja ketta vigastest sektoritest ja tabelit failide omanike ja juurdepääsuõiguste kohta.

## Failinimed
Faile eristatakse nende failinimede järgi. Tavaline failinimi koosneb kahest osast – nimest ja laiendist. Mõned failisüsteemid, näiteks Mac OSi HFS+, peidavad faili tüübi info otse failisüsteemi andmestruktuuridesse ning lihtsalt ei näita tavakasutajale failinimelaiendeid. Teine tähtis erinevus failisüsteemide juures on suur- ja väiketähtede eristamine. Windowsi failisüsteemid ei erista suur- ja väiketähti, Unixi-laadsed süsteemid eristavad.

## Metaandmed
Metaandmed (*metadata*) on failidega kaasas käivad andmed, mis ei sisaldu alati otseselt faili enda sees, aga kirjeldavad antud faili. Metaandmed võivad sisaldada faili suurust, viimase muutmise kuupäeva, faili loomise kuupäeva, faili omanikku, ligipääsuõigusi ja palju muud. Failide kohta käivad metaandmed paiknevad tavaliselt failisüsteemis ega ole kasutajale otseselt kättesaadavad.

## Hierarhilisus
Enamus tänapäeva failisüsteemidest on hierarhilise failipaigutusega. Windowsi failisüsteemide puhul on hierarhia tipuks kettatähis (mis vastab kindlale partitsioonile), millele järgnevad alamkataloogid ja kõige lõpuks fail ise. Näide: C:\Windows\explorer.exe, mis tähistab faili "explorer.exe", mis asub kataloogis "Windows", mis asub omakorda C: kettal. Unix-laadsetel süsteemidel on juurkataloog "/", ülejäänud partitsioonid ja kataloogid paigutuvad selle alla. Näide: /usr/bin/python, mis tähistab faili "python", mis asub kataloogis "bin", mis asub kataloogis "usr".

## Fragmentatsioon
Failisüsteem salvestab parimal juhul faile järjest ehk andmed paiknevad salvestusseadmel ühes piirkonnas ning neid on võimalik järjest lugeda. See on tähtis andmete lugemise jõudluse tagamiseks, sest tavalisel kõvakettal kulub lugemispea ümberpaigutamiseks aega. Fragmentatsioon on nähtus, kus andmed ei ole paigutatud järjest, vaid mitmes tükis füüsilise salvestusseadme eri piirkondades. See esineb tavaliselt siis, kui on täidetud järgnevad tingimused:
# partitsioonil on vähe vaba ruumi;
# partitsioonil on palju faile ning kustutatud faile. Uue faili salvestamisel valitakse vaba piirkond, mis võib olla ka piirkond, mis on vabastatud mõne faili kustutamisega. Kui uus fail on suurem, kui kustutatud fail, ei mahu ta piirkonda ära ning fail tuleb jaotada tükkideks, proovides ülejäänud faili mõnda teise vabasse piirkonda paigutada. Fragmentatsiooniga võitlemiseks tuleb faile füüsilisel salvestusseadmel ümber paigutada – väiksed vabad piirkonnad täidetakse väikeste eelnevalt hõredalt paigutatud failidega ning sellega vabastatakse suuremaid piirkondi mahukamate failide jaoks.

## Tööriistad
Failisüsteemil on tavaliselt temale komplekt programme failisüsteemi loomiseks ja hooldamiseks. Enamasti on need programmid kaasas operatsioonisüsteemiga. Failisüsteemi loomisel tuleb partitsioon vormindada (format), selle käigus kustutatakse partitsioonilt kõik andmed ning luuakse failisüsteemi süsteemsed andmestruktuurid. Kuna andmed kettal aja jooksul fragmenteeruvad on tihti kaasas ka fragmentatsiooniga võitlemiseks mõeldud programm (defragmenter). Eraldi programmid on olemas ka failisüsteemi suurendamiseks ja kahandamiseks. Enamus failisüsteemide jaoks on olemas ka andmete taastamiseks kasutatavad programmid, juhuks kui failisüsteemi andmestruktuurid saavad kahjustada ning andmetele ei ole enam võimalik ligi pääseda. Failide taastamise programme ei ole tavaliselt operatsioonisüsteemiga kaasas, need tuleb osta kolmandalt osapoolelt lisatasu eest.

## Failisüsteemid
### FAT

#### FAT16
FAT16 on lihtne failisüsteem, mille lõplik versioon loodi 1987. aastal Compaq poolt. Selle eelis on väga hea tugi kõigilt tähtsamatelt operatsioonisüsteemidelt. Suurimad miinused on piirang partitsiooni suurusele (kuni 2 GB) ja failinimede pikkustele (kuni 11 tähemärki, millest 3 on failinimelaiend). Failinime pikkuse piirangu ületamiseks on kasutusel VFAT nimeline failisüsteemilaiendus, mis võimaldab kuni 255-tähemärgilisi failinimesid.

#### FAT32
FAT32 on edasiarendus FAT16-st. Peamine edasiminek on maksimaalse klastrite arvu suurendamine, mistõttu on võimalik kasutada partitsioone suurusega kuni 2 TB. Sarnaselt FAT16-ga on FAT32 erinevate operatsioonisüsteemide poolt hästi toetatud. Hea toe ja suure lubatud partitsiooni suuruse tõttu eelistavad seda failisüsteemi ka mälupulkade ja mälukaartide tootjad – enamus müüdavatest mälupulkadest ja -kaartidest on vormindatud FAT32-failisüsteemiga. FAT32 suurim probleem on faili maksimaalse suuruse piirang – 4 GiB.

### NTFS
NTFS (*New Technology File System*) on Microsofti väljatöötatud failisüsteem, mille eesmärk oli vabastada Microsofti operatsioonisüsteemid FAT-failisüsteemi piirangutest. See on kasutuses alates Windows NTst ning on toetatud kõigi sellest uuemate Windowsi versioonide poolt (sh XP, Vista, Windows 7, Windows Server). Kuna Microsoft ei ole NTFS-i täielikku tehnilist spetsifikatsiooni välja andnud, ei ole teiste tootjate operatsioonisüsteemides kaugeltki nii head NTFS-i tuge, kui on tema eelkäijale FAT-ile. Siiski on nii Linuxil (alates 2.2) ja Mac OS'l (alates 10.3) sisseehitatud NTFS-i lugemise tugi. Lisaks on nii Mac OS-ile kui ka Linuxile olemas tasuta tarkvara ntfs-3g, mis suudab NTFS-failisüsteeme lugeda ja kirjutada.

NTFS uuendused võrreldes FAT-iga on maksimaalne failinimi kuni 255 tähemärki (salvestatakse UTF-16 kodeeringus), journaling (muudatuste logi, mille abil saab andmekao ohtu oluliselt vähendada), laiendatud failiatribuudid, sisseehitatud failide pakkimise võimalus, kvoodid (kettaruumi jaotamine kasutajate vahel) ning faili-, ja partitsioonisuuruse piirangute kaotamine (piir on 16 EB).

### Ext-failisüsteemid
Ext- (*extended filesystem*) failisüsteeme kasutatakse traditsiooniliselt Linuxis. Praegu on kasutuses versioonid ext2, ext3 ja ext4. Ext2, nendest kõige vanema ja lihtsama suurim puudus on journaling toe puudumine, mis vähendab failisüsteemi usaldusväärsust. Ext2 edasiarendus on ext3, mis on täielikult tagasiühilduv ext2-ga. See lisab journaling toe ning võimaluse failisüsteemi suurust käigu pealt muuta. Ext4 on võrdlemisi hiljutine (Linux 2.6.28) täiendus ext3-le. Ext4 vähendab suuremate failide puhul fragmentatsiooni ja parandab lugemiskiirust, lisab journal'le kontrollsummad ning võimaldab kiiremat failisüsteemi kontrollimist.

Kõik ext-failisüsteemid ühilduvad POSIX-standardi failide ligipääsuõiguste süsteemiga. Windows ja OS X oskavad lugeda ja kirjutada ext2- ja ext3-failisüsteeme lisatarkvara abil (Windowsi puhul näiteks ext2 ifs, Mac OS X puhul fuse-ext2).

### HFS+
HFS Plus on Apple'i väljatöötatud failisüsteem, mis on peamiselt kasutuses Mac OS operatsioonisüsteemiga. Alates Mac OS X versioonist 10.2.2 on toetatud ka failisüsteemi journaling. HFS+ lubab failinimesid pikkusega kuni 255 tähemärki ning salvestab nimesid UTF-16 kodeeringus. Toetatud on ka UNIX-stiilis failide ligipääsuõigused ja ACL ligipääsuõigused. HFS+ oskavad lugeda nii Mac OS, Linux kui ka Windows (MacDrive või Bootcamp driveritega).

### Võrgufailisüsteemid
#### NFS
NFS (*Network File System*) on võrguprotokoll, mille abil on võimalik NFS-serveriga ühenduda ja sealsetele failidele ligi pääseda samamoodi kui need asuksid kohalikus arvutis. NFS toimimiseks peab serveris töötama NFS-i tarkvara, mis on konfigureeritud faile välja jagama ja kliendi arvutil peab olema ühendus serverisse ning juurdepääsuõigused failidele. Kasutatakse enamasti Unixi-laadsete operatsioonisüsteemidega, kuid on toimib ka Windowsi ja Mac OS-i keskkonnas.

#### SMB
SMB (*Server Message Block*) on võrguprotokoll, mille peamine kasutusala on pakkuda võrgu kaudu juurdepääsu failidele, printeritele ja teistele seadmetele. Sarnaselt NFS-iga võimaldab see kasutada võrgus asuvaid faile samamoodi, nagu need asuksid kohalikus arvutis. SMB on kasutusel näiteks Microsoft Windows Networkis – sellel põhineb Windowsi arvutite üle võrgu failivahetus. Sellele on ka avatud lähtekoodiga implementatsioon Samba.

### ISO9660
ISO9660 on ISO poolt standardiseeritud optiliste andmekandjate jaoks mõeldud failisüsteem. Selle eesmärk on muuhulgas tagada tugi võimalikult laial valikul operatsioonisüsteemidel. ISO9660 kasutab väga lihtsaid failiatribuute ning ei toeta ligipääsuõiguste määramist. Standardi järgi on failinimedele väga ranged piirangud – ametlikult on lubatud ainult suured tähed, numbrid, alakriipsud ja punkt, kusjuures tühikud ei ole lubatud ja punkt ei tohi paikneda failinime alguses ega lõpus. Piiratud on ka failisuurused – suurim fail saab olla 4 GB failimahuga, mõned vanemad operatsioonisüsteemid suudavad lugeda vaid 2 GB suurusi faile. Nendest piirangutest möödahiilimiseks on kasutusel mitmed ISO9660 laiendused, levinumad on Joliet (lubab pikki failinimesid UTF-16 kodeeringus) ja Rock Ridge (säilitab POSIX faili juurdepääsuõigused).

### UDF
UDF (*Universal Disk Format*) on avatud spetsifikatsiooniga failisüsteemi standard, mille eesmärk on asendada ISO9660 ja/või FAT-failisüsteem. See toetab suuri partitsioone (kuni 8 TB), suuri faile (kuni 16 EB), pikki failinimesid (254 tähemärki, Unicode'i kodeering), tõrkehaldust ja metaandmete kontrollsummasid. See on ühilduv ka optiliste ketastega ning enamik uustest DVD- ja Blu-ray-plaatidest kasutabki UDF-i.

## Viited

## Välislingid
*"Linux System Administrators Guide"
*"Wikipedia: Comparison of file systems"
*"Wikipedia: Journaling filesystem"