1.3. Filesystem

Il disco durante la formattazione viene suddiviso in settori e tracce: possiamo immaginare le tracce come delle corone circolari concentriche di disco, mentre i settori sono degli spicchi di disco. Usando settore e traccia come coordinate è possibile individuare un blocco, l'unità più piccola indirizzabile su un disco. A questo tipo di suddivizione fanno eccezione i cdrom e i nastri: entrambi usano un tipo di organizzazione sequenziale, i nastri per ovvie ragioni, mentre i cdrom perché sono organizzati in una lunghissima spirale (veramente lo sono solo i cd-r e cd-rw, per facilitare il percorso del laser, per i cdrom normali è leggermente diverso). Nel caso dei cdrom però, la presenza di un filesystem (di solito iso9660, magari arricchito con estensioni joliet nei sistemi microsoft o rock-ridge nei sistemi linux, per gestire nomi e path lunghi, o i permessi) permette di accedervi in lettura in maniera diretta e casuale, come sui normali dischi magnetici. Un filesystem è un sistema per organizzare i file nei dispositivi in modo da avere un accesso diretto, senza il vincolo della sequenzialità.

Un filesystem quindi contiene file, mantenendo un elenco di essi e della loro posizione sul disco, eventualmente (quasi sempre...) suddivisi in più settori del dispositivo. L'organizzazione è gerarchica, specie in Unix, l'insieme di sistemi operativi di cui Linux fa parte: esiste un punto d'innesto principale ("/", root), a cui sono collegati altri punti di innesto secondari e così via. Questi punti di innesto si chiamano directory, e non necessariamente devono risiedere sullo stesso disco o addirittura sullo stesso computer. Infatti Unix permette di montare (agganciare o innestare) al filesystem principale altri filesystem, locali o remoti, che al termine devono essere smontati per poter essere eventualmente rimossi, ad esempio per floppy e cdrom. L'operazione di unmount (smontaggio) di un dispositivo effettua inoltre il sync (sincronizzazione) del suo contenuto, garantendo l'integrità dei dati. Infatti Unix non scrive immediatamente le modifiche effettuate, ma aspetta che altri processi più importanti rilascino risorse (tempo e % di occupazione della cpu) per effettuare il sync. Le directory possono contenere altre directory o file. Esiste quindi un'organizzazione ad albero, e per indicare un file se ne specifica il suo path (percorso) all'interno del filesystem principale, partendo da "/" e separando ogni nodo (directory) con il simbolo "/", ad esempio: /home/utente/testi/tesi.txt . Il filesystem Unix permette inoltre di avere informazioni aggiuntive sulla natura del file, tipo permessi di lettura, scrittura ed esecuzione, utente e gruppo proprietario, e genere del file in questione. Per sapere il tipo di file, basta dare ls -la e guardare il primo carattere della riga del file in questione, ad esempio:

..........
drwxr-xr-x  2 utente   gruppo   1024 Mar 23   1999   docs 
-rw-------  2 utente   gruppo   1024 Apr 12   2000   testo
..........
     

Tabella 1-1. Elenco dei tipi di file (in base al primo carattere)

  -     file regolare  
  d     directory  
  l     link (collegamento)  
  b     periferica a blocchi con buffer  
  c     periferica a caratteri con buffer  
  u     periferica a caratteri senza buffer  
  p     pipe FIFO  
  s     socket  

Le periferiche o dispositivi a caratteri permettono di accedervi solo un carattere alla volta (es: console, porta seriale, ecc.), mentre quelle a blocchi permettono di accedervi solo a blocchi di dimensioni stabilite (es: dischi). Solo quest'ultimo tipo di periferiche o dispositivi possono contenere un filesystem.

Nota: I CD audio puri (o la sola parte audio di quelli Mixed-mode) NON contengono filesystem, quindi non si possono montare: per ascoltarli basta usare un lettore CD, sempre ammesso di avere i permessi di accesso in lettura al dispositivo!

Da notare che non necessariamente, per il solo fatto di essere un dispositivo a blocchi, un disco deve contenere un filesystem. Un disco può comunque essere usato alla vecchia maniera sequenziale: infatti un disco senza filesystem è solo una serie di settori a partire dalla prima testina del primo cilindro. In questo senso, a volte si utilizzano i dischi come se fossero nastri, registrando e rileggendo i dati nella stessa sequenza naturale di settori, testine e cilindri. Tipici esempi sono i dischetti di avvio con l'immagine del kernel o i dischi di archivio multivolume creati da tar. Ricordate che i dischi senza filesystem non possono essere montati normalmente, ma necessitano del cosiddetto loopback device, compilato insieme al kernel. Le partizioni di swap sono gestite a blocchi, senza filesystem.

La maggior parte delle distribuzioni Unix e Linux seguono il Filesystem Structure Standard (FSSTND, ora evolutosi in FHS, Filesystem Hierarchy Standard), in modo da garantire una certa uniformità o comparibilità. Il FSSTND parte dall'idea di separare i file locali alla macchina da quelli condivisi (in rete locale o altro), e quelli a sola lettura da quelli accessibili anche in scrittura. Vediamo alcuni punti del FSSTND: