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
 Sisu Alglaade sektor Failisüsteemi informatsiooni sektor (ainult FAT32) Täiendavad reserveeritud sektorid (valikuline) Failipaigutustabel #1 Failipaigutustabel #2 Juurkataloog (ainult FAT12/FAT16) Andmete regioon (partitsiooni voi ketta lõpuni)Suurus sektorites(reserveeritud sektorite arv)(failipaigutustabelite arv)*(sektorit failipaigutustabeli kohta)(juurkataloogi kirjete arv)*(baiti sektori kohta)(klastrite arv)*(sektoreid klastri kohta)

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.

 FAT12/FAT16/FAT32 Nimi  Baidinihe Pikkus (baitides) KirjeldusBS_jmpBoot03Viide alglaade koodile. Tavaliselt JmpBoot[0] = 0xEBBS_OEMName38Tavaliselt viitab sellele, millise süsteemiga ketas on vormindatud. Soovituslik on "MSWIN4.1"BPB_BytsPerSec112Baiti sektori kohta. Võimalikud väärtused: 512, 1024, 2048, 4096. Ühilduvuse huvides soovituslik on 512BPB_SecPerClus131Sektoreid klastri kohta. 2 aste ja suurem kui null. Lubatud väärtused: 2^0 kuni 2^7. Keelatud on kasutada väärtust, mis annab klastri kohta enam kui 32K baiti.BPB_RsvdSecCnt142Reserveeritud sektorite arv. Ei tohi olla 0. FAT12 ja FAT16 puhul peab olema 1. FAT32 puhul tavaliselt 32.BPB_NumFATs161FAT struktuuride arv kettal. Soovituslik on 2, kuid lubatud on 1 või suurem arv.BPB_RootEntCnt17232-baidiste kannete arv juurkataloogis FAT12 ja FAT16 puhul. Soovituslik on 512 FAT32 korral peab olema 0.BPB_TotSec1619216-bitine sektorite arv, mis kettal on. Kui 0 siis määrab sektorite arvu 32-bitine BPB_TotSec32BPB_Media211Kasutati MS-DOS-is kettatüübi määramisel. Pole enam kasutusel. Standardväärtus on 0xF8BPB_FATSz16222FAT12/FAT16: ühe FAT-ga seotud sektorite arv (16-bitine), FAT32 korral on 0. BPB_SecPerTrk242Sektorit raja kohta. Kirjeldab ketta geomeetriat.BPB_NumHeads262Lugemispeade arv. Näiteks 1,44 MB disketi puhul on 2.BPB_HiddSec284Operatsioonisüsteemi spetsiifiline väärtus: varjatud sektorite arv, mis eelneb antud partitsioonileBPB_TotSec3232432-bitine kettal olevate sektorite arv. Kui määratud, siis BPB_TotSec16 peab olema 0 FAT12/FAT16 Nimi Baidinihe Pikkus (baitides) KirjeldusBS_DrvNum361Kettanumber: 0x00 floppy ja 0x80 kõvaketastelBS_Reserved1371Reserveeritud (Windows NT kasutab seda). Soovituslik on 0BS_BootSig381Laiendatud alglaade signatuur. Näitab, kas järgnevad kolm välja on olemasBS_VolID394Köite seerianumber. Eristab eemaldatavaid kettaid üksteisestBS_VolLab4311Köitemärgend.BS_FilSysType548"FAT12", "FAT16" või "FAT". Ei seostu otseselt FAT versiooniga, kuid soovituslik on määrata kasutuselolevaga sama. FAT32 Nimi Baidinihe Pikkus (baitides) KirjeldusBPB_FATSz32364FAT32 spetsiifiline 32-bitine väli. Määrab, mitu sektorit FAT hõlmabBPB_ExtFlags402BPB_FSVer422FAT32 failisüsteemi versioon. Kõrge bait on ja madal bait näitavad versiooni.BPB_RootClus444Seatakse vastavusse juurkataloogi esimese klastriga. Tavaliselt on 2BPB_FSInfo482Failisüsteemi infostruktuuri sektori number reserveeritud alalBPB_BkBootSec502Alglaadimise koopia sektori asukohtBPB_Reserved5212Tulevaste FAT laienduste jaoks eraldatud ala, mis tavaliselt on 0BS_DrvNum641vt FAT12/FAT16 baidinihe 36BS_Reserved1651vt FAT12/FAT16 baidinihe 37BS_BootSig661vt FAT12/FAT16 baidinihe 38BS_VolID674vt FAT12/FAT16 baidinihe 39BS_VolLab7111vt FAT12/FAT16 baidinihe 43BS_FilSysType828Seatud alati süsteemiks FAT32, kuigi ei määra otseselt failisüsteemi

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).

 Nimi  Baidinihe Pikkus (baitides) KirjeldusFSI_LeadSig04Väärtus 0x41615252. Kasutatakse kontrollimaks, et tegu on tõesti failisüsteemi informatsiooni sektorigaFSI_Reserved14480Reserveeritud tulevaste uuenduste jaoks. Kõik baidid sel väljal peaksid olema 0 väärtusegaFSI_StrucSig4844Väärtus 0x61417272. Kasutusel olevatele väljadele lähemal paiknev täiendav signatuur.FSI_Free_Count4884Vabade klastrite loend. Peab alati olema väiksem-võrdne klastrite koguarvust partitsioonil/kettal. Kui on 0xFFFFFFFF, siis on vabade klastrite arv mitte-teada.FSI_Nxt_Free4924Viit kohale, kust failipaigutustabeli draiver peaks otsima järgmist vaba klastrit. Tavaliselt on viidaks viimati kasutatud klasterFSI_Reserved249612Reserveeritud tulevaste uuenduste jaoks. Kõik baidid sel väljal peaksid olema 0 väärtusegaFSI_TrailSig5084Väärtus 0xAA550000. Failisüsteemi informatsiooni sektori n-ö "saba"-signatuur.

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:

FAT12FAT16FAT32Kirjeldus0x0000x00000x00000000Vaba klaster0x0010x00010x00000001Reserveeritud väärtused, mida ei tohi kasutada0x002–0xFEF0x0002–0xFFEF0x00000002–0x0FFFFFEFKasutatud klaster, mis viitab järgmisele klastrile0xFF0–0xFF60xFFF0–0xFFF60x0FFFFFF0–0x0FFFFFF6Reserveeritud väärtused, mida ei tohi kasutada0xFF70xFFF70x0FFFFFF7Riknenud sektoriga või reserveeritud klaster0xFF8–0xFFF0xFFF8–0xFFFF0x0FFFFFF8–0x0FFFFFFFKlastriahela lõpetav klaster (viimane failiga seotud klaster)

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

Kategooria:ISO
Kategooria:Failisüsteemid