File Allocation Table

file system
(Reindirizzamento da FAT32)

La File Allocation Table, in sigla FAT, è un file system sviluppato inizialmente da IBM e Digital Equipment Corporation prima, e poi da Bill Gates e Marc McDonald per il MS-DOS. È il file system primario per diversi sistemi operativi e Microsoft Windows fino alla versione Windows Me. Windows NT e le successive versioni hanno introdotto l'NTFS e mantenuto la compatibilità con la FAT così come molti altri sistemi operativi moderni.

FAT
Dati generali
SviluppatoreMicrosoft
Nome completoFile Allocation Table (Tabella di Allocazione dei File)
  • FAT12 (a 12 bit)
  • FAT16 (a 16 bit)
  • FAT32 (a 32 bit)
Introduzione
Identificatore della partizione
  • FAT12: 0x01 (MBR)
  • FAT16: 0x04, 0x06, 0x0E (MBR)
  • FAT32: 0x0B, 0x0C(MBR)
    EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)
Struttura
Struttura contenuti directoryTabelle
Allocazione dei fileLinked List
Blocchi danneggiatiCluster tagging
Limiti
Dimensione massima di un file bytes (circa 4GB)
Numero massimo di file
  • FAT12: bytes (poco meno di 4 KiB)
  • FAT16: bytes (poco meno di 64 KiB)
  • FAT32: bytes (256 MiB)
Dimensione massima del nome di un file255
Dimensione massima del volume
Caratteri permessi nel nome di un fileUTF-16
Caratteristiche
Date memorizzateCreazione, modifica, accesso
Date supportate1º gennaio 1980 - 31 dicembre 2107
ForkNon in maniera nativa
AttributiSola lettura, Nascosto, di sistema, etichetta volume, sottocartella, archivio, eseguibile
Permessi file systemNessuno
Compressione trasparente
Crittografia trasparente
  • FAT12, FAT16: solo con DR-DOS
  • FAT32: Nessuna

Storia modifica

La FAT inizialmente debutta sul sistema CP/M della Digital e IBM per i floppy disk; l'idea fu presa da come la versione stand-alone di Microsoft BASIC utilizzava i floppy disk fino al 1976 copiata dalla IBM. Nel maggio del 1979, un anno prima di decidere di scrivere il QDOS, Tim Paterson aiutò Bob O'Rear a portare il loro linguaggio nella nuova architettura 8086. La FAT poi viene utilizzata nell'agosto del 1980 con la prima versione di QDOS (derivazione del modulo DOS del CP/M) di Tim Paterson, il predecessore del PC-DOS e di MS-DOS della Microsoft, anzi, il solo supporto FAT fu proprio la principale differenza tra il QDOS e il CP/M, di cui il QDOS era un clone.

Con l'annuncio della Microsoft del cessato supporto a MS-DOS nel 1994 e l'introduzione del NTFS in tutti i sistemi operativi prodotti, è improbabile che venga sviluppata una nuova versione del FAT. Vista però l'estrema diffusione del FAT nei floppy disk, nelle memorie flash o nei drive USB ed essendo molto limitato il supporto del NTFS nei sistemi operativi non Microsoft, probabilmente questo file system verrà utilizzato ancora a lungo. Con la commercializzazione di Windows Vista SP1 e Windows CE 6.0, la Microsoft presenta l'exFAT detta anche FAT64 utilizzato prevalentemente per memorie flash.

Cronologia delle versioni modifica

Esistono varie versioni di questo file system, in base a quanti bit sono allocati per numerare i cluster del disco: FAT12, FAT16, FAT32. Esiste anche una versione del FAT16 detta VFAT, che è virtuale cioè non registrato fisicamente sull'hard disk, ma gestito da un software specifico.

FAT12 modifica

La prima versione del FAT fu la FAT12, un file system per floppy disk i cui indirizzi per i cluster erano appunto a 12 bit (lunghezza non standard, quindi manipolare il FAT era un po' più complicato) e per questo poteva gestire dischi grandi al massimo 32 MiB. Ma visto che i dischi dell'epoca erano grandi al massimo 160 KB questi limiti non vennero mai sentiti. La prima versione del FAT12 non supportava le directory ad albero, che vennero introdotte con l'MS-DOS 2.0 e i dischetti da 360KB.

Nel 1984 la IBM mise sul mercato i PC AT, con un hard disk di 20 MB. In parallelo Microsoft introdusse l'MS-DOS 3.0 ed una versione del FAT con indirizzi per i cluster a 16 bit, permettendo fino a 65.536 cluster e portando il limite di grandezza teorico a 512MB. Comunque il numero massimo di settori e la dimensione massima (di una partizione, non più di un disco) non cambiò e rimase di 32 MB.

FAT16 modifica

Nel 1987 arrivò il formato che ora viene chiamato FAT16: introdotti dal Compaq DOS 3.31, nel 1988 i miglioramenti arrivarono anche con l'MS-DOS 4.0. La dimensione delle partizione venne limitata dalla dimensione di 8-bit dei settori per cluster, che potevano avere fino a 64 settori, dando cluster di 32 KB con la solita dimensione di 512 byte per settore, fissando il limite "definitivo" per una partizione FAT16 a 2 GB. Più tardi, Windows NT aumentò la dimensione massima dei cluster a 64K (considerando il contatore come unsigned, senza segno), ma il risultato non era compatibile con le altre implementazioni del FAT del tempo, e cluster di tale grandezza portavano a sprecare molto spazio per la frammentazione interna.

VFAT modifica

Per supportare i nomi dei file lunghi, venne introdotto in Windows 95 il VFAT (Virtual FAT), che prende il nome dal driver della periferica. L'implementazione modificava il modo in cui il file system organizzava i contenuti di una directory. L'uso delle specifiche VFAT permette di usare sia nomi lunghi (fino a 255 caratteri UTF-16) che nomi brevi (8+3 caratteri) in maniera trasparente alle diverse versioni di Windows.

FAT32 modifica

Per superare i limiti sulla dimensione dei volumi imposta dal FAT16, Microsoft decise di creare un nuovo FAT chiamato FAT32, con numeri per i cluster da 32 bit, anche se in realtà ne vengono utilizzati solo 28.

In teoria questo dovrebbe permettere 268435456 (228) cluster, cioè una dimensione totale dell'ordine dei 2 TiB con cluster di 8 KiB, ma a causa delle limitazioni da alcune versioni dell'utility scandisk non è permesso al FAT di superare i 4177920 (< 222) cluster, riducendo la dimensione massima a 124,55 gigabyte. Le utility di formattazione e partizionamento di Windows 2000 e XP hanno un limite di 32 GB per le partizioni FAT32, ma è un limite arbitrario: avviando un computer con un floppy disc di boot basato su sistema operativo FAT32 (es.: Windows 98) è infatti possibile partizionare in FAT32 oltre i 32 gigabyte, inoltre utility di terze parti[1] possono tranquillamente creare e gestire partizioni FAT32 fino a 1 TB; esistono in commercio hard disk esterni di 1 TB formattati in FAT32. Con il FAT32 la dimensione del singolo file non può essere superiore ai 4 GB. Questo perché esiste una voce a 32 bit che indica la grandezza del file in byte.

L'ultima versione di Microsoft Windows che usa questo file system è Windows Me (Millennium Edition). Le versioni successive lo supportano in aggiunta al file system NTFS, più che altro per la formattazione di pendrive, schede di memoria e altri dispositivi mobili.

ExFAT modifica

Lo stesso argomento in dettaglio: exFAT.

ExFAT è un file system introdotto da Microsoft nel 2006 con Windows Embedded CE 6.0, pensato appositamente per memorie flash e, in generale, per dispositivi di archiviazione dalle dimensioni fino a 16 exabytes. Subito dopo, nel 2008, il supporto di Microsoft alla exFAT è stato incluso nel Service Pack 1 di Windows Vista e in Windows XP SP2 ed SP3, grazie a uno specifico aggiornamento (KB955704-x86-ENU).

Descrizione modifica

La FAT in sé mantiene la traccia delle aree del disco disponibili e di quelle già usate dai file e dalle directory: la differenza fra FAT12, FAT16 e FAT32 consiste appunto in quanti bit sono allocati per numerare i cluster del disco. Con 12 bit, il file system può indirizzare al massimo 212 = 4096 cluster, mentre con 32 bit si possono gestire 232 = 4.294.967.296 cluster; l'aumento del numero di bit di indirizzo dei cluster si è reso necessario per gestire unità a disco sempre più grandi e capienti.

La FAT è relativamente semplice ed è supportata da moltissimi sistemi operativi dato che è Open Source. Queste caratteristiche la rendono adatta ad esempio per i Floppy Disk e le Memory Card. Può anche essere utilizzata per condividere dati tra due sistemi operativi diversi e molto altro. Il più grande problema del File System FAT della Microsoft è la frammentazione. Quando i file vengono eliminati, creati o spostati, le loro varie parti si disperdono sull'unità, rallentandone progressivamente la lettura e la scrittura. Una soluzione a questo inconveniente è la deframmentazione, un processo che riordina i file sull'unità. Questa operazione può durare anche diverse ore e deve essere eseguita periodicamente per mantenere le prestazioni dell'unità.

Supporto nei sistemi operativi modifica

Data la grande diffusione del FAT file system, praticamente tutti i sistemi operativi non Microsoft hanno supportato sia il FAT16, che il VFAT ed infine il FAT32 (questo con meno limitazioni di quelle previste ufficialmente).

Con le prime distribuzioni GNU/Linux venne creato un file system chiamato UMSDOS, un FAT con gli attributi Unix (permessi, proprietario ecc.), che altrimenti non sono supportati in FAT; il suo sviluppo si fermò con l'arrivo del VFAT, ma è tuttora supportato. Il sistema operativo macOS può utilizzare il FAT per i volumi non avviabili oppure per il volume di Bootcamp nei MacIntel.

Struttura modifica

Il file system FAT è un file system classificato tra quelli con allocazione concatenata. Una partizione FAT è strutturata in quattro sezioni diverse:

Area riservataFATRoot directory
(solo FAT12/16)
Regione dati
Settore di avvioInformazioni FS
(solo FAT32)
Riservati
(opzionale)
FAT #1FAT #2
Dimensione in settoriVariabile(# FAT)*(settori per FAT)32 * (# voci root) / bytes per settore(# cluster) * (settori per cluster)
  • I settori riservati, che si trovano proprio all'inizio. Il primo settore riservato (settore zero) è il settore di avvio, seguito dal BIOS Parameter Block (con alcune informazioni di base del FS, in particolare il suo tipo, e puntatori alla posizione delle altre sezioni). Contiene di solito il codice del boot loader del sistema operativo. La dimensione dei settori riservati è indicata in un campo all'interno del settore di avvio. Nel FAT32 le informazioni si trovano nel settore 1, mentre nel settore 6 vi è una copia di backup del settore di avvio.
  • La Regione FAT: Contiene almeno due copie della FAT (per motivi di sicurezza). Rappresentano la mappa della regione dati.
  • La Regione della ROOT directory: è una tabella che memorizza le cartelle e i file presenti nella directory di root. È presente solo nella FAT12 e nella FAT16 ed impone una dimensione massima prefissata per la root; nella FAT32 ciò è fatto direttamente nella regione dati, eliminando così il vincolo dimensionale sulla root.
  • L'area dati: è dove file e cartelle sono realmente memorizzati e occupa la maggior parte della partizione

FAT utilizza il formato little endian per le voci nell'intestazione e la/le FAT.

Settore di avvio modifica

È importante notare che il primo settore su un dispositivo non necessariamente è il settore di avvio. Per i dispositivi partizionati (per es. gli hard disk), il primo settore è detto Master Boot Record (abbreviato: MBR); nei dispositivi non partizionati (come i floppy disk) il primo settore è il Volume Boot Record (abbreviato: VBR). Tutte le versioni FAT hanno in comune i primi 36 bytes:

Byte OffsetLunghezza (byte)Descrizione
0x003Salta istruzione. Questa istruzione verrà eseguita e salterà oltre il resto dell'intestazione (non-eseguibile) se la partizione è avviabile (cfr. VBR). Se il salto è pari a due byte l'istruzione JMP vicina è seguita da un'istruzione NOP
0x038Nome OEM (riempito da spazi). Determina come il disco è stato formattato. MS-DOS controlla questo campo per determinare quali altre parti del record di avvio devono essere valutate. I valori comuni sono IBM  3.3" (con due spazi intermedi), MSDOS5.0, MSWIN4.1 e mkdosfs.
0x0B2Bytes per settore. Solitamente il valore è 512. È l'inizio del BIOS Parameter Block.
0x0D1Settori per cluster. I valori ammessi sono potenze di due da 1 a 128. Tuttavia, il numero totale di byte per cluster dev'essere inferiore a 32KiB.
0x0E2Numero dei settori riservati. È il numero di settori prima della prima FAT nell'immagine del file system. Solitamente vale 1 per FAT12/16, 32 per FAT32.
0x101Numero di tabelle di allocazione dei file. Solitamente vale due.
0x112Numero massimo di voci nella directory root. Per il FAT12/16 questo valore dev'essere multiplo della dimensione di un settore. Per il FAT32 vale 0.
0x132Settori totali. Se vale 0 allora si fa riferimento ai 4 byte all'offset 0x20.
0x151Tipo di descrittore. Tipicamente vale 0xF8 per un hard disk.
0x162Settori per FAT (per FAT12/16)
0x182Settori per traccia.
0x1A2Numero di testine.
0x1C4Settori nascosti.
0x204Totale settori. Se minore di 65.535 vale il contenuto all'offset 0x13.

Settore informazioni FS modifica

Introdotto con la FAT32 per accelerare i tempi di accesso di alcune operazioni (i.e. la quantità di spazio libero), occupa generalmente il settore 1, nel record di avvio 0x30. Ha dimensione pari a 512 byte.

Tabella dei files modifica

Una partizione è divisa in cluster contigui dalle dimensioni variabili tra 2 e 32 KB. Ogni file è strutturato sul disco come una lista concatenata di cluster non necessariamente contigui: questa è la ragione principale per cui si parla di frammentazione del disco nei filesystem FAT.

Ogni record della FAT è composto da 5 campi:

  • il numero del cluster successivo
  • una speciale EOC (end of clusterchain), che indica la fine di una catena
  • cluster danneggiato
  • cluster riservato
  • cluster libero

I valori possibili sono:

FAT12FAT16FAT32Descrizione
0x0000x00000x00000000Cluster libero
0x0010x00010x00000001Valore riservato
0x002-0xFEF0x0002-0xFFEF0x00000002-0x0FFFFFEFCluster dati
0xFF0-0xFF60xFFF0-0xFFF60x0FFFFFF0-0x0FFFFFF6Valori riservati
0xFF70xFFF70x0FFFFFF7Cluster danneggiato
0xFF8-0xFFF0xFFF8-0xFFFF0x0FFFFFF8-0x0FFFFFFFUltimo cluster

Da notare che nella FAT32 sono disponibili solo 28 dei 32 bit disponibili; il bit più significativo è riservato. La regione dati parte dal cluster #2; le altre voci sono riservate alla FAT ed a utilizzo interno.

Tabella delle directory modifica

È un tipo speciale di file che rappresenta una directory; ogni file o cartella memorizzata all'interno è rappresentato da una voce nella tabella secondo il seguente schema:

Byte offsetLunghezzaDescrizione
0x008Nome del file (riempito da spazi). Il primo byte se vale 0 significa che la voce è disponibile, il valore 0x05 è riservato per la codifica kanji, il valore 0x2E indica il valore '.' o '..'
0x083Estensione del file (riempita con spazi)
0x0B1Attributi del file. Segue il seguente schema:
BitMascheraDescrizione
00x01Sola lettura
10x02Nascosto
20x04Di sistema
30x08Etichetta volume
40x10Sottodirectory
50x20Archivio
60x40Device (solo per uso interno, in realtà non si trova sul disco)
70x80Inutilizzato
0x0C1Riservato, generalmente vale 0 (tranne in Windows NT e successivi)
0x0D1Ora di creazione. Risoluzione: 10ms, valori da 0 a 199.
0x0E2Ora di creazione in ore, minuti e secondi. Le ore sono codificate nei bit 15-11, i minuti nei bit 10-5, i secondi nei bit 4-0
0x102Data di creazione. L'anno è codificato nei bit 15-9, il mese nei bit 8-5, i giorni nei bit 4-0. L'anno è calcolato a partire dal 1980.
0x122Ultima data di accesso
0x142EA-Index in OS/2 e NT per FAT12/16; in FAT32 sono riportati i 2 byte alti del primo cluster
0x162Ora ultima modifica
0x182Data ultima modifica
0x1A2Puntatore al primo cluster in FAT12/16; in FAT32 sono riportati i 2 byte bassi del primo cluster.
0x1C4Dimensione del file in byte

Nel caso in cui si tratta di un file di tipo etichetta di volume o directory padre (..) i 6 byte all'offset 0x1A sono impostati a zero.

Note modifica

  1. ^ Ridgecrop Consultants Ltd, FAT 32 Formatter, su ridgecrop.demon.co.uk. URL consultato il 5 febbraio 2008 (archiviato dall'url originale il 21 luglio 2009).

Voci correlate modifica

Collegamenti esterni modifica