NOME¶
mount, umount, umount2 - monta e smonta i file system
SINTASSI¶
#include <sys/mount.h>
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
int umount(const char *target);
int umount2(const char *target, int flags);
DESCRIZIONE¶
mount() attacca il file system specificato da
source (che è
spesso un nome di dispositivo, ma può anche essere un nome di directory o
un dummy) alla directory specificata da
target.
umount() e
umount2() rimuove l'attaccamento del (più alto)
file system montato su
target.
Sono necessari privilegi appropriati (Linux: capacità
CAP_SYS_ADMIN)
per montare e smontare i file system.
A partire da Linux 2.4 un singolo file system può essere visibile su punti
di mount multipli, e sullo stesso punto di mount possono essere impilati mount
multipli.
I valori dell'argomento
filesystemtype supportato dal kernel sono
elencati in
/proc/filesystems (come "minix",
"ext2", "msdos", "proc", "nfs",
"iso9660" etc.). Ulteriori tipi possono divenire disponibili quando
vengono caricati moduli appropriati.
L'argomento
mountflags può avere il magic number 0xC0ED (
MS_MGC_VAL) nei 16 bit più alti (questo era necessario nelle
versioni di kernel precedenti a 2.4, ma non è più necessario ed
è ignorato se specificato), e vari flag di mount (come definito in
<linux/fs.h> per libc4 e libc5 e in <sys/mount.h> per glibc2) nei
16 bit di ordine basso:
- MS_BIND (da Linux 2.4 in poi)
- Esegue un mount bind, rendendo un file o un sottoalbero di
directory visibile a un altro punto dentro un file system. I mount bind
possono attraversare i file system e oltrepassare le gabbie
chroot(2) Gli argomenti filesystemtype, mountflags, e
data sono ignorati.
- MS_DIRSYNC (a partire da Linux 2.5.19)
- sincronizza i cambiamenti di directory in questo file
system. (Questa proprietà può essere ottenuta per directory
individuali o sottoalberi usando chattr(1).)
- MS_MANDLOCK
- Permette il blocco obbligatorio aui file in questo file
system. (Il blocco obbligatorio deve ancora essere abilitato su una base
per file, come descritto in fcntl(2).)
- MS_MOVE
- Sposta un sottoalbero. source specifica un punto di
mount esistente e target specifica la nuova locazione. 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 file system.
- MS_NODEV
- Non permette l'accesso a dispositivi (file speciali) in
questo file system.
- MS_NODIRATIME
- Non aggiorna l'ora di accesso per directory su questo file
system. Questo flag fornisce un sottoinsieme di funzioni messe a
disposizione da MS_NOATIME; vale a dire che MS_NOATIME
suggerisce MS_NODIRATIME.
- MS_NOEXEC
- Non permette ai programmi di essere eseguiti da questo file
system.
- MS_NOSUID
- Non onora i bit set-user-ID e set-group-ID quando si
eseguono programmi da questo file system.
- MS_RDONLY
- Monta file system in sola lettura.
- MS_RELATIME (A partire da Linux 2.6.20)
- Quando si accede a un file in questo file system, aggiorna
solo l'ora dell'ultimo accesso al file (atime) se il valore corrente 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.
- MS_REMOUNT
- Monta di nuovo un mount esistente. Questo permette di
cambiare i mountflag e dati di un mount esistente senza
dover smontare e rimontare il file system. source e target
devono essere gli stessi valori specificati nella chiamata mount()
iniziale; filesystemtype è ignorato.
I seguenti mountflag possono venire 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_SYNCHRONOUS
- Rende sincrone le scritture su questo file system (come se
il flag O_SYNC a open(2) fosse specificato per tutti i file
aperti a questo file system).
Da Linux 2.4 in poi, i flag
MS_NODEV,
MS_NOEXEC, e
MS_NOSUID sono impostabili per l'intero punto di mount. Dal kernel
2.6.16 in poi,
MS_NOATIME e
MS_NODIRATIME possono essere
impostati basandosi sui punti di mount. Anche il flag
MS_RELATIME
può essere impostato basandosi sui punti di mount.
L'argomento
data è interpretato da differenti file system.
Tipicamente esso è una stringa di opzioni separate da virgole capita da
questo file system. Vedere
mount(8) per dettagli delle opzioni
disponibili per ciascun tipo di filesystem.
Linux 2.1.116 ha aggiunto la chiamata di sistema
umount2(), la quale,
come
umount(), smonta un target, ma permette
flag aggiuntivi che
controllano il comportamento dell'operazione:
- MNT_FORCE (a partire da Linux 2.1.116)
- Forza l'unmount anche se occupato. Questo può causare
una perdita di dati. (solo per i mount NFS).
- MNT_DETACH (a partire da Linux 2.4.11)
- Esegue un unmount lento: rende il punto di mount non
disponibile per i nuovi accessi, e attualmente esegue l'unmount quando il
punto di mount smette di essere occupato.
- MNT_EXPIRE (a partire da Linux 2.6.8)
- Marca il punto di mount come scaduto. Se un punto di mount
non è attualmente in uso, allora una chiamata iniziale a
umount2() con questo flag fallisce con l'errore EAGAIN, ma
marca il punto di mount come scaduto. Il punto di mount rimane scaduto
fino a quando non vi accede nessun processo. Una seconda chiamata
umount2() che specifica MNT_EXPIRE somnta un punto di mount
scaduto. Questo flag non può essere specificato con MNT_FORCE
o MNT_DETACH.
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 dati di seguito vengono da errori indipendenti dal tipo di
file system. Ciascun tipo di file system può avere i propri errori
speciali e il suo comportamento speciale. Vedere il codice sorgente del kernel
per dettagli.
- EACCES
- Un componente di un non poteva essere cercato. (Vedere
anche path_resolution(2).) Oppure è stato tentato il mount di
un filesystem in sola lettura senza dare il flag MS_RDONLY . Oppure
il dispositivo a blocchi source si trova su un filesystem montato
con l'opzione MS_NODEV
- EAGAIN
- Una chiamata a umount2() che specifica
MNT_EXPIRE ha marcato con successo un file system non occupato come
scaduto.
- EBUSY
- source è già montato. Oppure non può
essere rimontato in sola lettura, perché contiene ancora file aperti
in scrittura. Oppure non può essere montato sul target
perché target è ancora occupato (è la directory di
lavoro di qualche task, il punto di mount di un altro dispositivo, ha file
aperti, ecc.). Oppure non può essere smontato perché è
occupato.
- EFAULT
- Uno degli argomanti puntatori punta fuori dallo spazio di
indirizzamento dell'utente.
- EINVAL
- source ha un superblock non valido. Oppure è
stato tentato un remount (MS_REMOUNT), ma source non era
ancora montato su target. Oppure è stato tentato uno
spostamento (MS_MOVE), ma source non era un mount point, o
era '/'. Oppure è stato tentato un unmount, ma target non era
un mount point. Oppure umount2() è stato chiamato con
MNT_EXPIRE e uno tra MNT_DETACH o MNT_FORCE.
- ELOOP
- Troppi link 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 fasulli è 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
- Il secondo argomento, o un prefisso del primo argomento,
non è una directory.
- ENXIO
- Il major number del dispositivo a blocchi source
è fuori limite.
- EPERM
- Il chiamante non ha i privilegi necessari.
Queste funzioni sono specifiche di Linux e non devono essere usate in programmi
pensati per essere portabili.
NOTE¶
Note Linux¶
La funzione originale
umount() era chiamata come
umount(device) e
restituiva
ENOTBLK quando non veniva chiamata con un dispositivo a
blocchi. In Linux 0.98p4 fu aggiunta una chiamata
umount(dir), per
poter supportate dispositivi anonimi. In Linux 2.3.99-pre7 la chiamata
umount(device) fu rimossa, lasciando solo
umount(dir)
(poiché ora i dispositivi possono essere montati in più di un posto,
così specificare il dispositivo non è sufficiente).
Il flag originale
MS_SYNC fu rinominato
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 file system 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 igonrati silenziosamente.
VEDERE ANCHE¶
path_resolution(7),
mount(8),
umount(8)
COLOPHON¶
Questa pagina fa parte del rilascio 2.80 del progetto
man-pages di Linux.
Si può trovare una descrizione del progetto, e informazioni su come
riportare bachi, presso
http://www.kernel.org/doc/man-pages/. Per la
traduzione in italiano si può fare riferimento a
http://www.pluto.it/ildp/collaborare/