Failipaigutustabel

**Failipaigutustabel** (**FAT** – *File Allocation Table*) on failisüsteemi ehitus, mille puhul operatsioonisüsteem paigutab failid klastritesse. Iga fail kasutab minimaalselt üht klastrit. Klastrid (loogilised üksused) koosnevad fikseeritud suurusega sektoritest (füüsilised üksused) ja on adresseeritud n-bitiste kannetega aadressiruumi (tabelisse), kus n on sõltuvalt FAT versioonist 12 (FAT12), 16 (FAT16) või 32 bitti (FAT32).

Failipaigutustabel sisaldab iga kettal oleva faili algusklastri kannet, mis omakorda sisaldab viita järgmisele failiga seotud klastrile ja nii edasi, kuni faililõpu klastrini.

1996. aastast kuulub FAT-i patent Microsoftile.

Diskettide jaoks on failipaigutustabel standardiseeritud standardiga ISO/IEC 9293.

## Ajalugu
FAT töötas välja Microsoft aastal 1977. Esiti oli see mõeldud Microsofti Stand-alone Disk Basic interpreter-ile. Hiljem kohandati see Microsofti Disk Operating System-ile ehk DOS-ile.

### FAT12
FAT12 viitab failisüsteemile, mida kasutas esimene IBM PC 1981. aastal. FAT12 kasutab klastrite adresseerimiseks 12-bitist aadressiruumi, võimaldades seega adresseerida kokku 4096 klastrit. Kuivõrd FAT peamine kasutus oli flopiketastel ja DOS ei toetanud suuremaid kui 16 MB kettaid, oli FAT12 maksimaalne võimalik suurus 16 MB (4 kB suuruse klastriga) esialgu piisav.

PC/MS-DOS 1.x ja 2.x kasutavad ainult FAT12, kõik hilisemad DOS-i ja Windowsi versioonid tekitavad automaatselt FAT12-failisüsteemi ketastele, mis on väiksemad kui 16 MB.

Üks probleem FAT12-ga oli see, et DOS ei toetanud veel hierarhilisi kaustu, mis seadis piirangu maksimaalsele failide hulgale. Teine ja võib-olla tõsisemgi probleem oli riknenud sektoritega, mis muutsid kettad kasutuskõlbmatuks, kui nad asusid ketta reserveeritud alal, mitte failidele ettenähtud alal, mispuhul sai terve klastri nö. väljalülitada.

FAT12 on praegugi kasutusel flopiketastel ja ketastel, mis on väiksemad kui 16 MB, sest 12-bitine failipaigutustabel jätab rohkem ruumi andmetele.

### FAT16
FAT16 ilmus 1984. aastal koos MS-DOS 3.0-ga.

FAT16 sarnaneb väga FAT12-ga, kuid on selle erinevusega, et klastrite aadressiruumi suurendati 16 bitini, võimaldades adresseerida 65 536 klastrit. Sealjuures jäi maksimaalne sektorite arv samaks. Nii saavutati väiksemad klastrid (512 baiti), mis muutis kettakasutuse oluliselt efektiivsemaks.

Näiteks: varem võttis paarisajabaidine fail (eeldusel, et klaster on 4 kB) kettal 4 kB, raisates seega kordi rohkem ruumi kui faili kettal hoidmiseks tegelikult vaja. Arvestades, et toona olidki failid enamasti paarisajabaidised, oli tegemist väga olulise edasiminekuga FAT-failisüsteemi arengus.

MS-DOS 3.0 toetas FAT16 puhul kuni 32 MB kettaid, kuid MS-DOS 4.0 ja varem Compaq DOS 3.31 lisas toe ketastele, mille klastris paikneb 64 512-baidist sektorit ehk teisisõnu: 32 kB klastrid, mis võimaldas kasutada maksimaalselt 2 GB FAT16 kettaid. Windows NT ja Windows XP toetavad FAT16-ga ka suuremat, 64 kB klastrit ja seega kuni 4 GB kettaid.

FAT12- ja FAT16-failisüsteemid piiravad vormindamisel juurkataloogi kannete arvu. Ajaloolistel põhjustel on see 512. Kanneteks loetakse faili- ja katalooginimesid traditsioonilises 8.3 failinime vormingus.

FAT16 suurim eelis teiste failisüsteemide ees on ühilduvus üsna erinevate operatsioonisüsteemidega, näiteks Windows 95/98/Me, OS/2, Linux ja mõned UNIX-i versioonid.

### FAT32
FAT32 on FAT-failisüsteemi täiendatud versioon, mida esimesena toetas Windows 95B (tuntud ka kui Windows 95 OEM Service Release 2). FAT32-e toetab ka Windows 98/Me ja Windows 2000/XP. Windows 95 originaal väljalaskel, ning kõigil NT-del puudub FAT32 tugi.

Peamine põhjus FAT32 loomise taga oli püüd kasutada kettaruumi efektiivsemalt. Nimelt, ketta mahutavuse kasvades pidi FAT16-failisüsteem kasutama üha suuremaid klastreid (kuna klastrite koguarv oli piiratud), mis muutis kettakasutuse ebaefektiivseks. FAT32 kasutab väiksemaid klastreid (4 kB klastrid kuni 8 GB ketastel), sest võimalik klastrite arv on oluliselt suurem.

Kuigi võiks eeldada, et FAT32 kasutab 32-bitist adresseerimist, pole see tegelikult päris nii. Kasutusel on vaid esimesed 28 bitti igast 32-bitisest kandest ning 4 bitti on reserveeritud. Seega on kokku 268 435 456 adresseeritud klastrit, millest osad on reserveeritud. Klastrid on suurustega 1 sektor (512 baiti) kuni 64 sektorit (32 kB), lubades kuni 2 TB ketast.

Faili võimalik maht FAT32 kettal on 4 GB miinus 1 bait, mis tähendab, et suuremate failide kasutamiseks peab kasutama mõnd muud failisüsteemi, näiteks NTFS-i.

## Struktuur
### Ülevaade

FAT-failisüsteem koosneb neljast sektsioonist:
***Reserveeritud sektorid**. Esimene reserveeritud sektor (sektor 0) on alglaadur, milles sisaldub failisüsteemi info ja tavaliselt ka alglaade kood. Lisaks on seal väli, mis määrab reserveeritud sektorite arvu.
***FAT #1** ja **#2**. Identsed failipaigutustabelid, mis kaardistavad andmete sektoris olevad klastrid. Klastrite kanded sisaldavad üht viiest väärtusest: järgmise klastriahelas oleva klastri number, klastriahelat lõpetav klaster, riknenud klaster, reserveeritud klaster, kasutamata klaster. Kahe identse tabeli mõte on selles, et kui esimene rikneb, on võimalik kasutada teist. Üldiselt tuleb FAT #2 kasutada harva.
***Juurkataloog**. Sisaldab infot juurkataloogis paiknevate failide ja kataloogide kohta. FAT12 ja FAT16 puhul omab fikseeritud suurust, mis piirab failide ja kataloogide hulka. FAT32 puhul nimetatud piirang puudub ja juurkataloogi algus on sisuliselt andmesektori algus.
***Andmed**. Selles piirkonnas asuvad failid ja kataloogid. Piirkond on jagatud eelmääratletud suurusega klastriteks, millele viitab FAT #1 ja FAT #2 tabel.

### Alglaadimissektor
Kõikidel FAT versioonidel on esimese 36 baidi raames ühine struktuur. Alates 36. nihkest läheb FAT32 lahku FAT12/FAT16-st.

### Failisüsteemi info sektor

Failisüsteemi info sektor võeti kasutusele FAT32-ga. Sektori number kettal on määratud alglaadimise sektori väljas BPB_FSInfo (reeglina on see: 1, mis järgneb alglaade sektorile).

### Failipaigutustabel

Partitsioon on jagatud identseteks klastriteks, mille suurus varieerub kasutatava FAT-failisüsteemi piires. Iga fail hõlmab üht või enamat sellist klastrit, seega võib mitut klastrit hõlmavat faili tähistada kui klastriahelat, kuigi failiga seotud klastrid paiknevad ketta andme sektoris killustatult.

Failipaigutustabeli kanne võib sisaldada üht viiest:
*järgmise klastriahelas oleva klastri number
*klastriahelat lõpetav klaster
*riknenud klaster
*reserveeritud klaster
*kasutamata klaster

Kannete väärtused vastavalt FAT-failisüsteemile:

### Kataloogitabel

Kataloogitabel on omamoodi "fail", mis koosneb 32-baidiste struktuuride järjendist. Iga fail või kataloog (kaust), mis kataloogitabelis sisaldub, omab 32-baidist kannet. Iga selline kanne sisaldab vastava faili või kataloogi kohta järgmist informatsiooni:
*nimi
*atribuudid (archive, directory, hidden, read-only, system ja volume)
*loomisaeg
*esimese seotud klastri aadress
*maht

Kui välja arvata FAT12/FAT16 juurkataloogitabel, mis paikneb eriomases juurkataloogi sektoris, on kõik kataloogitabelid andmete sektoris. FAT32 puhul on andmete sektoris ka juurkataloogitabel, mis võib seega, erinevalt FAT12/FAT16 fikseeritud suurusest, kasvada nagu tavaline klastriahel. FAT32 hoiab viita juurkataloogile alglaade sektori väljas BPB_RootClus. Juurkataloog on eriline veel selle poolest, et sellel ei ole loomisaja märget ega nime (tinglikult võiks küll juurkataloogi nimeks lugeda "\").

## Viited

## Välislingid
* Defragmentation
* Disk and File System Basics
* Choosing a File System
* NTFS vs FAT
* Detailed Explanation of FAT Boot Sector
* FAT: General Overview of On-Disk Forma