Failipaigutustabel
| Selles artiklis on õigekeele- või stiilivigu. Palun aita artiklit keeleliselt parandada. |
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-i 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.
Sisukord |
Ajalugu [muuda]
FAT-i 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 [muuda]
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-i 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, ning kõik hilisemad DOS-i ja Windows-i 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 16MB, sest 12-bitine failipaigutustabel jätab rohkem ruumi andmetele.
FAT16 [muuda]
FAT16 ilmus 1984. aastal koos MS-DOS 3.0-ga.
FAT16 on väga sarnane FAT12-le, 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: varasemalt võttis paarisaja baidine fail (eeldusel, et klaster on 4 KB) kettal 4 KB, raisates seega kordi rohkem ruumi kui faili kettal hoidmiseks tegelikult vajalik[4]. Arvestades, et toona olidki failisuurused enamasti paarisaja baidised, oli tegemist väga olulise edasiminekuga FAT failisüsteemi arengus.
MS-DOS 3.0 toetas FAT16 puhul kettasuurusi kuni 32 MB, kuid MS-DOS 4.0 ja varasemalt 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-ega ka suuremat, 64KB-st klastrisuurust ja seega kuni 4GB 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 maksimaalne ühilduvus äärmiselt erinevate operatsioonisüsteemidega, nagu Windows 95/98/Me, OS/2, Linux ja mõned UNIX-i versioonid[8].
FAT32 [muuda]
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, kettasuuruse kasvades pidi FAT16 failisüsteem kasutama üha suuremaid klastreid[9] (kuna klastrite koguarv oli piiratud), mis muutis kettakasutuse äärmiselt 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 tegelikkuses 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 maksimaalselt 2 TB suurust ketast.
Maksimaalne failisuurus FAT32 kettal on 4 GB miinus 1 bait, mis tähendab, et suuremate failide kasutamiseks peab kasutama mõnd teist failisüsteemi, näiteks NTFS-i.
Struktuur [muuda]
Ülevaade [muuda]
| 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 erinevast 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 eeldefineeritud suurusega klastritesse millele viitab FAT #1 ja FAT #2 tabel.
Alglaade sektor [muuda]
Kõik FAT-i versioonid omavad esimese 36 baidi raames ühist struktuuri. Alates 36-ndast 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-e 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-iga 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-i 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 | Alglaade koopia sektori asukoht |
| BPB_Reserved | 52 | 12 | Tulevaste FAT-i 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 „FAT32“, kuigi ei määra otseselt failisüsteemi |
Failisüsteemi informatsiooni sektor [muuda]
Failisüsteemi informatsiooni sektor võeti kasutusele FAT32-ga. Sektori number kettal on määratud alglaade 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 [muuda]
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 [muuda]
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ärgnevat informatsiooni:
- nimi
- atribuudid (archive, directory, hidden, read-only, system ja volume)
- loomisaeg
- esimese seotud klastri aadress
- suurus
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 sellepoolest, et ta ei oma loomisaja märget ega nime (tinglikult võiks küll juurkataloogi nimeks lugeda „\“).
Välislingid [muuda]
- 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
Viited [muuda]
- ↑ 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
|
|||||||||||||||||||||||||||