Quali sono le principali caratteristiche e differenze tra i file system ext2 e FAT?

Vedi anche una risposta sulla deframmentazione
dell’hard disk
.

Nelle pagine seguenti vengono descritti i file system (ovvero le strutture
di memorizzazione dei dati sui dischi magnetici) ext2 e FAT.

Il file system ext2

Il file system ext2 è stato introdotto con il sistema
operativo Linux ed è in pratica una versione modificata dei filesystem
utilizzati su gran parte dei sistemi Unix preesistenti.

Il filesystem viene creato al momento della formattazione del disco,
o meglio, della partizione, e la suddivide in gruppi (zone). Una tabella
principale contiene le informazioni globali relative alla partizione:

  • superblock: contiene informazioni complessive sulla partizione
    quali il numero di blocchi complessivo, il numero di inode (vedi sotto),
    il numero di blocchi liberi, un’indicazione di quando è avvenuta
    l’ultima verifica della struttura, etc. L’informazione contenuta nel
    superblock è cosí importante che viene duplicata in varie
    zone del disco in modo che possa più facilmente essere recuperata
    in caso di errore.

All’interno di ciascun gruppo vengono create le seguenti cinque tabelle:

  • block bitmap: tabella in cui ad ogni bit è associato
    un blocco di dati. Lo stato del bit indica se il relativo blocco è
    libero o allocato ad un file.

  • inode bitmap: tabella in cui ciascun bit è associato
    ad un “inode” (vedi sotto). Lo stato del bit indica se il corrispondente
    inode è libero o in uso.

  • inode table: tabella degli “inode”. Ogni elemento di questa
    tabella corrisponde ad un singolo file. L’inode contiene tutte le informazioni
    relative ad un file e principalmente quelle necessarie a reperire i
    dati effettivamente contenuti nel file.

  • data blocks: la porzione di disco dove sono effettivamente
    memorizzati i dati. Ogni blocco di dati (blocco logico) ha una dimensione
    multipla della dimensione del blocco fisico secondo una potenza di due.
    La dimensione del blocco logico viene stabilita al momento della formattazione.
    Allo scopo di ottimizzare l’allocazione dello spazio disco il filesystem
    ext2 è in grado di gestire “frammenti” di blocco nella parte
    finale del file, ovvero ogni file è costituito da 0 o più
    blocchi logici e da un frammento finale.

  • directory: tabella che associa nomi arbitrari agli inode.

L’inode costituisce il tramite per l’accesso ai dati di ciascun file
memorizzati nei “data blocks”; la sua struttura è tale da conciliare
due esigenze opposte: garantire un accesso veloce ai dati e consentire
la gestione di files di dimensioni estremamante variabili. A tale scopo
ogni inode contiene una tabella di 15 puntatori, i primi 12 sono i puntatori
“diretti”, ciascuno di essi contiene l’indirizzo di un blocco di dati
appartenente al file. Ciò non significa che i files possono essere
al massimo costituiti da 12 blocchi, infatti il 13o puntatore,
è il puntatore indiretto di primo livello, ovvero esso punta ad
un blocco di puntatori, ciascuno dei quali a sua volta contiene l’indirizzo
di un blocco di dati. Il 14o puntatore è il puntatore
indiretto di secondo livello, ovvero punta ad un blocco che contiene puntatori
ad altri blocchi che a loro volta contengono gli indirizzi dei blocchi
di dati. Il 15o puntatore, infine, realizza un ulteriore livello
ovvero punta ad un blocco contenente una tabella di blocchi che contengono
puntatori ad una lista di blocchi di puntatori ai dati.


Figura 1: struttura dell’inode

In tal modo se un file è composto da non più di 13 blocchi,
l’accesso ai dati richiede una sola operazione, files di maggiori dimensioni
richiedono due operazioni, etc.

Oltre alla tabella descritta l’inode contiene altre informazioni relative
alla gestione del file, quali ad esempio: la data di creazione, la data
di ultimo accesso, l’identificatore di proprietà, etc.

Allo scopo di consentire l’identificazione dei files mediante nomi scelti
arbitrariamente, vengono create le directory, ovvero tabelle che
associano una stringa alfanumerica (ovvero un “nome”) ad ogni inode. Le
directory sono memorizzate in normali files allocati con le stesse tecniche
dei files di dati. In ogni directory vengono creati automaticamente due
nomi di files speciali: ‘.’, associato all’inode del file che contiene
la directory stessa; ‘..’, associato all’inode della directory che contiene
il nome della directory stessa (padre).

Una conseguenza della struttura delle directory descritta e che costituisce
una caratteristica peculiare dei file system dei sistemi Unix è
che un inode può essere associato a più di un nome in directory
diverse, ovvero ciascun file può essere accessibile con più
nomi e path diversi. Per questo motivo la cancellazione di un file non
necessariamente corrisponde alla deallocazione del relativo inoide e dei
blocchi di dati, in quanto quest’ultima avviene solo quando viene cancellato
l’ultimo riferimento al file.

Il filesystem FAT

La struttura del filesystem classico dei sistemi DOS, che permane anche
nei sistemi Windows 95/98/NT (ma windows NT supporta anche un diverso
tipo di filesystem: NTFS) viene chiamata FAT dal nome
della sua componente principale. La FAT32 costituisce una variante
a 32 bit introdotta con la release 2 di Windows 95 con lo scopo principale
di consentire la gestione di partizioni di dimensioni maggiori di 2 Gbytes.

Il filesystem è costituito da quattro componenti:

  • FAT: File Allocation Table o Tabella di allocazione
    dei blocchi (vedi sotto).

  • Root directory: La directory di livello gerarchico più
    elevato (radice).

  • Clusters: i blocchi contenenti i dati dei files.

  • Sottodirectory: Le directory di livello inferiore alla radice.

La FAT è la struttura principale che consente l’accesso
ai dati relativi a ciascun file. È costituita da una tabella utilizzata
come lista (linked list): la posizione di ogni elemento nella tabella
identifica il cluster di dati corrispondente, mentre il valore contenuto
nell’elemento è l’indice dell’elemento successivo facente parte
dello stesso file. Due valori particolari indicano il cluster libero e
l’ultimo cluster di ogni file.


Figura 2: File Allocation Table

Nell’esempio di Figura 2, il file File A è composto, nell’ordine,
dai cluster 3, 7, 4, 2 mentre il file File B dai cluster 5, 9,
10. Le directory nel filesystem FAT sono memorizzate in files (tranne
la radice che viene memorizzata nella struttura del filesystem insieme
alla FAT). Ogni directory è in sostanza una tabella contenente
le seguenti informazioni:

    • Nome del file (11 caratteri)
    • Attributi
    • Data e ora
    • Puntatore al primo elemento nella FAT
    • Dimensione del file

Nei sistemi Windows 95/98/NT vengono inoltre utilizzate ulteriori elementi
della tabella per memorizzare le versioni estese dei nomi dei files (nomi
lunghi).

Limitazioni del filesystem FAT

Poiché gli elementi della FAT sono di lunghezza fissa, pari a
16 bits, non è possibile indirizzare più di 65535 clusters
e poiché un cluster non può essere maggiore di 32768 bytes,
il filesystem ha un limite massimo superiore di 2 Gbytes per la dimensione
della partizione. La dimensione del cluster (che deve essere un multiplo
intero della dimensione del blocco fisico con moltiplicatore pari ad una
potenza di due) viene scelta pari alla minima dimensione che consenta
un numero di cluster non superiore a 65535 ed è fissata al momento
della formattazione.

Quindi, poiché il filesystem non è in grado di gestire
la frammentazione di clusters, come invece abvviene nel filesystem ext2,
all’aumentare della dimensione delle partizioni corrisponde una dimensione
del cluster maggiore e di conseguenza una sempre minore efficienza di
uso dello spazio, in quanto l’ultimo cluster di ogni file è in
genere solo parzialmente utilizzato (in media resta inutilizzato uno spazio
pari alla metà della dimensione del cluster per ogni file).

Le due limitazioni citate hanno portato all’introduzione, a partire
dalla seconda release del sistema operativo Windows 95 (e in quelli successivi),
della versione a 32 bit della FAT (FAT32) che sostanzialmente
mantiene la stessa struttura, ma utilizza elementi a 32 bit, anziché
a 16, consentendo di definire cluster non superiori a 4 Kbytes anche per
dischi di grandi dimensioni.