Il File System Hierarchy
Il FileStore
E' l'albero globale di tutte le directory e i file visibili
- E' l'unione di più file systems
- Tramite operazione di 'mount'
- Solo l'amministratore può eseguire il mount
- Ogni file system è montato sotto una directory
Non esistono identificativi di drive stile A: B: C: ecc.
- Tutto è visibile sotto un'unico albero delle directory
- La directory principale è la directory radice - root -
/
- In alcuni sistemi operativi (Solaris) è la directory di login dell'utente 'root'
Il nome FileStore in realtà non è più usato.
Ora si tende a chiiamarlo File System Hierarchy (FSH) o anche solo il File System per antonomasia
E' molto importante differenziare tra i termini:
- File System - il contenuto organizzato di una partizione, reale o virtuale
- FHS - la gerarchia di File <Systems organizzati in un unico albero
Tutti i sistemi operativi Unix/Linux a livello directories principali - sotto la radice - hanno alcune directories standard con scopi definiti (FHS Standard):
bin
- eseguibili principali di sistemalib
- librerie principalitmp
- files temporanei e labilietc
- files di configurazionedev
- files speciali identificanti lo hardwarevar
- files ad elevata variabilitàusr
- componenti e programmi aggiuntivi rispetto al minimo di releaseexport
- files condivisibili in rete (nonsempre c'è)home
- contenente le sottodirectories di login degli utenti
File System
Organizzazione dei file in un contenitore.
Questo può essere:
- Fisico - contenuto in una partizione di disco o altro dispositivo di storaggio
- Logico - fisicamente organnizato su più partizioni o dispositivi di storaggio, p.es. in rete, ma visibile e accessibile come unico file system
- Virtuale - organizzazione simile a un file system (gestita dalle opportune system calls), ma contenente file speciali che non occupano spazio fisico - Anche detto File System 'Esotico'
- Es. file system
proc
- dei processi, file systemshm
- della memoria condivisa, file systems in RAM, ecc.
- Es. file system
Mentre un disco fisso è unastruttura tridimensionale, viene di solito rappresentato come una 'scatola' divisa in partizioni.
Il loro numero e gestione a basso livello dipende dal firmware di sistema. Con il caro vecchio BIOS vi erano quattro partizioni primarie di cui una poteva contenere ulteriori partizioni estese.
Il numero di tipi diversi di file system riconosciuti da Linux è notevole:
Nome | Tipo |
---|---|
Minix | antico FS Linux |
Ext2 | FS standard |
Ext3 | FS standard con journalling (Red Hat 5.x) |
Ext4 | FS standard ultimo (Red Hat 6.x) |
Reiser | nuovo FS con journalling (Slackware) |
GFS | Global FS (Red Hat – per clusters) |
ISO9660 | CD e DVD (molte varianti) |
FAT e VFAT | vecchio DOS e nuovo Windows |
NTFS | nuovo Windows (RH: solo lettura) |
UFS | Unix FS (Solaris) |
XFS | Silicon Graphics, ora il default in Red Hat 7.x |
Il numero di FS riconosciuti dipende dalla presenza o meno di device drivers
Alcuni file systems sono proprietari, e alcune distribuzioni enterprise di Linux non hanno la licenza di accedervi pienamente.
Altri sono soggetti a licenza.
Non viene considerata una buona idea utilizzare un file system che non sia Open Source.
Rapporti d'uso del File System
# fdisk -l /dev/sda
- Lista le partizioni se boot BIOS (privilegiato)
# parted → print → quit
- Lista le partizioni se boot EFI (privilegiato)
$ df -h
- Rapporto su spazio usato da ogni file system
$ du -s directory
- Spazio totale usato dalla directory
Gli esempi indicano con un #
che sono richiesti privilegi amministrativi per il comando, e con $
la possibilità di darlo come utenti comuni.
Struttura di un File System
Il diagramma è illustrativo e in realtà non esiste nessun file system specifico che abbia questa struttura interna.
Vi sono essenzialmente tre elementi importanti di un File System:
- il superblocco - che contiene l'indice o sommario di tutto il file system, e i puntatori alle varie zone
- la tabella degli i-node - strutture ciascuna delle quali gestisce un file
- i blocchi dati - le unità di allocazione dei file
Il superblocco è critico per la integrità, e in sua assenza nessun dato sarebbe più accessibile. Tutti i file system moderni hanno accorgimenti per replicare parecchie volte il superblocco.
I blocchi dati sono tipicamente di dimensione 4 KB, variabili forse da 1 a 8 KB. Alcuni file systems non usano blocchi di dimensione fissa ma estensioni di dimensioni variabili. Lo spreco medio è di mezzo blocco per file. Un tempo ci si preoccupava dello spreco ed esistevano degli algoritmi bizantini per la gestione di 'frammenti' di un blocco, per l'allocazione dei file. Ora il disco fisso è economico, i file sono più grandi, e non c'è più la preoccupazione di ottimizzare lo spazio disco.
Ogni i-node gestisce un file. Senza gli i-node non sarebbe possibile allocare file anche con spazio disco sufficiente. Fortunatamente i file system moderni allocano tanti i-node quanti sono i blocchi dati disponibili.
Alcuni file system mantengono gli i-nodes in una struttura ad albero bilanciata, per massimizzare l'efficienza in lettura. Altri sparpagliano appositamente gli i-node per minimizzare la frammentazione. Ogni file system ha algoritmi propri di gestione che migliorano alcuni campi architettonici, ma non tutti.
Come il motto della Nasa: "Faster, Cheaper, Safer. Choose two."
i-Node
Un i-node in Ext2-Ext4 ha la struttura indicata.
Il campo chiave è lo i-number
, intero univoco nel file system.
Notare, non univoco nel FSH, ci possono essere file diversi con lo stesso i-number, ma in file system diversi tra quelli che compongono il FHS. Il campo i-number per antonomasia viene anche detto solo lo i-node.
Lo si può vedere dando il comando ls
con l'opzione -i
.
La prima sezione di un i-node contiene le informazioni su file:
- utente possessore
- gruppo possessore
- dimensione in bytes
- permessi d'accesso
- numero di riferimenti
- date di creazione, modifica, accesso
- ecc.
Sono tutte informazioni visualizzabili col comando ls
e le sue varie opzioni.
La seconda sezione contiene i puntatori ai blocchi dati.
I primi (circa 10) sono puntatori diretti ai primi blocchi del file.
Segue un puntatore indiretto, che punta ad un blocco di puntatori.
Segue un secondo puntatore, doppiamente indiretto, che punta ad un blocco di puntatori, ciascuno dei quali punta ad un secondo blocco di puntatori.
Se ancora non bastasse, un altro puntatore successivo compie tre livelli di indirezione.
Directory
Si è notato che il nome di un file non è conservato nell'i-node.
L'elemento di file system che contiene il nome del file è la directory.
E' un file normale ma strutturato come tabella a due colonne:
- il numero dell'inode
- il nome del file corrispondente