mount(2) 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 dispositivo, ma può anche essere un nome di directory o un nome fittizio) alla directory specificata da target.

Sono necessari privilegi appropriati (Linux: capacità CAP_SYS_ADMIN) per montare i filesystem.

A partire da Linux 2.4 un singolo filesystem può essere visibile su punti di mount multipli, e sullo stesso punto di mount possono essere impilati montaggi multipli.

I valori dell'argomento filesystemtype supportati dal kernel sono elencati in /proc/filesystems (p.es, "minix", "ext2", "ext3", "jfs", "xfs", "reiserfs", "msdos", "proc", "nfs", "iso9660"). Possono essere disponibili altri tipi di filesystem caricando i moduli appropriati.

L'argomento mountflags può avere il magic number 0xC0ED (MS_MGC_VAL) nei 16 bit più alti (era necessario nelle versioni di kernel precedenti a 2.4, ma non è più necessario ed è ignorato se specificato), e vare opzioni di montaggio nei 16 bit di ordine basso:

MS_BIND (da Linux 2.4 in poi)
Esegue un montaggio bind, rendendo un file o un sottoalbero di directory visibile a un altro punto dentro un filesystem. I montaggi bind possono attraversare i filesystem e oltrepassare le gabbie chroot(2). Gli argomenti filesystemtype e data sono ignorati. A partire da Linux 2.6.26, è ignorato anche mountflags (i montaggi bind hanno le stesse opzioni di montaggio del punto di mount sottostante).
MS_DIRSYNC (a partire da Linux 2.5.19)
Sincronizza i cambiamenti di directory in questo filesystem. (Questa proprietà può essere ottenuta per directory individuali o sottoalberi usando chattr(1).)
MS_MANDLOCK
Permette il blocco obbligatorio sui file in questo filesystem. (Il blocco obbligatorio deve sempre essere abilitato in base ai file, come descritto in fcntl(2).)
MS_MOVE
Sposta un sottoalbero. source specifica un punto di mount esistente e target specifica la nuova posizione. Lo spostamento è atomico: il sottoalbero non viene smontato in nessun momento. Gli argomenti filesystemtype, mountflags, e data sono ignorati.
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. Questa opzione 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 i bit set-user-ID e set-group-ID quando si eseguono programmi da questo filesystem.
MS_RDONLY
Monta filesystem in sola lettura.
MS_RELATIME (A partire da Linux 2.6.20)
Quando si accede a un file in questo filesystem, aggiorna solo l'ora dell'ultimo accesso al file (atime) 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). Questa opzione è utile per programmi come mutt(1), che hanno bisogno di sapere quando un file è stato letto dall'ultima modifica. A partire da Linux 2.6.30, il kernel rende predefinito il comportamento fornito da questa opzione (a meno che non sia stata specificato MS_NOATIME), e l'opzione MS_STRICTATIME è richiesta per ottenere la tradizionale semantica. Inoltre, a partire da Linux 2.6.30, il tempo dell'ultimo accesso al file viene sempre aggiornato se è trascorso più di 1 giorno.
MS_REMOUNT
Monta di nuovo un montaggio esistente. Questo permette di cambiare mountflag e dati di un montaggio esistente senza dover smontare e rimontare il filesystem. source e target devono avere gli stessi valori specificati nella chiamata mount() iniziale; source e filesystemtype sono ignorati. Gli argomenti mountflags e data dovrebbero corrispondere ai valori nella chiamata mount() originale, ad eccezione di quei parametri cambiati deliberatamente.

I seguenti mountflag possono essere cambiati: MS_RDONLY, MS_SYNCHRONOUS, MS_MANDLOCK; prima del kernel 2.6.16 potevano essere cambiati anche i seguenti: MS_NOATIME e MS_NODIRATIME; e, in aggiunta, prima del kernel 2.4.10, potevano essere cambiati anche questi: MS_NOSUID, MS_NODEV, MS_NOEXEC.

MS_SILENT (a partire da Linux 2.6.17)
Sopprime la visualizzazione di alcuni messaggi di avvertimento (printk()) nelle registrazioni del kernel. Questa opzione sostituisce l'opzione MS_VERBOSE, obsoleta e chiamata nel modo sbagliato (disponibile da Linux 2.4.12), che ha 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 accessibili. (Questo era il comportamento predefinito prima di Linux 2.6.30.) Specificando questa opzione l'effetto dell'impostazione delle opzioni MS_NOATIME e MS_RELATIME viene ignorato.
MS_SYNCHRONOUS
Rende sincrone le scritture su questo filesystem (come se l'opzione O_SYNC di open(2) fosse specificata per tutti i file aperti su questo filesystem).

Da Linux 2.4 in poi, le opzioni MS_NODEV, MS_NOEXEC, e MS_NOSUID possono essere impostate basandosi sul punto di mount. Dal kernel 2.6.16 in poi, MS_NOATIME e MS_NODIRATIME possono essere impostate basandosi sui punti di mount. Anche l'opzione MS_RELATIME può essere impostata basandosi sui punti di mount.

L'argomento data è interpretato da differenti filesystem. Tipicamente è una stringa di opzioni separate da virgole capita da questo filesystem. Vedere mount(8) per dettagli delle opzioni disponibili per ciascun tipo di filesystem.

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 suo comportamento speciale. Vedere il codice sorgente del kernel per dettagli.
EACCES
Un componente di un percorso non poteva essere cercato. (Vedere anche path_resolution(7).) Oppure è stato tentato il montaggio di un filesystem in sola lettura senza dare l'opzione MS_RDONLY . Oppure il dispositivo a blocchi source si trova su un filesystem montato con l'opzione MS_NODEV
EBUSY
source è già montato. Oppure non può essere rimontato in sola lettura, perché contiene ancora file aperti in scrittura. Oppure non può essere montato su target perché target è ancora occupato (è la directory di lavoro di qualche task, il punto di mount di un altro dispositivo, ha file aperti, ecc.).
EFAULT
Uno degli argomenti puntatori punta fuori dallo spazio di indirizzamento dell'utente.
EINVAL
source ha un superblocco non valido. Oppure è stato tentato un rimontaggio (MS_REMOUNT), ma source non era ancora montato su target. Oppure è stato tentato uno spostamento (MS_MOVE), ma source non era un punto di mount, o era '/'.
ELOOP
Troppi collegamenti incontrati durante la risoluzione di un percorso. Oppure è stato tentato uno spostamento, mentre target è discendente 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 può allocare una pagina libera in cui copiare nomi di file o dati.
ENOTBLK
source non è un dispositivo a blocchi (ed era necessario un dispositivo).
ENOTDIR
target, o un prefisso di R souce, non è una directory.
ENXIO
Il major number del dispositivo a blocchi source è fuori limite.
EPERM
Il chiamante non ha i privilegi necessari.

VERSIONI

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

CONFORME A

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

NOTE

L'opzione originale MS_SYNC fu rinominata MS_SYNCHRONOUS in 1.1.69 quando fu aggiunto un diverso MS_SYNC a <mman.h>.

Prima di Linux 2.4, un tentativo di eseguire un programma set-user-ID o set-group-ID su un filesystem montato con MS_NOSUID falliva con EPERM. A partire da Linux 2.4 i bit set-user-ID e set-group-ID in questo caso sono ignorati silenziosamente.

Spazi dei nomi in base al processo

A partire dal kernel 2.4.19, Linux fornisce spazi dei nomi di montaggio in base al 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 mount possono essere (e di solito lo sono) condivisi tra processi multipli, 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 pre-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 tramite un execve(2).

Un processo può ottenere uno spazio dei nomi di montaggio privato se: è stato creato usando l'opzione di clone() CLONE_NEWNS, e in questo caso il suo nuovo spazio dei nomi viene inizializzato come copia degli spazi dei nomi del processo che ha chiamato clone(): o se chiama unshare(2) con l'opzione 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 mount negli spazi dei nomi dei processi con l'ID specificato. Vedere proc(5) per i dettagli.

COLOPHON

Questa pagina fa parte del rilascio 3.73 del progetto Linux man-pages. Una descrizione del progetto, le istruzioni per la segnalazione degli errori, e l'ultima versione di questa pagina si trova su http://www.kernel.org/doc/man-pages/.

La versione italiana fa parte del pacchetto man-pages-it v. 3.73, 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 [email protected]