In questa sezione, utilizzerò la parola ``filesystem'' in due differenti accezioni. Una riferendomi ai filesystem delle partizioni del disco o di altre periferiche, l'altra riferita al filesystem che vi viene presentato da un sistema Linux in esecuzione. In Linux, infatti, voi ``montate'' il filesystem di un disco all'interno del filesystem di sistema.
Nella sezione precedente ho detto che gli script di avvio verificano e
montano i filesystem. I comandi a cui vengono affidati questi compiti
sono rispettivamente fsck
e mount
.
L'hard disk può essere visto come un grande spazio su cui potete
scrivere tanti 1 e 0. Un filesystem impone su di esso una struttura, e
fa in modo che i file vengano visualizzati all'interno di directory
dentro altre directory... Ogni file viene rappresentato da un inode, che
definisce il file a cui fa riferimento, quando è stato creato e dove si
trova il suo contenuto. Anche le directory vengono rappresentate dagli
inode, ma questi dicono piuttosto dove trovare gli inode dei file in
esse contenuti. Se il sistema vuole leggere il file
/home/greg/bigboobs.jpeg
, prima trova l'inode della directory
radice /
nel ``superblocco'', poi troverà l'inode per la
directory home
tra quelli contenuti in /
, quindi
l'inode per la directory greg
tra quelli contenuti in
/home
, e infine l'inode per bigboobs.jpeg
, che indica
quali blocchi del disco devono essere letti.
Se aggiungiamo dei dati alla fine di un file, potrebbe accadere che
questi dati vengano scritti prima che l'inode sia aggiornato in modo da
sapere che i nuovi blocchi appartengono al file, o viceversa. Se venisse
a mancare la corrente in questo momento, il filesystem risulterebbe
corrotto. Ed è proprio questo genere di cose che fsck
tenta di
verificare e riparare.
Il comando mount
prende il filesystem di un dispositivo, e lo
innesta nella gerarchia che vedete quando usate il vostro sistema.
Generalmente, il kernel monta la radice del proprio filesystem in
modalità di sola lettura. Il comando mount
viene utilizzato per
rimontarlo in modalità di lettura e scrittura dopo che fsck
abbia verificato che tutto sia in ordine.
Linux supporta anche altri tipi di filesystem: msdos, vfat, minix, e così via. Le caratteristiche di ogni filesystem vengono descritte in modo astratto attraverso il file system virtuale (VFS). Ma su questo argomento non entrerò nei dettagli. Potete trovarne una trattazione su ``The Linux Kernel'' (vedete la sessione The Linux Kernel per la URL).
Un tipo di filesystem completamente differente viene montato su
/proc
. Questo contiene una rappresentazione di quello che
accade nel kernel. Qui esiste una directory per ogni processo che si
trova in esecuzione sul sistema, con il numero del processo come nome
per la directory. Sono presenti anche dei file come interrupts
o meminfo
, che vi informano sul modo in cui viene utilizzato
l'hardware. Potete imparare molto esplorando /proc
.
Sono presenti dei parametri per il comandomke2fs
, che crea un
filesystem ext2. Questi controllano la dimensione dei blocchi, il numero
di inode, e così via. Controllate la pagina di manuale di
mke2fs
per maggiori dettagli.
Ciò che viene montato, e dove, sul vostro filesystem, viene controllato
dal file /etc/fstab
. Anche per questo esiste una pagina di
manuale.
Create un piccolissimo filesystem, e guardatelo attraverso un editor esadecimale. Identificate gli inode, i superblocchi e i file in esso contenuti.
Sono sicuro che esistono degli strumenti che vi possano fornire una rappresentazione grafica del filesystem. Trovatene uno, provatelo e mandatemi una email con una bella recensione!
Leggete il codice del filesystem ext2 nel Kernel.
mount
fa parte del pacchetto util-linux, di
cui trovate un link su
Building a Minimal Linux System from Source Code mount
, fstab
, fsck
,
mke2fs
e proc
Documentation/proc.txt
nella directory dei
sorgenti del Kernel Linux illustra il filesystem /proc
./bin
, /sbin
e così via. Questo è un buon
riferimento se il vostro obiettivo è quello di creare un sistema
minimo ma completo.