Prima che si possa usare un filesystem, bisogna montarlo (mount); così il sistema operativo fa delle 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.
Ad esempio, la figura 4.3 mostra tre filesystem separati, ciascuno con la propria directory di root; quando gli ultimi due vengono montati sotto /home e /usr , sul primo filesystem, abbiamo un singolo albero di directory, come in figura 4.4.
I comandi per montare questi due filesystem sono riportati nel seguente esempio:
Il comando mount accetta due argomenti: il file di device corrispondente al disco o alla partizione che contiene il filesystem, e la directory sotto cui montarlo. Dopo questi comandi il contenuto dei due filesystem sembrano essere in /home e /usr . Si può dire che ``/dev/hda2 è montato su /home '', e la stessa cosa per /usr . Per vedere i due filesystem basta guardare nella directory su cui è stato montato, come se fosse una qualsiasi altra directory. Notate la differenza tra il file di device /dev/hda2 e la directory su cui viene montato, /home . Il file di device dà accesso ai contenuti fisici del disco, la directory su cui viene montato dà accesso ai file che vi si trovano. La directory su cui viene montato un filesystem si chiama punto di mount.$
mount /dev/hda2 /home
$
mount /dev/hda3 /usr
$
Linux supporta molti tipi di filesystem; mount cerca di indovinare il tipo di quello che si sta montando. Si può anche usare l'opzione -t tipofs per specificare direttamente il tipo: tavolta è necesaria, dato che l'euristica usata da mount non sempre funziona. Ad esempio per montare un floppy MS-DOS si usa il seguente comando:
La directory di mount può anche non essere vuota, ma deve esistere. Qualsiasi file vi si trovi non potrà essere richiamato per nome mentre il filesystem è montato (qualsiasi file già aperto sarà ancora accessibile. I file a cui puntano hard link da altre directory possono essere accessibili usando quei nomi). Con questo procedimento non viene perso nessun dato, e può anche essere utile: ad esempio, alcuni vogliono avere /tmp e /var/tmp sinonimi, e rendere /tmp un link simbolico a /var/tmp . Quando si avvia il filesystem, prima che venga montato /usr , viene usata una directory /var/tmp che risiede sul filesystem di root. Quando viene montato /usr , la directory /var/tmp sul filesystem di root diventa inaccessibile. Se non esistesse /var/tmp sul filesystem di root, sarebbe impossibile usare i file temporanei prima del mount di /var .$
mount -t msdos /dev/fd0 /floppy
$
Se non volete scrivere niente su un filesystem, usate lo switch -r per montarlo a sola lettura; in questo modo il kernel interromperà qualsiasi tentativo di scrivere sul filesystem, ed eviterà di aggiornare i tempi di accesso ai file negli inode. È indispensabile usare i mount a sola lettura per i mezzi non scrivibili, come i CD-ROM.
Il lettore attento avrà già notato un piccolo problema logistico: come viene montato il primo filesystem (chiamato filesystem di root, perché contiene la directory principale), dato che ovviamente non può essere montato su un altro filesystem? Beh, la risposta è che si usa la magia.4.7 Il filesystem di root viene montato magicamente all'avvio, e si può contare sul fatto che sia sempre montato--se non si può montare il filesystem di root, il sistema non parte. Il nome del filesystem che viene montato magicamente come root è compilato nel kernel o impostato usando LILO o rdev .
Il filesystem di root viene di solito montato inizialmente a sola lettura. Gli script di avvio poi attivano fsck per verificare che sia valido, e se non ci sono problemi lo rimonteranno con i permessi di scrittura. fsck non deve essere usato su un filesystem montato, dato che qualsiasi modifica al filesystem mentre sta girando fsck farà dei danni. Dato che il filesystem di root è montato a sola lettura perché 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 al momento dell'avvio, e vengono specificati nel file /etc/fstab ; consultate la pagina man di fstab per avere dettagli sul suo formato. i dettagli di quando esattamente vengono montati i vari filesystem dipendono da molti fattori, e possono essere configurati, se serve, dall'amministratore. Quando sarà finito il capitolo sull'avvio, ne potrete leggere lì.
Quando non serve più che un filesystem sia montato, può essere smontato usando umount 4.8. umount accetta un argomento, o il file di device o il punto di mount. Ad esempio, per smontare le directory dell'esempio precedente, si possono usare i comandi
Consultare la pagina man per avere altre istruzioni su come usare il comando. È indispensabile smontare sempre i floppy montati. Non li tirate direttamente fuori dal drive! A causa delle operazioni di cache su disco, i dati non vengono necessariamente scritti sul floppy finché non lo smontate, quindi rimuovendo il floppy dal drive troppo presto se ne possono corrompere i contenuti. Se leggete solo dal floppy non è molto probabile, ma se ci scrivete, anche accidentalmente, i risultati possono essere catastrofici.$
umount /dev/hda2
$
umount /usr
$
Montare e smontare un filesystem richiedono privilegi di superutente, cioè lo può fare solo root ; la ragione è che se chiunque potesse montare un dischetto su una qualsiasi directory, sarebbe piuttosto facile creare un floppy diciamo con un Trojan horse camuffato da /bin/sh , o da un qualsiasi programma usato spesso. Comunque, spesso è necessario permettere agli utenti di usare i floppy, ed ecco alcuni modi per poterlo fare:
/dev/fd0 /floppy msdos user,noauto 0 0Le colonne sono: file di device da montare, directory su cui 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 non fa montare automaticamente il filesystem all'avvio del sistema (cioè non lo fa montare da mount -a ). L'opzione user permette a qualsiasi utente di montare il filesystem, e per sicurezza disabilita l'esecuzione di programmi (normali o setuid) e l'interpretazioni di file di device dal filesystem montato. Fatto questo, qualsiasi utente può montare un floppy con un filesystem msdos con il seguente comando:
Il floppy può (e deve, naturalmente) essere smontato con il corrispondente comando umount .$
mount /floppy
$
Se volete dare accesso a diversi tipo di floppy, dovete dare diversi punti di mount. Le impostazioni possono essere diverse per ogni punto di mount, ad esempio, per dare accesso sia a floppy MS-DOS che ext2, si possono inserire in /etc/fstab queste linee:
Per i filesystem MS-DOS (non solo per i floppy) probabilmente vorrete restringerne l'accesso usando le opzioni uid, gid e umask , che sono descritte in dettaglio nella pagina man di mount . Se non state attenti, montare un filesystem MS-DOS dà a tutti almeno il permesso di lettura ai file che vi si trovano, che non è una buona idea./dev/fd0 /dosfloppy msdos user,noauto 0 0 /dev/fd0 /ext2floppy ext2 user,noauto 0 0