Failipaigutustabel

Failipaigutustabel (FATFile 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[1], 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[2], 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[3].

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[4]. 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[5]. Windows NT ja Windows XP toetavad FAT16-ga ka suuremat, 64 kB klastrit ja seega kuni 4 GB kettaid[6].

FAT12- ja FAT16-failisüsteemid piiravad vormindamisel juurkataloogi kannete arvu[7]. 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[8].

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[9] (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[10].

FAT12/FAT16/FAT32
Nimi Baidinihe Pikkus (baitides) Kirjeldus
BS_jmpBoot 0 3 Viide alglaade koodile. Tavaliselt JmpBoot[0] = 0xEB
BS_OEMName 3 8 Tavaliselt viitab sellele, millise süsteemiga ketas on vormindatud. Soovituslik on "MSWIN4.1"
BPB_BytsPerSec 11 2 Baiti sektori kohta. Võimalikud väärtused: 512, 1024, 2048, 4096. Ühilduvuse huvides soovituslik on 512
BPB_SecPerClus 13 1 Sektoreid 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_RsvdSecCnt 14 2 Reserveeritud sektorite arv. Ei tohi olla 0. FAT12 ja FAT16 puhul peab olema 1. FAT32 puhul tavaliselt 32.
BPB_NumFATs 16 1 FAT struktuuride arv kettal. Soovituslik on 2, kuid lubatud on 1 või suurem arv.
BPB_RootEntCnt 17 2 32-baidiste kannete arv juurkataloogis FAT12 ja FAT16 puhul. Soovituslik on 512 FAT32 korral peab olema 0.
BPB_TotSec16 19 2 16-bitine sektorite arv, mis kettal on. Kui 0 siis määrab sektorite arvu 32-bitine BPB_TotSec32
BPB_Media 21 1 Kasutati MS-DOS-is kettatüübi määramisel. Pole enam kasutusel. Standardväärtus on 0xF8
BPB_FATSz16 22 2 FAT12/FAT16: ühe FAT-ga seotud sektorite arv (16-bitine), FAT32 korral on 0.
BPB_SecPerTrk 24 2 Sektorit raja kohta. Kirjeldab ketta geomeetriat.
BPB_NumHeads 26 2 Lugemispeade arv. Näiteks 1,44 MB disketi puhul on 2.
BPB_HiddSec 28 4 Operatsioonisüsteemi spetsiifiline väärtus: varjatud sektorite arv, mis eelneb antud partitsioonile
BPB_TotSec32 32 4 32-bitine kettal olevate sektorite arv. Kui määratud, siis BPB_TotSec16 peab olema 0
FAT12/FAT16
Nimi Baidinihe Pikkus (baitides) Kirjeldus
BS_DrvNum 36 1 Kettanumber: 0x00 floppy ja 0x80 kõvaketastel
BS_Reserved1 37 1 Reserveeritud (Windows NT kasutab seda). Soovituslik on 0
BS_BootSig 38 1 Laiendatud alglaade signatuur. Näitab, kas järgnevad kolm välja on olemas
BS_VolID 39 4 Köite seerianumber. Eristab eemaldatavaid kettaid üksteisest
BS_VolLab 43 11 Köitemärgend.
BS_FilSysType 54 8 "FAT12", "FAT16" või "FAT". Ei seostu otseselt FAT versiooniga, kuid soovituslik on määrata kasutuselolevaga sama.
FAT32
Nimi Baidinihe Pikkus (baitides) Kirjeldus
BPB_FATSz32 36 4 FAT32 spetsiifiline 32-bitine väli. Määrab, mitu sektorit FAT hõlmab
BPB_ExtFlags 40 2
BPB_FSVer 42 2 FAT32 failisüsteemi versioon. Kõrge bait on ja madal bait näitavad versiooni.
BPB_RootClus 44 4 Seatakse vastavusse juurkataloogi esimese klastriga. Tavaliselt on 2
BPB_FSInfo 48 2 Failisüsteemi infostruktuuri sektori number reserveeritud alal
BPB_BkBootSec 50 2 Alglaadimise koopia sektori asukoht
BPB_Reserved 52 12 Tulevaste FAT laienduste jaoks eraldatud ala, mis tavaliselt on 0
BS_DrvNum 64 1 vt FAT12/FAT16 baidinihe 36
BS_Reserved1 65 1 vt FAT12/FAT16 baidinihe 37
BS_BootSig 66 1 vt FAT12/FAT16 baidinihe 38
BS_VolID 67 4 vt FAT12/FAT16 baidinihe 39
BS_VolLab 71 11 vt FAT12/FAT16 baidinihe 43
BS_FilSysType 82 8 Seatud 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) Kirjeldus
FSI_LeadSig 0 4 Väärtus 0x41615252. Kasutatakse kontrollimaks, et tegu on tõesti failisüsteemi informatsiooni sektoriga
FSI_Reserved1 4 480 Reserveeritud tulevaste uuenduste jaoks. Kõik baidid sel väljal peaksid olema 0 väärtusega
FSI_StrucSig 484 4 Väärtus 0x61417272. Kasutusel olevatele väljadele lähemal paiknev täiendav signatuur.
FSI_Free_Count 488 4 Vabade 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_Free 492 4 Viit kohale, kust failipaigutustabeli draiver peaks otsima järgmist vaba klastrit. Tavaliselt on viidaks viimati kasutatud klaster
FSI_Reserved2 496 12 Reserveeritud tulevaste uuenduste jaoks. Kõik baidid sel väljal peaksid olema 0 väärtusega
FSI_TrailSig 508 4 Vää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:

FAT12 FAT16 FAT32 Kirjeldus
0x000 0x0000 0x00000000 Vaba klaster
0x001 0x0001 0x00000001 Reserveeritud väärtused, mida ei tohi kasutada
0x002–0xFEF 0x0002–0xFFEF 0x00000002–0x0FFFFFEF Kasutatud klaster, mis viitab järgmisele klastrile
0xFF0–0xFF6 0xFFF0–0xFFF6 0x0FFFFFF0–0x0FFFFFF6 Reserveeritud väärtused, mida ei tohi kasutada
0xFF7 0xFFF7 0x0FFFFFF7 Riknenud sektoriga või reserveeritud klaster
0xFF8–0xFFF 0xFFF8–0xFFFF 0x0FFFFFF8–0x0FFFFFFF Klastriahela 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[11]. 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[12]. 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