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

FHS

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 sistema
  • lib - librerie principali
  • tmp - files temporanei e labili
  • etc - files di configurazione
  • dev - files speciali identificanti lo hardware
  • var - files ad elevata variabilità
  • usr - componenti e programmi aggiuntivi rispetto al minimo di release
  • export - 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 system shm - della memoria condivisa, file systems in RAM, ecc.

disco Fisso

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:

NomeTipo
Minixantico FS Linux
Ext2FS standard
Ext3FS standard con journalling (Red Hat 5.x)
Ext4FS standard ultimo (Red Hat 6.x)
Reisernuovo FS con journalling (Slackware)
GFSGlobal FS (Red Hat – per clusters)
ISO9660CD e DVD (molte varianti)
FAT e VFATvecchio DOS e nuovo Windows
NTFSnuovo Windows (RH: solo lettura)
UFSUnix FS (Solaris)
XFSSilicon 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

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.

Inode

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.

Directory

E' un file normale ma strutturato come tabella a due colonne:

  • il numero dell'inode
  • il nome del file corrispondente