1.12. /mnt

Questo è un punto di montaggio generico sotto il quale montare i filesystem o i dispositivi. Il "montaggio" (mounting) è un processo attraverso il quale un filesystem si rende disponibile al sistema; dopo il montaggio i file saranno accessibili sotto il punto di mount. Questa directory contiene normalmente i punti di mount o sottodirectory dove montare il floppy e il CD; volendo si possono creare ulteriori punti di mount. Punti di mount standard sono: /mnt/cdrom e /mnt/floppy. Non c'è alcuna limitazione nel creare un punto di mount in qualsiasi parte del sistema ma per convenzione e per mera praticità è meglio non invadere il filesystem di punti di mount. Da notare che alcune distribuzioni come Debian assegnano /floppy e /cdrom come punti di mount mentre Redhat e Mandrake li mettono rispettivamente in /mnt/floppy e /mnt/cdrom.

Si deve tuttavia far rilevare che dalla versione 2.3 del FSSTND lo scopo di questa directory è cambiato.


  Questa directory è fornita  affinché l'amministratore del sistema 
  possa montare un filesystem in caso di necessità. Il contenuto di questa 
  directory è una distribuzione locale e non deve influire sul modo di 
  esecuzione dei programmi.

  Questa directory non dev'essere usata dai programmi d'installazione: invece si
  deve utilizzare una directory temporanea che non è in uso dal sistema.
  

1.12.1. Montare e smontare un filesystem

Prima di poter usare un filesystem, questo dev'essere montato. In quel momento il sistema operativo compie varie operazioni di archiviazione in modo da essere sicuri che tutto funzioni. Dato che tutti i file in UNIX si trovano in un singolo albero di directory, l'operazione di mount farà sembrare che il nuovo filesystem sia contenuto in una sottodirectory esistente di qualche filesystem già montato.

I comandi per montare i filesystem sono riportati nel seguente esempio:

 
  $ mount /dev/hda2 /home 
  $ mount /dev/hda3 /usr
  $ 
  
Il comando mount ha due argomenti; il primo è il file di dispositivo corrispondente al disco o alla partizione che contiene il filesystem; il secondo è la directory sotto la quale dovrà essere montato. Dopo questi comandi il contenuto dei due filesystem appare proprio come se fosse quello delle directory /home e /usr, rispettivamente; si può quindi dire che ''/dev/hda2 è montato sotto /home'', e in modo analogo per /usr. Per vedere i due filesystem basta guardare il contenuto della directory su cui sono stati montati, come se fossero una qualsiasi altra directory. Si noti la differenza tra il file di device, /dev/hda2, e la directory su cui viene montato, /home. Il file di dispositivo dà accesso ai contenuti grezzi del disco mentre la directory su cui viene montato dà accesso ai file in essa contenuti. La directory su cui viene montato un filesystem si chiama punto di mount.

Linux supporta molti tipi di filesystem; mount tenta rilevare il tipo del filesystem da montare. Si può anche usare l'opzione -t tipo_di_fs per specificare il tipo direttamente; talvolta questo si rende necessario poiché il metodo euristico usato da mount non sempre funziona. Ad esempio per montare un floppy MS-DOS si può usare il seguente comando:


  $ mount -t msdos /dev/fd0 /floppy
   $
  

La directory su cui si monta il filesystem può non essere vuota, ma deve esistere; se ci sono dei file, questi non saranno raggiungibili per nome quando il filesystem è montato (i file già aperti saranno ancora accessibili, i file a cui puntano collegamenti fisici da altre directory possono essere accessibili usando quei nomi). Questo non crea alcun danno, e può essere anche utile; per esempio, alcuni preferiscono avere /tmp e /var/tmp come sinonimi, e rendere /tmp come collegamento simbolico alla directory /var/tmp. Quando il sistema è avviato, prima di montare il filesystem /var, viene usata una directory /var/tmp che risiede sul filesystem root; quando viene montato /var la directory /var/tmp sul filesystem root diventa inaccessibile. Se /var/tmp non esistesse sul filesystem root sarebbe impossibile usare i file temporanei prima di montare /var.

Se non si deve scrivere nulla sul filesystem è meglio usare l'opzione -r(read) per mount per avere un mount in sola lettura; in questo modo il kernel interromperà qualsiasi tentativo di scrittura sul filesystem, ed eviterà di aggiornare i tempi di accesso ai file negli inode. I supporti non scrivibili come i CD-ROM devono essere montati in sola lettura.

Il lettore attento avrà già notato un piccolo problema logistico. Come viene montato il primo filesystem (chiamato filesystem root, perché contiene la directory radice), dato che ovviamente non può essere montato su un'altro filesystem? Ebbene, la risposta è che questo avviene come per "magia".

Per ulteriori informazioni si può consultare il codice sorgente del kernel o la Kernel Hackers' Guide.

Il filesystem root viene montato come per incanto all'avvio del sistema e resta sempre montato; se non è possibile montarlo il sistema non si avvia. Il nome del filesystem che viene montato "magicamente" come root è o compilato nel kernel o impostato con LILO o con rdev.

Il filesystem root viene di solito montato inizialmente in sola lettura. Gli script di avvio eseguono poi fsck per verificarne la validità, se non si verificano problemi lo rimontano con i permessi di scrittura. fsck non dev'essere eseguito su un filesystem montato, poiché ogni modifica al filesystem mentre fsck è in esecuzione causerà dei danni. Siccome il filesystem root è montato in sola lettura mentre viene controllato, fsck può correggere qualsiasi problema senza preoccupazioni, dato che l'operazione di "remount" ripulirà tutti i "metadati" che il filesystem tiene in memoria.

Su molti sistemi ci sono altri filesystem che devono essere montati automaticamente all'avvio. Questi sono specificati nel file /etc/fstab; si veda la pagina man di fstab per i dettagli sul formato. I particolari su quando esattamente i filesystems aggiuntivi vengono montati dipende da molti fattori, e possono essere configurati dall' amministratore, se necessario.

Quando non serve più che un filesystem sia montato, può essere smontato col comando umount.

Naturalmente dovrebbe essere unmount, ma la n è scomparsa misteriosamente negli anni '70 e da allora non si è più vista. Se qualcuno la ritrova è pregato di riportarla ai Bell Labs, NJ.

umount accetta un argomento: o il file di device o il punto di mount. Per esempio, per smontare le directory dell'esempio precedente si possono usare i comandi


  $ umount /dev/hda2
  $ umount /usr
  $
  

Si veda la pagina man per ulteriori istruzioni sull'uso del comando. È indispensabile smontare sempre i floppy montati: non vanno tolti direttamente dal lettore! A causa delle operazioni di cache su disco, i dati non vengono necessariamente scritti sul floppy finché questo non viene smontato, quindi rimuovendo il floppy dal lettore troppo presto se ne possono corrompere i contenuti. Questo non è molto probabile se dal floppy si legge solamente, ma se ci si scrive, anche accidentalmente, il risultato può essere catastrofico.

Montare e smontare un filesystem richiede i privilegi di superutente, cioè lo può fare solo l'utente root. La ragione di ciò è che se chiunque potesse montare un floppy su una qualsiasi directory, sarebbe piuttosto facile creare un floppy, diciamo, con un cavallo di Troia mascherato da /bin/sh, o da un qualsiasi programma usato spesso. Ciononostante spesso è necessario permettere agli utenti l'uso dei floppy, e questo si può fare in diversi modi:

L'ultima alternativa può essere implementata aggiungendo una riga come la seguente al file /etc/fstab:


  /dev/fd0 /floppy msdos user,noauto 0 0
  

Le colonne sono: file di dispositivo da montare, directory sulla quale montarlo, tipo di filesystem, opzioni, frequenza di backup (usata da dump), e numero di passaggio di fsck (per specificare l'ordine in cui controllare i filesystem all'avvio: con 0 non vengono controllati).

L'opzione noauto evita che il filesystem venga montato automaticamente all'avvio del sistema (cioè non viene montato da mount -a). L'opzione user permette a qualsiasi utente di montare il filesystem e, per ragioni di sicurezza, disabilita l'esecuzione di programmi (normali o setuid) e l'interpretazione di file di device dal filesystem montato. Dopodiché qualsiasi utente può montare un floppy con un filesystem msdos usando il seguente comando:

 
  $ mount /floppy
  $
  

Il floppy può (e deve, naturalmente) essere smontato col corrispondente comando umount.

Se si vuol dare accesso a diversi tipi di floppy, si devono creare diversi punti di mount. Le impostazioni possono essere differenti per ogni punto di mount. Per esempio, per dare accesso sia ai floppy MS-DOS che ext2 si potrebbero inserire in /etc/fstab le seguenti righe:


  /dev/fd0 /dosfloppy msdos user,noauto 0 0
  /dev/fd0 /ext2floppy ext2 user,noauto 0 0
  

Forse sarebbe meglio restringere l'accesso ai filesystem MS-DOS (non solo per i floppy) usando le opzioni uid, gid e umask, che sono descritte nel dettaglio nella pagina di manuale di mount. Se non si fa attenzione, montando un filesystem MS-DOS si dà a tutti almeno il permesso di lettura ai file in esso contenuti, che non è una buona idea.

Note

[1]

Richiede però qualche secondo di concentrazione da parte degli utenti; inoltre sudo può essere configurato per consentire agli utenti di eseguire solo alcuni comandi. Si vedano le pagine di manuale di sudo(8), sudoers(5), e visudo(8).