The FAT filesystem | Capitoli SUCCESSIVI |
I file system tradizionali per DOS sono FAT12 e FAT16. FAT è un acronimo per: File Allocation Table: il disco viene suddiviso in cluster e FAT descrive quali cluster sono occupati e da quali file. In questa guida, descriveremo il file system FAT in dettaglio. FAT12 e FAT16 rivestono una certa importanza anche perchè sono di grande utilità nello scambio di dati tra differenti sistemi operativi e perchè sono i file system utilizzati da tutte le periferiche quali le videocamere digitali. All'inizio troviamo il boot sector ( all'indirizzo 0 ) e, probabilmente, altro materiale. Nell'insieme, questi vengono definiti: settori riservati. Normalmente, il boot sector è il solo settore riservato. Subito dopo troviamo le FAT, immediatamente dopo i settori riservati; il numero dei settori riservati è scritto nel boot sector, nei byte 14 e 15 ( ricorda: i numeri a due byte sono memorizzati little endian, dove il primo byte è il byte meno significativo ).
Nel nostro esempio, il boot sector di un floppy disk, c'è un solo settore riservato ( 0001 ). La lunghezza di un settore si trova nel boot sector, nei byte 11 e 12.
Nel nostro esempio, il boot sector di un floppy disk, la lunghezza di un settore è di 512 byte ( 0200 in notazione esadecimale ). Poi, troviamo la directory root, subito dopo le FAT; il numero di FAT è scritto nel boot sector, nel byte 16.
Nel nostro esempio, il boot sector di un floppy disk, abbiamo 2 FAT ( 02 ). Ciascuna FAT occupa un numero di settori scritto nel boot sector, nei byte 22 e 23.
Nel nostro esempio, il boot sector di un floppy disk, ciascuna FAT occupa 9 settori ( 0009 ). Immediatamente dopo la directory root troviamo l'area dei dati; il numero dei record contenuti nella directory root è scritto nel boot sector, nei byte 17 e 18
Nel nostro esempio, il boot sector di un floppy disk, la directory root ha a sua disposizione 224 record ( 00E0 ) e ciascun record occupa 32 byte; lo spazio è arrotondato fino ad occupare l'intero settore. Il primo settore ( 512 byte ) di un filesystem FAT è il boot sector. Nella terminologia Unix-like, potrebbe essere definito superblock. Contiene qualche informazione generale. Vediamo un esempio esplicito ( il boot sector di un floppy DRDOS ). L'esempio è relativo alla versione FAT12, che è parte anche dei boot sector delle versioni FAT16 e FAT32.
dove:
FAT16 utilizza questi stessi parametri del blocco per il BIOS, ma con qualche estensione:
FAT32 utilizza parametri estesi del blocco per il BIOS:
I vecchi campi a 2-byte "numero totale di settori" e "numero di settori per FAT" sono a zero; questa informazione, infatti, si trova ora nei nuovi campi a 4-byte. Una importante novità è il campo "primo cluster della directory root". Prima, la directory root non faceva parte dell'area dei dati, ma si trovava in un punto specifico e conosciuto del disco ed aveva dimensioni fisse e note ( e quindi non poteva essere modificata ed estesa ). Ora la directory root è in un punto qualsiasi dell'area dei dati. Il disco è diviso in cluster. Il numero di settori assegnati ad ogni cluster è scritto nel byte 13 del boot sector. La tabella della allocazione dei file ( File Allocation Table ) ha un record per ciascun cluster. Questi record hanno una lughezza di 12, 16 o 28 bit, a seconda del filesystem utilizzato: FAT12, FAT16 e FAT32. Il primo cluster dell'area dei dati è il cluster numero 2. I primi due record della tabella FAT non sono utilizzati. Nel primo byte del primo record troviamo una copia del media descriptor. I restanti bit di questo record sono 1.
NOTA. Utilizzando debug.exe di DOS Windows, carichiamo ( L ), a partire dalla locazione con offset 100 ( esadecimale ), un settore ( 1 ) a partire dal secondo ( 1 ) del disco floppy ( 0 ), con filesystem FAT 12. Ora, visualizziamo ( D ) i primi 128 byte ( qui, per comodità, ne mostriamo solo i primi 16 ) del segmento di default ( che inizia alla locazione di memoria con offset 100 ). FINE NOTA Nel secondo record è memorizzato il marcatore end-of-file. I due bit high order del secondo record sono, a volte, con FAT 16 e FAT 32, utilizzati come rozza gestione del volume: il bit più alto a 1: l'ultimo shutdown è stato completato; il successivo bit più alto a 1: durante l'ultimo mount sono stati rilevati errori I/O "no disk". FAT12 Visto che 12 bit non rappresentano un numero intero di byte, bisogna specificare come nella FAT 12 i bit sono disposti. In FAT 12 due record occupano tre byte; se i byte sono
i due record conterranno:
NOTA. Utilizzando debug.exe di DOS Windows, carichiamo ( L ), a partire dalla locazione con offset 100 ( esadecimale ), nove settori ( 9 ) a partire dal secondo ( 1 ) del disco floppy ( 0 ), con filesystem FAT 12. Ora, visualizziamo ( D ) i primi 128 byte del segmento di default ( che inizia alla locazione di memoria con offset 100 ).
Ora sappiamo che i primi due record, cioè i primi tre byte ( F0 FF FF ), non sono utilizzati. Partendo, quindi, dal terzo record, abbiamo, in successione, 30 record a zero ( 15 gruppi composti da tre byte ), cioè non contenenti alcun file: dal byte con offset 103 al byte con offset 12F. I primi due record contenenti informazioni sono i due record che occupano le locazioni di memoria 130, 131 e 132, che rappresentano i cluster 20 e 21 ( in esadecimale. In notazione decimale: 32 e 33 ) e contenenti i valori esadecimali 21 20 02:
che vanno ricomposti secondo la regola appena esposta:
Il risultato sono due record contenenti i valori esadecimale 21 ( 33 in notazione decimale ) ed il valore esadecimale 22 ( 34 in notazione decimale ). E' facile intuire che ogni record ( che rappresenta un cluster ) della FAT memorizza il numero del record ( cluster ) successivo contenente una parte dello stesso file! FINE NOTA. I possibili valori dei record per la FAT 12 sono:
Il valore dato è il numero del successivo cluster del file, con:
Dal momento in cui il primo cluster dell'area dati è il numero 2, il valore 001 non è ammesso. NOTA. Seguiamo ora i cluster successivi al cluster 33 del nostro esempio, fino ad arrivare al fine file:
Il file, quindi, occupa 43 cluster, con una dimensione totale di:
FINE NOTA. DOS 1.0 e 2.0 utilizzava FAT12. La massima dimensione di un filesystem FAT12 ( volume ) era 8 MB ( 4086 cluster di almeno 4 settori ciascuno ). FAT16 DOS 3.0 introdusse FAT16. Tutto molto simile a FAT12, con la sola differenza che i record della FAT sono ora di 16 bit. Valori possibili per la FAT16 sono:
Il valore dato è il numero del successivo cluster del file, con:
Ora la dimensione massima del volume era di 32 MB, dal momento in cui DOS 3.0 utilizzava 16-bit per i numeri di settore. Con DOS 4.0, che utilizza 32-bit per i numeri di settore, la dimensione massima di un volume con filesystem FAT16 arriva a 2 GB ( 65526 cluster di almeno 64 settori ciascuno ). FAT32 FAT32 fu introdotta con Windows 95 OSR 2. Non è supportata da Windows NT. Tutto molto simile a FAT16, con la sola differenza che i record della FAT sono ora di 32 bit, di cui i primi 4 bit sono riservati. I restanti 28 bit hanno un significato simile a quello di FAT12 e FAT16. Per FAT32: dimensioni dei cluster: 4096 - 32768 byte. Microsoft utilizza le seguenti regole per distinguere FAT12 da FAT16 e da FAT32. Innanzitutto, calcola il numero di cluster presenti nell'area dei dati ( prendendo il numero totale dei settori, sottraendo lo spazio dedicato ai settori riservati, alle tabelle FAT e alla directory root, e dividendo, arrotondando per difetto, per il numero di settori presenti in un cluster ). Se il risultato è inferiore a 4085, abbiamo FAT12. Altrimenti, se il risultato è inferiore a 65525 abbiamo FAT16. Altrimenti si tratta di FAT32. La dimensione massima di un filesystem FAT32 è 4.294.967.295 byte. Microsoft utilizza
come termine della catena di cluster, ma diverse utility usano valori differenti. Linux utilizza da sempre ff8 e fff8, ma oggi alcuni player MP3 non funzionano senza fff etc. Dalla versione 2.5.40 anche Linux usa questi valori. NOTA. La directory root contiene tutti i record relativi ai singoli file memorizzati nel filesystem. Vediamo, come esempio, il file di cui precedentemente abbiamo seguito le sequenze dei cluster in cui è stato memorizzato:
Ogni record ha una lunghezza di 32 bit. Con debug.exe di DOS Windows, lanciamo il comando: carica ( L ), a partire dalla locazione di memoria con offset 100, un settore ( 1 ) a partire dal 14esimo ( 13 ), dal disco floppy ( 0 ). Il file che cerchiamo è nel secondo record, compreso tra le locazioni di memoria 120 e 13F. Le informazioni che ci dicono che è il file che stiamo cercando sono alla posizione 26 - 27, che indica il primo cluster in cui il file è memorizzato ( 0020 ), e alla posizione 28 - 31, che indica la dimensione del file in byte ( 00 00 54 7C = 21628 ). FINE NOTA.
Qui abbiamo un esempio di 6 record nello stesso floppy MSDOS. Possiamo notare che il quinto record nell'esempio sopra riportato è l'etichetta del volume, mentre gli altri record sono file effettivi. Il bit "archivio" viene impostato quando il file è creato o viene modificato. Viene azzerato dalle utility di backup. Questo permette di eseguire backup incrementali. Per permettere di recuperare file cancellati per errore, il comando DEL sostituisce il primo byte del nome con 0xe5 ( e5 in easdecimale ) per significare "eliminato". Se il primo byte in un record è 0x05 ( 05 in esadecimale ) significa che il nome del file inizia realmente con 0xe5. Il primo byte del nome non deve essere 0x20 ( spazio ). Nomi brevi o estensioni vengono completati con degli spazi. Non sono permessi caratteri ASCII speciali:
Il primo byte 0 in un record di directory significa che la directory finisce li. Le sottodirectory iniziano con i record VFAT In Windows 95 venne introdotta una novità: VFAT. VFAT ( Virtual FAT ) è la FAT che supporta i nomi di file lunghi ( più di otto byte fino ad un massimo di 255 byte ): LFN ( long filename ). L'implementazione non è elegantissima. Questi nomi di file vengono memorizzati in record speciali, simili al seguente:
Questi record speciali non dovrebbero confondere i vecchi programmi, dal momento in cui impostano la combinazione contenuta nell'attributo 0xf ( read only / hidden / system / volume label ), che dovrebbe garantire che tutti i vecchi programmi li ignorino. I nomi lunghi vengono memorizzati in record speciali che iniziano dalla coda. I caratteri Unicode sono, naturalmente, memorizzati in little endian. I numeri della sequenza sono ascendenti, a partire da 1. Un record ordinario segue queste regole speciali e contiene le informazioni usuali ( dimensioni del file, primo cluster, etc. ), ed una versione breve del nome. Anche lo spazio solitamente inutilizzato, qui viene usato:
I vecchi programmi possono cambiare directory in modo da poter separare i record speciali dai record ordinari. Per facilitare ciò, i record speciali hanno un checksum del nome breve nel byte 13:
Un ulteriore controllo è dato dal campo numero di sequenza, che numera i record speciali che appartengono allo stesso Long File Name ( LFN ), 1, 2, ... dove l'ultimo record ha il bit 6 settato.
Il nome breve è calcolato dal nome lungo: l'estensione è l'estensione del nome lungo, troncata alla lunghezza di tre. I primi sei byte del nome breve sono uguali ai primi sei caratteri, diversi da spazio, del nome lungo, con i byte
VFAT viene utilizzata nello stesso modo su FAT12, FAT16 e FAT32. FAT32 memorizza informazioni supplementari nel settore FSInfo, normalmente il settore 1.
|
|
The FAT filesystem | Disclaimer: questo è un link a contenuti ospitati su server esterni. |