I Filesystem

Cominciamo con un minimo di nozioni generali.

Un supporto  è in mezzo fisico in grado di memorizzare informazioni. Tra gli esempi possiamo considerare il floppy disk, gli hard disks, perfino cdrom, zip, ls-120, e ramdisks. Un disco può (e solitamente lo è) essere diviso in uno o più partizioni.

Una partizione è semplicemente una parte del disco che è stata assegnata ad un particolare sistema di gestione dei files, spesso specifico di un sistema operativo. L'elenco delle partizioni presenti su un particolare disco si chiama tabella delle partizioni ( partition table ), o anche mappa delle partizioni (partition map) e può contenere piccoli programmi (ad esempio, il driver del dispositivo, oppure i programmi per il boot del sistema)

Un filesystem  comprende i metodi e le strutture di dati usate da un sistema operativo per tenere traccia dei file in una data partizione, cioè il modo in cui i file sono organizzati sui dischi. La parola viene anche usata per riferirsi ad una partizione o a un disco usato per immagazzinare i file, o al tipo del filesystem.

Attenzione adesso all' errore più comune, i sistemi Dos\Windows utilizzano un filesystem per così dire semplificato,limitato alla Fat o File allocation table che spesso viene IDENTIFICATO con il filesystem, questo non è esatto, normalmente la Fat fa PARTE del Filesystem, non è il filesystem.

Con l'avvento di WinXP e della sua Ntfs sui Desktop di tutti i giorni, questa specifica è fondamentale.

La differenza tra una partizione ed il filesystem che contiene è molto importante. Alcuni programmi operano direttamente sui settori del disco o della partizione; se c'è un filesystem esistente, questo verrà distrutto o seriamente danneggiato. La maggior parte dei programmi operano su un filesystem, e quindi non funzioneranno su una partizione che non ne contiene uno (o ne contiene uno del tipo sbagliato).

Prima che si possa usare un disco o una partizione come filesystem, deve essere inizializzato (formattato), e bisogna scriverci le strutture di dati per l'archiviazione. Questo processo si chiama creazione di un filesystem. Questo processo viene talvolta chiamato formattazione a basso livello.

Importante: Sui floppy disk, date le loro limitati dimensioni e prestazioni è ammesso una sola partizione e pertanto un solo filesystem. In questi casi si tende a confondere il significato di tre termini.

Attenzione questo rende implicito che tutto il resto si può partizionare!

Per accedere alle informazioni sul filesystem, le unità cui il sistema operativo fa riferimento sono i cluster e i settori.

Un settore è una struttura dipendente dalla formattazione fisica del supporto. Nel caso degli hard disk, i settori sono 'storicamente' grandi 512 bytes, ma in altri supporti (es: cd-rom) le loro dimesioni possono variare. Il settore è la minima unità accessibile dall'harware: i settori sono letti e scritti per intero, anche se occorre scrivere un solo byte.Un cluster (o block) è invece la minima unità accessibile a livello software, ed è in genere un multiplo dei settori. Questo semplifica la gestione dei dischi al crescere delle dimensioni del supporto, ma aumenta lo spreco (frammentazione). I Cluster sono grandi solitamente 2 settori (1Kb) nei floppy disk, ma hanno dimensioni fortemente variabili su altri supporti.

 Filesystem MS-DOS (FAT16)

Il filesystem FAT16 (e la sua variante FAT12, usata su floppy disks e hard disk di limitate dimensioni) è stato utilizzato da MS-DOS fino alla versione 7.0 ( Win95A) in maniera esclusiva, nelle versioni successive è utilizzabile ma pone grosse limitazioni.

Lo schema di gestione è piuttosto semplice: la FAT, o File Allocation Table, non è altro che una mappa dei cluster occupati collegati fra loro come una lista lineare. Per permettere al sistema operativo di trovare il file, la directory fornisce il numero del cluster nella FAT.

 I primi due cluster sono sempre riservati, per indicare il tipo di supporto e se si tratta di FAT12 o FAT16. Dato che la FAT è una regione molto importante del disco, solitamente ne viene fatta una copia per ridurre le possibilità di errore.

Questa struttura di directory, perfettamente adeguata ad un piccolo sistema degli anni '80 (hard disk assenti o con dimensioni 10-30 MB, potenze limitati) è resa obsoleta dal miglioramento delle tecnologie. Tra i proplemi principali citiamo:

Frammentazione 1°)esterna ed 2°)interna:

 

1°) I files possono occupare Cluster non contigui, quindi è necessario un lungo processo di riorganizzazione (deframmentazione) per evitare inutili movimenti delle testine dell'Hdd.

 

2°) Ogni file per quanto piccolissimo -1 byte- occupa un intero Cluster, e come vedremo questo porta ad un grosso spreco di spazio. (non ovviabile)

 

Dimensioni massime: Le versioni di dos inferiori alla 4 hanno una dimensione massima di partizione di 32MB. Quelle superiori hanno un limite di 2GB.

 

 

Dimensione partizione (MB)    Tipo FAT Settori per cluster Dimensione cluster (Kb)
1,38 (Floppy ) 12 1 0,5

0-15 

12 8 0,5
16-127  16 4
128-255 16 8
256-511  16 16
512-1.023  16 32 16 
1.024-2.047  16 64 32 
2.048-4.096 16 128 64 *

 

* Disponibile solo con Win Nt; 2K; Xp.

L' Unica miglioria degna di nota, è stata L' Introduzione della vFat con Win95 ( Dos 7.0), che permette l'uso dei nomi lunghi - 255 caratteri - anche se con un artificio complesso, che porta alla formazione di "Frammenti di nome file lungo" quando i files vengono manipolati in ambiente Dos. In pratica il testo eccedente il formato classico "8+3" contenuto nel nome di file, diventa parte del file, viene cioè "scritto a parte" ne nelle fat, ne con il contenuto del file, comunque con uso di spazio disco,  quindi quando viene cancellato, può lasciare frammenti di file orfani.

Filesystem FAT32

FAT32 (File Allocation Table 32) è un sistema che è stato adottato a partire dal MsDos 7.1, (Windows95 OSR2, detto anche Windows95B) che introduce delle migliorie:

Dato che la FAT è a 32 bit anziché 16, supporta partizioni sino a 2 Terabytes.

La frammentazione interna era fortemente ridotta finchè gli Hdd avevano dimensioni umane, come possiamo notare dalla sottostante tabella:

 

 

Dimensione partizione (GB)    Tipo FAT Settori per cluster Dimensione cluster (Kb)
0,256 1.01 32 1 0,5
1.02 2.01 32 2 1
2.02 4.01 32 4 2
4,02 8,01 32 8 4
8,02 16,02 32 16 8
16,03 32,03 32 32 16
 32,04 2048 32 64 32

 

Ovvio che con gli attuali "mostri" da 40Gb e più, se non facciamo delle partizioni ristiamo da capo e 12 con i cluster da 32Kb e con un enorme spreco di spazio.

Notare come le informazioni scritte in "Giallo" siano state tenute nascoste, o perlomeno non divulgate. Del resto Windows di "Default" fà dei cluster da 4Kb, ed è necessario un programma come Partition Magic della Power Quest, o essere a conoscenza del comando - non documentato - Format <lettera di unità> /z:n<n= N°settori per cluster > così facendo possiamo decidere a priori le dimensioni dei cluster*, in base al calcolo Numero settori/2= Kbyte per cluster.

Importante notare che al diminuire delle dimensioni dei cluster, ne cresce a parita di dimensioni il numero, e quindi diminuisce LA VELOCITA' DEL FILESYSTEM.

Questo parametro può essere usato anche per AUMENTARE la dimensione dei cluster in quei sistemi un pò vecchi che altrimenti risulterebbero troppo lenti

 

*Sempre nel rispetto delle dimensioni MAX della partizione.

Es: Non posso fare dei cluster da 2K in una partizione di 6Gb,ma posso passare da 4K a 1K in una partizione da 1,9Gb. Per converso, posso passare da 4K ad 8K una partizione da 7Gb per Guadagnare un pò di velocità!

Vantaggi & .....

Fat16, è un pò la mamma di tutti i filesystem, quindi viene riconosciuta da tutti quelli usati nel mondo Pc, è veloce, permette, anche a Pc poco dotati, di limitare i tempi di accesso al disco, la sua organizzazione ( Byte usati durante la formattazione ) richiede il minimo indispensabile, insomma il massimo di compatibilità e velocità.

Fat32, sinceramente non mi è mai piaciuta un granchè, aggiunge solo il supporto a dischi di grandi dimensioni ( che, ammetto, non è poco ) ma toglie un sacco di attributi positivi. -vedi limiti-

Limiti 

Fat16 Beh, si vede dalle tabelle soprastanti, Fat16 ci và estremamente stretta come dimensioni, limite  8+3 nei nomi di file, fino alla vFat

Fat32 Assoluta incompatibilità con tutti i sistemi precedenti, (girando sul Web il sottoscritto ha trovato la maniera di leggere qualsiasi filesystem da DOS, ma NON la Fat32).

E' più lento (e non di poco) di FAT16.

Non è compatibile " Naturalmente " con altri Sistemi operativi

Non risolve i problemi di frammentazione esterna

Entrambe

Non è presente alcun concetto di possesso di files, di protezione e similare.

Sistemi Operativi che le usano

Tutti i programmi Microsoft fanno uso della barra retroversa '\' anziché della barra '/', cosa che crea notevoli problemi ancora oggi nel caso di ambienti OS misti.

WinNT e derivati potrebbe farne a meno, ma per ragioni di compatibilità ne mantiene l'uso, stesso discorso per la metafora delle lettere di unita, al posto di un "nome".

Filesystem NTFS

NTFS, ovvero NT File System, è il filesystem più robusto e sicuro per Windows NT. Tra le sue caratteristiche principali prevede:

Controlli di accesso e privilegi diversi a seconda della proprietà di un file.

Possibilità di compressione in modo trasparente

Recuperabilità (journaling, vedi poco oltre) in caso di errori.**

Supporto per il filesystem Macintosh

FAT è più veloce su volumi piccoli, ma NTFS funziona meglio su partizioni grandi, a partire da 500 MB.

**Journaled

La richiesta dei nuovi sistemi operativi, soprattutto (ma non solo) nel caso di server, richiede una una forte tolleranza a guasti ed errori di sistema. Consideriamo, ad esempio il caso della modifica di un file: i dati nuovi sovrascrivono quelli vecchi, man mano che si procede nella scrittura. Prendiamo allora il caso di un errore (caduta tensione, blocco sistema) durante tale operazione: avremo (nella migliore delle ipotesi) metà dei dati modificati, metà no; alternativamente, potremmo avere blocchi segnati come liberi che in realtà sono occupati.

Per recuperare questi errori si fa appello a programmi come scandisk, Norton Utilities o fsck.ext2, ma non sempre questi programmi riescono nell'intento e, in ogni caso, il vostro sistema è fermo durante il controllo.

Un journaling filesystem non differisce molto dalle sue versioni precedenti, ma aggiunge un ``diario di bordo'' delle modifiche: durante ogni transazione (un'insieme di operazioni che non possono essere divise) di qualsiasi tipo, viene dapprima scritta in una sezione speciale del filesystem sotto forma di voce del ``diario''. Quindi, si effettua la modifica e, per finire, si segna sul diario che la modifica è andata a buon fine (``passed ''). L' utente medio di Pc neanche sà che un livello di sicurezza del genere è possibile, e comunque di solito non lo " lega " al filesystem, ma al sistema operativo che lo usa! Non è così! L'implementazione di un nuovo filesystem non nega l'uso di un vecchio Software.

Ho appena installato un vecchio software a 16Bit in Win2000Pro sul suo NTFS5

Da sempre quasi tutti i programmi Dos girano allegramente in Fat32, in breve al software non gliene frega niente del supporto e di come è formattato, ma solo che il Sistema Operativo che lo usa sia presente, ed abbia implementato il Filesystem in uso.

Filesystem Macintosh (HFS e HFS+)

HFS (Hierarchical File System), noto anche come Macintosh Standard Format, è un formato introdotto nel 1985 per sostituire MFS (Macintosh Filing System), un sistema rudimentale per l'accesso ai floppy disk da 400Kb.

Il sistema permette di gestire 32.767 files per ogni directory e files fino a due Terabytes. I blocchi di allocazione (clusters) sono di dimensione variabile, stabilita in fase di formattazione, in funzione delle dimensioni della partizione. Dato che HFS usa un indirizzo a 16 bit, come FAT16, si verificano due inconvenienti

Il numero massimo di files presenti su una partizione è 65536

Al crescere delle dimensioni della partizione, cresce anche la partizione interna.

Le directory permettono di memorizzare nomi di files, memorizzando le maiuscole e le minuscole (anche se Pippo e pippo sono considerati lo stesso file). Le directory sono organizzate come un B*tree, in modo accelerare la ricerca e lo spostamento di un files. I nomi dei files possono essere lunghi sino a 31 caratteri, e il carattere per la ricerca del path è il doppio punto ':'.
Non esiste alcun concetto di ``estensione'' in senso classico. Tutti i files di Macitosh sono considerati divisi in due parti, o ''forks': il data fork e il resource fork. Il primo è del tutto equivalente ald un file classico. Il secondo contiene informazioni specifiche sul file e sul suo uso: gli attributi, il tipo di file, il programma che ha creato il file, la date di creazione, modifica, l'icona e altri dati ancora. Questa divisione di due forks crea notevoli problemi di compatibilità quando un file deve essere trasferito su altri supporto non HFS (per esempio FAT16 o via Internet), dato che i programmi tendono a ``dimenticare'' il resource fork. Per questo motivo esiste un formato speciale, detto ``Macbinary'', che trasferisce tutte le informazioni di entrambi i fork in un file unico, adatto ad essere trasferito via internet
Un filesystem HFS deve essere ``montato'' per poter essere utilizzato. Solitamente è il sistema operativo che si occupa di tutto, anche di espellere il dischetto, per evitare che l'utente compia errori.

HFS+

Per ovviare ad alcuni di questi problemi, anche Apple ha creato una estensione di HFS, detta HFS+, a pratire dal Sistem 8.1. Anche in questo caso, vi sono i problemi di compatibilità all'indietro in modo analogo a quanto avvenuto con FAT32 - FAT16. Ora è possibile avere 4 miliardi di files su ogni partizione e i blocchi di allocazione sono conseguentemente molto più piccoli (e meno rigidi di FAT 32, anche se la dimensione minima di un disco è 32MB).
HFS+ prevede una espansione per nomi di files fino a 255 caratteri e supporto Unicode diretto.

 

 Filesystem Unix (ext2)

La maggior parte dei tipi di filesystem UNIX hanno una struttura generale simile ed utilizzano la stessa terminologia, anche se i dettagli esatti cambiano abbastanza. Essi differiscono notevolmente da tutti i filesystem che abbiamo visto sinora. La struttura centrale del filesystem Unix è il blocco, che possiamo equiparare a un cluster in terminologia DOS. Dal punto di vista logico si distinguono in quattro ovvero, blocco dati, superblocco, node e blocco directory.

Il blocco di dati è una zona nel disco utilizzata per contenere dati, corrispondente a un multiplo della dimensione del settore fisico del disco stesso. Il contenuto di un file può essere distribuito su più blocchi di dati.

Il superblocco contiene tutte le informazioni relative alla struttura generale del filesystem e, tra le altre cose, viene modificato un flag particolare quando il filesystem viene montato. Nel momento in cui viene smontato, l'ultima cosa a essere modificata nel filesystem è il flag di apertura che viene riportato al livello normale. In questo modo, ogni volta che si monta un filesystem Unix è possibile verificare se questo era stato chiuso (smontato) correttamente. Se risulta che l'attività nel filesystem non era stata conclusa correttamente si può temere che i dati siano danneggiati.

L'elenco più o meno completo delle informazioni del superblocco sono:

 

Conteggio degli inode e dei blocchi, dei blocchi riservati, loro dimensione

Conteggio dei blocchi e inode liberi

Puntatore al primo blocco

Data di montaggio, di scrittura, numero di montaggi, della partizione

Nome del volumet, Directory ove è stato montato l'ultima volta.

 

L' inode è una struttura abbastanza complicata sufficiente a definire le caratteristiche e il contenuto dei file. L'inode contiene le seguenti informazioni:


modo

identificatore utente (UID)

identificatore gruppo (GID)

data creazione inode

data ultimo accesso

data ultima modifica

dimensione

numero blocchi utilizzati

numero riferimenti

puntatori diretti a blocchi dati (x12)

puntatore indiretto (singoli) ai blocchi dati

puntatore indiretto (doppio) ai blocchi dati

puntatore indiretto (triplo) ai blocchi dati

 

La maggior parte delle informazioni sono autoesplicative, ma i puntatori ai blocchi dati necessitano una ulteriore chiarificazione:
i primi dodici puntatori sono numeri diretti di inode, che contengono i dati del file. Nel caso le dimensioni del file superino i dodici blocchi, il 13  puntatore non punta più direttamente ai dati, ma un blocco indice che contiene puntatore ad altri 15 blocchi. Se anche questi non bastassero, la voce successiva contiene l'indirizzo di un blocco indice di secondo livello, in cui ogni elemento punta a un blocco indice, che a sua volta punta a un blocco dato. Nel caso neppure questo sufficiente, l'ultima voce dell'inode è un puntatore di terzo livello.

In questo modo, un file di ridotte dimensioni (fino a 48K nel caso di blocchi da 4k) utilizza un solo inode, e permette di allocare a file spazio in modo più efficiente che con un normale sistema ``flat''. Inoltre, risulta essere meno sensibile ai danni e ai virus, dato che i puntatori agli inode sono sparsi in tutto il filesystem e meno sensibile al problema della frammentazione esterna.

Una directory è un file contenente un elenco di nomi di file abbinati al rispettivo inode.
Più precisamente, è un fil e che ha il compito di raccogliere una serie di riferimenti ad altri inode, a cui abbinare altre informazioni, come il nome e i permessi. Le voci contenute in una directory sono dei collegamento (indicati più precisamente come hard link) a degli inode. La struttura di directory permette di raggiungere i file per nome (anziché per numero di inode riferito alla tabella di inode. ), organizzandoli nel modo consueto, attraverso diramazioni più o meno accentuate.

La struttura della directory risulta quindi in una semplice lista con il puntatore all'inode del file

Le voci di una directory contengono ognuna un riferimento a un inode, ma più voci della stessa directory, o di directory differenti, possono puntare allo stesso inode. Quando si cancella un file, si cancella la voce della directory e il numero di riferimenti contenuti nell'inode viene ridotto. Quando questo raggiunge lo zero, quel numero di inode torna a essere disponibile.
Esiste un altro tipo di link, molto utilizzato, detto soft link o symbolic link. Si tratta di un file speciale che contiene un percorso ad un altro file. Il file link ``eredita'' tutte le proprietà del file bersaglio, dato che non possiede un inode proprio. Date queste caratteristiche, il link può essere anche in un altro filesystem. Tutto questo risulta trasparente all'utente.

In aggiunta a queste, comuni a tutti i filesystem di tipo Unix, il filesystem ext2, il più diffuso negli ambienti Linux, ha alcune caratteristiche ulteriori, che possono essere fissate con il comando chattr. Per ulteriori dettagli, man chattr.

Filesystem Unix

Al contrario di altri filesystem, Unix prevede un unico albero. Ogni nuovo dispositivo deve essere montato in un qualche punto dell'albero, con il comando mount, ``cancellando'' il punto dell'albero in cui viene montato. Per l'utente, la posizione di un file su questo o quell'altro dispositivo è (quasi) trasparente. I nomi dei files sono di 32 bytes (in tutte le implementazioni) e spesso fino a 255 caratteri (ext2). Vi è differenza tra i caratteri maiuscoli e minuscoli. Lo spazio e i simboli speciali sono ammessi come parte di filesystem ma vivamente sconsigliati. Il carattere per la determinazione del path è la barra '/' (mentre i filesystem DOS e derivati usano la barra retroversa)

Filesystem per Linux e Unix

I journaled filesystem sono ancora giovani nel mondo Unix, cosa indicata dalla presenza di vari tipi di filesystem. Più precisamente i candidati più rappresentativi sono:

ResierFS. Sistema molto rapido, supportato da alcune distribuzioni (SuSE, Mandrake), ma non può convertire partizioni esistenti

Ext3. Di recente giunto a una versione definitiva. Supportato da RedHat ed è compatibile all'indietro con ext2. Di più, una partizone ext3 può essere ``vista'' come una partizione ext2.

JFS. Proposto da IBM e particolarmente adatto alle soluzioni ``enterprise'', seppure fortemente ottimizzato per la versione Unix di IBM

Tra essi, il più maturo è sicuramente ReiserFS. Usa una variante di un algortimo ad albero bilanciato. Le prime indicazioni danno ReiserFS in vantagggio per file molto grandi e molto piccoli.

 

Beh signori, può essere che l'ultima parte non sia aggiornatissima, oppure  contenga delle inesattezze/superficialità, ma chiaramente è in corso di verifica, io a Linux ed il suo filesystem ci sono appena approdato !

Quando e se necessario inserirò i dovuti aggiornamenti.

 


 

| Home | Chi sono | Software | Sistemi Operativi | Integrazione | L' Hardware | Prestazioni | Un po' di Storia