MOUNT(2)

NOME
mount - monta i filesystem

SINTASSI
#include <sys/mount.h>

int mount(const char *source, const char *target,
          const char *filesystemtype, unsigned long mountflags,
          const void *data);

DESCRIZIONE
mount() collega il filesystem specificato da source (che è spesso un nome di percorso che individua un dispositivo, ma può anche essere il nome di percorso di una directory o di un file, o una stringa fittizia) alla posizione (una directory o un file) specificata dal nome di percorso in target. Per montare dei filesystem è necessario avere le autorizzazioni adeguate (Linux: la funzionalità CAP_SYS_ADMIN). I valori dell'argomento filesystemtype supportati dal kernel sono elencati in /proc/filesystems (p.es, "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse", "tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660"). Ulteriori tipi di filesystem possono essere resi disponibili se sono stati caricati i moduli appropriati. L'argomento data è interpretato dai differenti filesystem. Tipicamente è una stringa di opzioni, separate da virgole, riconosciute da un determinato filesystem. Vedere mount(8) per dettagli sulle opzioni disponibili per ciascun tipo di filesystem. Una chiamata a mount() esegue una tra le molte operazioni di tipo generale, basandosi sui bit specificati in mountflags. La scelta dell'operazione da eseguire è determinata controllando i bit impostati in mountflags, effettuando dei test nell'ordine qui elencato:

*   Rimontare un montaggio già in essere: mountflags include MS_REMOUNT.

*   Creare un montaggio di tipo bind: mountflags include MS_BIND.

*   Cambiare il tipo di propagazione di un montaggio esistente: mountflags include uno tra MS_SHARED, MS_PRIVATE, MS_SLAVE, o MS_UNBINDABLE.

*   Spostare un montaggio esistente in una nuova posizione: mountflags include MS_MOVE.

*   Creare un nuovo montaggio: mountflags non include nessuno dei flag di cui sopra.

Ciascuna di queste operazioni è descritta nel dettaglio più avanti in questa pagina. Ulteriori flag possono essere specificati in mountflags per modificare il comportamento di mount(), come'è descritto qua sotto.

  Ulteriori flag per il montaggio
L'elenco seguente descrive i flag aggiuntivi che possono venir specificati in mountflags. Si noti che alcuni tipi di operazione ignorano alcuni o tutti questi flag, come descritto più avanti in questa pagina.

MS_DIRSYNC (a partire da Linux 2.5.19)
    Sincronizza le modifiche di directory in questo filesystem. (Questa funzionalità può essere richiesta per singole directory o per sottoalberi usando chattr(1).)

MS_LAZYTIME (a partire da Linux 4.0)
    Riduce gli aggiornamenti su disco delle marcature temporali dell'inode (atime, mtime, ctime) effettuando questi cambiamenti solo in memoria. Le marcature temporali su disco vengono aggiornato solo quando:

    (a) l'inode necessita di un aggiornamento per delle modifiche non correlate alle marcature temporali del file;

    (b) l'applicazione si serve di fsync(2), syncfs(2) o sync(2);

    (c) un inode ancora esistente è estromesso dalla memoria; o

    (d) son passate più di 24 ore da quando l'inode è stato scritto su disco.

    Quest'opzione di mount riduce significativamente le scritture necessarie per aggiornare le marcature temporali dell'inode, specialmente mtime e atime. Comunque, nell'eventualità di un crash di sistema, i campi atime e mtime su disco potrebbero non contenere gli aggiornamenti già effettuati, fino a un massimo 24 ore prima del crash. Come esempi di situazioni in cui quest'opzione potrebbe essere di notevole utilità si può citare il caso di frequenti scritture casuali su file preallocati, e anche i casi in cui anche l'opzione di mount MS_STRICTATIME è abilitata. (Il vantaggio di combinare MS_STRICTATIME e MS_LAZYTIME è che stat(2) restituirà il valore di atime correttamente aggiornato, ma gli aggiornamenti di atime verranno trasferiti su disco solo nei casi sopra elencati.)

MS_MANDLOCK
    Consente il blocco obbligatorio sui file in questo filesystem. (Il blocco obbligatorio deve ancora essere abilitato per i singoli file, come descritto in fcntl(2).) A partire da Linux 4.5, quest'opzione di mount richiede la funzionalità CAP_SYS_ADMIN.

MS_NOATIME
    Non aggiorna l'ora di accesso per (tutti i tipi di) file su questo filesystem.

MS_NODEV
    Non permette l'accesso a dispositivi (file speciali) in questo filesystem.

MS_NODIRATIME
    Non aggiorna l'ora di accesso per directory su questo filesystem. Questo flag fornisce un sottoinsieme di funzioni messe a disposizione da MS_NOATIME; vale a dire che MS_NOATIME implica MS_NODIRATIME.

MS_NOEXEC
    Non permette l'esecuzione di programmi su questo filesystem.

MS_NOSUID
    Non onora le funzionalità dei file per impostare i bit set-user-ID e set-group-ID quando si eseguono programmi da questo filesystem.

MS_RDONLY
    Monta il filesystem in sola lettura.

MS_REC(disponibile a partire da Linux 2.4.11)
    Usata insieme a MS_BIND per creare un montaggio "bind" ricorsivo, e assieme ai flag per il tipo di condivisione per cambiare ricorsivamente il tipo di condivisione di tutti i montaggi in un sottoalbero. Vedere più avanti per ulteriori dettagli.

MS_RELATIME (A partire da Linux 2.6.20)
    Quando si accede a un file in questo filesystem, aggiorna l'ora dell'ultimo accesso al file (atime) solo se il valore attuale di atime è minore o uguale a quello dell'ultima modifica del file (mtime) o all'ora dell'ultimo cambiamento di stato (ctime). Quest'opzione è utile per programmi come mutt(1), che hanno bisogno di sapere quando un file è stato letto dopo l'ultima modifica. A partire da Linux 2.6.30, il kernel rende predefinito il comportamento fornito da questo flag (a meno che non sia stata specificato MS_NOATIME), e il flag MS_STRICTATIME è richiesto per ottenere il comportamento tradizionale. Inoltre, a partire da Linux 2.6.30, il tempo dell'ultimo accesso al file viene sempre aggiornato se risale a più di 1 giorno prima.

MS_SILENT (a partire da Linux 2.6.17)
    Sopprime la visualizzazione di alcuni messaggi di avvertimento (printk()) nelle registrazioni del kernel. Questo flag sostituisce il flag (disponibile da Linux 2.4.12) MS_VERBOSE,cheha lo stesso significato.

MS_STRICTATIME (a partire da Linux 2.6.30)
    L'ultimo tempo di accesso è sempre aggiornato (atime) quando i file su questo filesystem sono acceduti. (Questo era il comportamento predefinito prima di Linux 2.6.30.) Specificando questo flag l'effetto dell'impostazione dei flag MS_NOATIME e MS_RELATIME viene ignorato.

MS_SYNCHRONOUS
    Rende sincrone le scritture su questo filesystem (come se il flag O_SYNC di open(2) fosse specificata per tutti i file aperti in questo filesystem).

Da Linux 2.4 in poi, i flao MS_NODEV, MS_NOEXEC, e MS_NOSUID possono essere impostati a livello di ogni singolo punto di montaggio. Dal kernel 2.6.16 in poi, MS_NOATIME e MS_NODIRATIME possono essere impostati a livello di ogni singolo punto di montaggio. Anche il flag MS_RELATIME può essere impostato a livello di ogni singolo punto di montaggio.

  Rimontare un montaggio esistente
Un montaggio esistente può essere montato di nuovo specificando MS_REMOUNT in mountflags. Questo permette di cambiare mountflags e i dati di un montaggio già in essere senza dover smontare e rimontare il filesystem. target deve avere gli stessi valori specificati nella chiamata mount() iniziale. Gli argomenti source e filesystemtype sono ignorati. Gli argomenti mountflags e data dovrebbero corrispondere ai valori nella chiamata mount() originale, ad eccezione dei parametri che si desidera modificare. I seguenti bit di mountflags possono essere modificati: MS_LAZYTIME, MS_MANDLOCK, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RELATIME, MS_RDONLY e MS_SYNCHRONOUS. I tentativi di cambiare l'impostazione del flag MS_DIRSYNC durante un rimontaggio sono ignorati senza emettere alcun messaggio. A partire da Linux 3.17, se nessuno tra MS_NOATIME, MS_NODIRATIME, MS_RELATIME o MS_STRICTATIME viene specificato in mountflags, l'operazione di rimontaggio preserva i valori esistenti di questi flag (piuttosto che impostarli al valore predefinito MS_RELATIME). A partire da Linux 2.6.26, questo flag può anche essere usato per rendere in sola lettura un montaggio di tipo bind già in essere, specificando mountflags come:
    MS_REMOUNT | MS_BIND | MS_RDONLY Notare che solo l'impostazione MS_RDONLY del montaggio di tipo bind può essere cambiata in questo modo

  Creare un montaggio di tipo bind
Se mountflags comprende MS_BIND (disponibile da Linux 2.4 in poi) viene eseguito un montaggio di tipo bind. Un montaggio di tipo bind rende un file o un sottoalbero di directory visibile a un altro punto all'interno dell'unica gerarchia di directory. I montaggi di tipo bind possono attraversare i filesystem e oltrepassare le gabbie chroot(2). Gli argomenti filesystemtype e data sono ignorati. Anche i restanti bit nell'argomento mountflags vengono ignorati, con l'eccezione di MS_REC. (Il montaggio di tipo bind ha le stesse opzioni di montaggio del punto di montaggio su cui viene applicato.) Si veda comunque la spiegazione sul rimontaggio vista prima, per il modo di rendere in sola lettura un punto di montaggio già in essere. In modo predefinito, quando una directory è montata con un montaggio di tipo bind, viene montata solo quella particolare directory; se ci sono dei sottomontaggi nell'albero della directory, questi non sono montati nel montaggio di tipo bind. Se viene specificato anche il flag MS_REC, viene effettuata un'operazione di montaggio di tipo bind ricorsiva: tutti i sottomontaggi nel sottoalbero source (tranne i montaggi non clonabili con un'operazione di bind) sono anche montati con un montaggio di tipo bind alla posizione corrispondente nel sottoalbero target.

  Cambiare il tipo di condivisione di un montaggio esistente
Se mountflags include uno tra MS_SHARED, MS_PRIVATE, MS_SLAVE o MS_UNBINDABLE (tutti disponibili a partire da Linux 2.6.15), il tipo di condivisione di un montaggio esistente viene cambiato. Se si specifica più d'uno di questi flag, viene prodotto un errore. I soli flag che possono essere usati nel cambiare il tipo di condivisione sono MS_REC e MS_SILENT. Gli argomenti source, filesystemtype e data sono ignorati. I tipi di condivisione richiesti dai flag hanno il seguente significato:

MS_SHARED
    Rende condiviso questo punto di montaggio. Gli eventi di montaggio e smontaggio che stanno subito sotto questo punto di montaggio si propagheranno agli altri punti di mount che sono membri di questo "gruppo di pari" (peer group) nel montaggio. Qui condivisione significa che lo stesso montaggio o smontaggio avverrà automaticamente sotto tutti gli altri punti di mount nel "gruppo di pari". Simmetricamente, gli eventi di montaggio e smontaggio che hanno luogo nel "gruppo di pari" si propagheranno a questo punto di montaggio.

MS_PRIVATE
    Rende privato questo punto di montaggio. Gli eventi di montaggio e smontaggio non vengono condivisi dentro o fuori a questo punto di montaggio. Questo è il tipo di condivisione predefinito per i punti di montaggio di nuova creazione.

MS_SLAVE
    Se questo è un punto di montaggio condiviso che è membro di un "gruppo di pari" (peer group) che contiene altri membri, viene convertito in un montaggio asservito (slave mount). Se questo è un punto di montaggio condiviso che è membro di un "gruppo di pari" che non contiene altri membri, viene convertito in un montaggio privato (private mount). Altrimenti, il tipo di condivisione del punto di montaggio rimane invariato. Quando un punto di montaggio è asservito ad altri (slave mount), gli eventi di montaggio e smontaggio si propagano in questo punto di montaggio dal "gruppo di pari" (master) condiviso del quale era stato membro in precedenza. Gli eventi di montaggio e smontaggio sotto questo punto di montaggio non si propagano a nessun "pari" (peer). Un punto di montaggio può essere asservito (slave) a un altro "gruppo di pari" condividendo nel contempo eventi di montaggio e smontaggio con un "gruppo di pari" di cui è membro.

MS_UNBINDABLE
    Rende questo montaggio non clonabile con un'operazione di bind. È come un montaggio privato (private mount), e in più questo montaggio non può essere montato con un montaggio di tipo bind. Quando un montaggio di tipo bind ricorsivo (mount() con i flag MS_BIND e MS_REC) è effettuato su un sottoalbero di directory, qualsiasi montaggio di tipo bind all'interno del sottoalbero è automaticamente eliminato (cioè, non replicato) quando si replica questo sottoalbero per produrre il sottoalbero di destinazione.

In modo predefinito, il cambio del tipo di condivisione influisce solo sul punto di montaggio target. Se viene specificato anche il flag MS_REC in mountflags, viene cambiato anche il tipo di condivisione di tutti i punti di montaggio sotto target. Per ulteriori dettagli sui tipi di condivisione del montaggio, si veda mount_namespaces(7).

  Spostare un montaggio
Se mountflags contiene il flag MS_MOVE (disponibile a partire da Linux 2.4.18), viene spostato un sottoalbero: source specifica un punto di montaggio esistente e target specifica la nuova posizione nella quale dev'essere ricollocato quel punto di montaggio. Lo spostamento avviene senza soluzione di continuità: il sottoalbero non viene mai smontato. I rimanenti bit nell'argomento mountflags vengono ignorati, poiché essi sono gli argomenti di filesystemtype e data.

  Creare un nuovo punto di montaggio
Se nessuno di questi flag MS_REMOUNT, MS_BIND, MS_MOVE, MS_SHARED, MS_PRIVATE, MS_SLAVE, o MS_UNBINDABLE viene specificato in mountflags, mount() esegue la sua azione predefinita: creare un nuovo punto di montaggio. source specifica l'origine per il nuovo punto di montaggio, e target specifica la directory nella quale creare il punto di montaggio. Vengono impiegati gli argomenti filesystemtype e data, e ulteriori bit possono essere specificati in mountflags per modificare il comportamento della chiamata.

VALORE RESTITUITO
In caso di successo viene restituito zero. In caso di errore viene restituito -1 , e errno viene impostato di conseguenza.

ERRORI
I valori di errore indicati di seguito sono causati da errori indipendenti dal tipo di filesystem. Ciascun tipo di filesystem può avere i propri errori speciali e il proprio comportamento speciale. Vedere il codice sorgente del kernel Linux per dettagli.

EACCES
    Un componente di un percorso non poteva essere acceduto. (Vedere anche path_resolution(7).)

EACCES
    È stato tentato il montaggio di un filesystem in sola lettura senza dare l'opzione MS_RDONLY.

EACCES
    Il dispositivo a blocchi source si trova su un filesystem montato con l'opzione MS_NODEV.

EBUSY
    source è già montato.

EBUSY
    source non può essere rimontato in sola lettura, perché contiene ancora file aperti in scrittura.

EBUSY
    source non può essere montato su target perché target è ancora occupato (è la directory di lavoro di qualche processo, il punto di montaggio di un altro dispositivo, ha file aperti, ecc.).

EFAULT
    Uno dei puntatori agli argomenti punta fuori dallo spazio di indirizzamento dell'utente.

EINVAL
    source ha un superblocco non valido.

EINVAL
    È stato tentata un'operazione di rimontaggio (MS_REMOUNT), ma source non era ancora stato montato su target.

EINVAL
    È stato tentata un'operazione di spostamento (MS_MOVE), ma source non era un punto di montaggio, o era '/'.

EINVAL
    mountflags include più d'uno di questi flag: MS_SHARED, MS_PRIVATE, MS_SLAVE o MS_UNBINDABLE.

EINVAL
    mountflags include MS_SHARED, MS_PRIVATE, MS_SLAVE o MS_UNBINDABLE e include anche un flag diverso da MS_REC o MS_SILENT.

EINVAL
    Si è tentato di montare in modalità bind un montaggio non montabile in modalità bind (unbindable mount).

ELOOP
    Troppi collegamenti incontrati durante la risoluzione di un percorso.

ELOOP
    È stato tentato uno spostamento, mentre target è discendente (è un sottoalbero) di source.

EMFILE
    (Nel caso non sia necessario un dispositivo a blocchi:) La tabella dei dispositivi fittizi è piena.

ENAMETOOLONG
    Un nome di percorso è più lungo di MAXPATHLEN.

ENODEV
    filesystemtype non configurato nel kernel.

ENOENT
    Un nome di percorso era vuoto o aveva un componente inesistente.

ENOMEM
    Il kernel non risce ad allocare una pagina libera in cui copiare nomi di file o dati.

ENOTBLK
    source non è un dispositivo a blocchi (ed era necessario un dispositivo di questo tipo).

ENOTDIR
    target, o un prefisso di R souce, non è una directory.

ENXIO
    Il "numero principale" del dispositivo a blocchi source è fuori limite.

EPERM
    Il chiamante non ha i privilegi necessari.

VERSIONI
Le definizioni di MS_DIRSYNC, MS_MOVE, MS_PRIVATE, MS_REC, MS_RELATIME, MS_SHARED, MS_SLAVED, MS_STRICTATIME e MS_UNBINDABLE sono state aggiunte alle intestazioni di glibc nella versione 2.12.

CONFORMITÀ
Questa funzione è specifica di Linux e non deve essere usata in programmi pensati per essere portabili.

NOTA
A partire da Linux 2.4 un singolo filesystem può essere montato su punti di montaggio multipli, e su uno stesso punto di montaggio possono essere impilati più montaggi. L'argomento mountflags può avere il "magic number" 0xC0ED (MS_MGC_VAL) nei 16 bit più alti. (Tutti gli altri flag visti in DESCRIZIONE occupano i 16 bit meno significativi di mountflags.) Specificare MS_MGC_VAL era necessario nelle versioni di kernel precedenti alla 2.4, ma dalla 2.4 non è più necessario ed è ignorato se specificato. Il flag originale MS_SYNC è stato rinominato MS_SYNCHRONOUS in 1.1.69 quando è stato aggiunto un diverso MS_SYNC a <mman.h>.

Prima di Linux 2.4, un tentativo di eseguire un programma che usa set-user-ID o set-group-ID su un filesystem montato con MS_NOSUID falliva con EPERM. A partire da Linux 2.4 la richiesta di set-user-ID e set-group-ID in questo caso è ignorata senza emettere messaggi.

  Spazi dei nomi a livello di processo
A partire dal kernel 2.4.19, Linux fornisce spazi dei nomi di montaggio a livello di processo. Uno spazio dei nomi di montaggio è l'insieme di montaggi di filesystem che un processo può vedere. Gli spazi dei nomi dei punti di montaggio possono essere (e di solito lo sono) condivisi tra più processi, e i cambiamenti provocati da un processo (cioè montaggi e smontaggi) sono visibili a tutti i processi che condividano lo stesso spazio dei nomi. (La situazione prima di Linux 2.4.19 prevedeva che un singolo spazio dei nomi venisse condiviso da tutti i processi nel sistema.) Un processo figlio creato da fork(2) condivide lo spazio dei nomi di montaggio del suo genitore: lo spazio dei nomi di montaggio viene preservato se si invoca execve(2). Un processo può ottenere uno spazio dei nomi di montaggio privato se: è stato creato usando il flag CLONE_NEWNS di clone() e in questo caso il suo nuovo spazio dei nomi viene inizializzato come copia degli spazi dei nomi del processo che ha chiamato clone(); oppure se chiama unshare(2) con il flag CLONE_NEWNS, che permette allo spazio dei nomi del chiamante di ottenere una copia privata dello spazio dei nomi che in precedenza condivideva con altri processi, in modo che chiamate a montaggi e smontaggi futuri siano invisibili agli altri processi (ad eccezione di processi figli creati successivamente dal chiamante), e viceversa. Il file specifico di Linux /proc/[pid]/mounts mostra l'elenco di punti di montaggio negli spazi dei nomi dei processi con l'ID specificato. Vedere proc(5) per i dettagli.

VEDERE ANCHE
umount(2), mount_namespaces(7), path_resolution(7), findmnt(8), lsblk(8), mount(8), umount(8)

COLOPHON
Questa pagina fa parte del rilascio 4.08 del progetto Linux man-pages. Una descrizione del progetto, le istruzioni per la segnalazione degli errori, e l'ultima versione di questa pagina si trovano su https://www.kernel.org/doc/man-pages/. La versione italiana fa parte del pacchetto man-pages-it v. 4.08, a cura di: ILDP "Italian Linux Documentation Project" http://www.pluto.it/ildp
Per la traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/
Segnalare eventuali errori di traduzione a ildp@pluto.it