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[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
- ↑ MS-DOS Partitioning Summary
- ↑ Operating Systems Development
- ↑ File System Specifications FAT32 Features
- ↑ FAT Type and Cluster Size
- ↑ Overview of FAT, HPFS, and NTFS File Systems
- ↑ FAT16 and FAT12 File Systems
- ↑ FAT Root Folder
- ↑ FAT16 vs. FAT32
- ↑ The FAT File System
- ↑ FAT32 Boot Sector and Bootstrap Modifications
- ↑ FAT Folder Structure
- ↑ Description of the FAT32 File System