4.9 mount e umount
Per poter utilizzare un filesystem in un sistema Unix-like, è necessario che questo venga
agganciato al directory tree, ovvero venga visto come una directory all’interno dell’albero delle
directory, per mezzo del comando mount (man page mount(8)). Si parla pertanto di
“montaggio” (mounting) del filesystem. Questa operazione informa il sistema operativo della
presenza del filesystem considerato, associandolo ad una directory all’interno della struttura
logica (albero delle directory), che rappresenta il mount-point (punto di montaggio) del
filesystem.
____________________________________________________________________
Comando: mount
Path: /bin/mount
SINTASSI
$ mount [option] [device] [dir]
DESCRIZIONE
-
option indica le opzioni di funzionamento di mount. Può assumere i seguenti
valori
-
-a monta tutti i filesystem elencati nel file /etc/fstab;
-
-F monta l’elenco di filesystem in maniera parallela (non può essere
utilizzato per montare filesystem in mount-point dipendenti come
/usr e /usr/spool);
-
-f (fake) esegue la procedura di mount senza montare nessun filesystem
(utile per il debug);
-
-h mostra un aiuto sommario di mount;
-
-l visualizza le etichette (v. file /etc/fstab) relative ai filesystem
montati;
-
-L label
monta il filesystem identificato dall’etichetta label;
-
-n monta il filesystem senza aggiornare il file /etc/mtab;
-
-O opt limita il mounting dei filesystem che hanno l’opzione specificata da
opt (che può essere anche un elenco di opzioni separate dal carattere
‘,’). Alle opzioni può essere aggiunto il prefisso no per indicare che
il filesystem con tale opzione non deve essere montato;
-
-o optlist
specifica le opzioni per il mounting del filesystem (le opzioni sono
separate tra loro dal carattere ‘,’). Le opzioni per il mounting sono
-
async indica che tutto l’input/output (I/O) relativo al filesystem
deve essere effettuato in maniera asincrona;
-
atime aggiorna la data/ora di accesso agli inode ad ogni accesso
(default);
-
auto il filesystem può essere montato con l’opzione -a;
-
defaults
utilizza le opzioni di default: rw, suid, dev, exec, auto,
nouser e async;
-
dev interpreta i file di dispositivo presenti sul filesystem;
-
exec permette l’esecuzione dei file eseguibili presenti sul
filesystem;
-
_netdev
indica al sistema di eseguire il mounting del filesystem
dopo l’attivazione dell’interfaccia di rete poiché il filesystem
risiede su un dispositivo che richiede l’accesso tramite la rete;
-
noatime
non aggiorna la data/ora di accesso agli inode ad ogni accesso
(per velocizzare i tempi di accesso ai file);
-
noauto il filesystem può essere montato soltanto in maniera esplicita
(l’opzione -a non fa il mounting del filesystem che riporta
questa opzione);
-
nodev non interpreta i file di dispositivo presenti sul filesystem;
-
noexec non permette l’esecuzione dei file eseguibili presenti sul
filesystem;
-
nosuid rende nullo l’effetto del bit suid sugli oggetti del filesystem;
-
nouser proibisce agli utenti (tranne al superuser) di eseguire il
mounting del filesystem (default);
-
owner come user ma con la restrizione che l’utente deve essere il
proprietario del relativo file di dispositivo;
-
remount
esegue nuovamente il mounting del filesystem (per cambiare
le opzioni di mounting senza cambiare il mount point);
-
ro esegue il mounting del filesystem in modo da permettere
l’accesso agli oggetti in esso contenuti in sola lettura (read
only);
-
rw esegue il mounting del filesystem in modo da permettere
l’accesso agli oggetti in esso contenuti sia in lettura che in
scrittura (read/write);
-
suid abilita l’effetto del bit suid sugli oggetti del filesystem;
-
sync indica che tutto l’input/output (I/O) relativo al filesystem
deve essere effettuato in maniera sincrona;
-
user permette ad un utente specifico di eseguire il mounting del
filesystem. L’utente che esegue il mounting viene annotato
nel file /etc/mtab in maniera tale che lo stesso utente
possa poi eseguire l’operazione inversa (unmount) su tale
filesystem. Questa opzione implica noexec, nosuid, e nodev
a meno che non venga esplicitamente indicato diversamente
nella relativa riga del file /etc/fstab;
-
users permette a tutti gli utenti di eseguire il mounting del
filesystem. Questa opzione implica noexec, nosuid, e nodev
a meno che non venga esplicitamente indicato diversamente
nella relativa riga del file /etc/fstab;
-
-r monta il filesystem in sola lettura (read-only);
-
-s fa in modo che il montaggio non dia errore se il filesystem non supporta
alcune opzioni di montaggio;
-
-t fstype
indica il tipo di filesystem da montare secondo quanto riportato da fstype,
che può assumere i valori riportati nella tab. 4.2;
Se tale opzione non è specificata oppure è specificato autofs mount prova a
leggere l’eventuale superblocco del filesystem per riconoscerne
il tipo. Se tale tentativo fallisce, mount tenta di leggere il file
/etc/filesystems e se non esiste prova con il file /proc/filesystems:
mount tenta di montare i filesystem dei tipi specificati in tali
file.
-
-U uuid
monta il filesystem identificato dallo UUID (Universally Unique IDentifier)
specificato da uuid;
-
-v imposta la modalità verbosa;
-
-V mostra la versione di mount;
-
-w monta il filesystem in lettura e scrittura (read/wtite) (questa è la modalità
di montaggio di default);
-
--bind monta un filesystem anche in un altro mount-point in maniera che sia
accessibile da più directory;
-
--move sposta un filesystem in un altro mount-point;
-
device è il file di dispositivo contenente il filesystem da montare;
-
dirè il mount-point (directory) nel quale montare il filesystem contenuto nel file di
dispositivo indicato da device;
Esistono inoltre delle opzioni di mounting specifiche per ogni tipo di filesystem, per le
quali si rimanda alla man page mount(8).
Se non viene specificato nessun argomento, mount visualizza il contenuto del file
/etc/mtab.
________________________________________________________________________
Ad esempio, la root directory viene montata, all’avvio del sistema, nel mount-point ‘/’ che
rappresenta appunto la radice dell’albero delle directory.
L’albero delle directory di un sistema Unix-like può dunque essere composto da più
filesystem, ognuno dei quali è montato in uno specifico mount-point. Ad esempio è possibile
montare il filesystem (sempre che questo sia un filesystem di quelli supportati da GNU/Linux)
contenuto nella partizione /dev/hdb3 (terza partizione del secondo hard disk ATA) nel
mount-point /mnt/myfs, ovvero una directory che deve esistere nel filesystem sul
quale si vuole “innestare” /dev/hdb3; in questo modo sarà possibile accedere alla
struttura di tale filesystem attraverso la directory /mnt/myfs. Questo modo di montare
i filesystem fa sì che se un filesystem secondario (non quello montato come root
directory), come ad esempio /dev/hdb3, per qualche motivo viene danneggiato, il
filesystem principale non ne risente e semplicemente non si potrà accedere al filesystem
danneggiato attraverso il suo mount-point (/mnt/myfs), ma il sistema continuerà a
funzionare.
L’exit status
di mount ha un significato legato ad ogni singolo bit del valore stesso, secondo quanto
riportato nella tab. 4.14 (i bit sono numerati in maniera crescente dal LSB al MSB). Un bit
impostato ad 1 implica il fatto che si è verificato l’evento ad esso correlato.
| Tabella 4.14: | Significato dell’exit status di mount. |
|
Ad esempio, il comando
# mount -t ext2 /dev/hda2 /root
monta il filesystem di tipo ext2 contenuto nella seconda partizione del primo
dispositivo ATA (hard disk) nella directory /root, ovvero la directory /root è il
mount-point della seconda partizione del primo hard disk ATA. Per l’utente la cosa è
trasparente: l’accesso alla directory /root è analogo all’accesso ad una qualunque altra
directory, ma il suo contenuto è quello della seconda partizione del primo hard disk
ATA.
Il comando
# mount -t auto /dev/fd0 /mnt/floppy
monta il filesystem (riconoscendone il tipo in maniera automatica) contenuto nel primo floppy
disk (il floppy disk non è suddiviso in partizioni) nella directory /mnt/floppy. L’accesso al
contenuto del floppy disk avviene quindi per mezzo dell’accesso alla directory /mnt/floppy.
Le operazioni compiute su tale directory vengono effettivamente compiute sul floppy
disk.
Il comando
# mount -t iso9660 -o ro /dev/hdc /mnt/cdrom
monta, consentendo soltanto l’accesso in lettura, il filesystem contenuto nel terzo dispositivo
ATA (in questo caso si suppone si tratti di un CD-ROM) nella directory /mnt/cdrom.
L’accesso al contenuto del CD-ROM avviene quindi per mezzo dell’accesso alla directory
/mnt/cdrom.
Un filesystem può essere anche “smontato” con il comando umount (man page
umount(8)).
____________________________________________________________________
Comando: umount
Path: /bin/umount
SINTASSI
$ umount [option] [device]
DESCRIZIONE
-
option indica la modalità di funzionamento di umount. Può assumere i seguenti
valori
-
-V visualizza la versione di umount;
-
-h visualizza un aiuto sommario di umount;
-
-v indica di attivare la modalità verbosa;
-
-n “smonta” il fiesystem senza aggiornare il file /etc/mtab;
-
-r nel caso in cui lo “smontaggio” non abbia esito positivo, tenta di
“rimontarlo” in sola lettura;
-
-d nel caso in cui il filesystem da “smontare” sia relativo ad un loop
device, libera anche il loop device (v. sez. 4.10);
-
-a indica di “smontare” tutti i filesystem elencati nel file /etc/mtab
(tranne il filesystem /proc);
-
-t vfstype
indica di “smontare” soltanto i filesystem del tipo indicato da vfstype
(può specificare un elenco di tipi di filesystem separato dal simbolo
‘,’). I tipi di filesystem sono elencati nella tab. 4.2. I tipi di filesystem
ai quali è preposto il prefisso ‘no’ non vengono “smontati”;
-
-O opt indica di “smontare” soltanto i filesystem che sono stati “montati”
(file /etc/fstab) con le opzioni indicate da opt (può essere
specificato un elenco di opzioni separate dal simbolo ‘,’). Ad ogni
opzione può essere preposto il prefisso “no” che indica esplicitamente
di non operare su tali filesystem;
-
-f indica di forzare lo “smontaggio” (ad esempio nel caso di NFS
irraggiungibile);
-
-l indica di effettuare un lazy unmount, cioè di “smontare” il filesystem
subito e di cancellare tutti i riferimenti al filesystem non appena
questo non è più occupato (un filesystem è occupato quando alcuni
file di esso sono aperti, o la working directory di qualche processo si
riferisce ad una directory del filesystem);
-
device indica il mount-point (directory) o il dispositivo contenente il filesystem da
“smontare”;
Se non viene specificato nessun argomento, umount visualizza il contenuto del file
/etc/mtab.
________________________________________________________________________
I comandi mount e umount mantengono l’elenco dei filesystem correntemente montati nel
file /etc/mtab (anche il file /proc/mounts ha un contenuto simile) che ha la stessa sintassi del
file /etc/fstab.
Un esempio del contenuto del file /etc/mtab è riportato di seguito.
/dev/hda3 / ext3 rw 0 0
none /proc proc rw 0 0
usbdevfs /proc/bus/usb usbdevfs rw 0 0
/dev/hda2 /boot ext3 rw 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
none /dev/shm tmpfs rw 0 0
/dev/hda1 /mnt/windows vfat rw 0 0
Nella fig. 4.11 è riportato un esempio di un directory tree (ogni nodo rappresenta una
directory) in cui sono evidenziati, ognuno con un proprio colore, i diversi tipi di filesystem da
cui esso è composto. Come già spiegato precedentemente, l’albero delle directory di un sistema
Unix-like è sempre costituito da una sola root directory, la ‘/’. Altri filesystem possono
essere inseriti in tale albero, mediante il comando mount, per mezzo del quale la
root directory di un filesystem viene inserita (montata) in un mount-point (una
directory) dell’albero. La stessa directory / viene “montata” dal kernel ed è quindi
il mount-point del filesystem principale del sistema. Nella figura, le directory che
rappresentano dei mount-point sono evidenziate con un cerchio più marcato rispetto alle
altre.
Quindi, il montaggio dei filesystem nei vari mount-point, assieme al VFS, permette di
poter gestire in maniera analoga più filesystem differenti, come se si trattasse di un unico
filesystem virtuale, alla cui radice c’è la directory /.