#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);
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.
In caso di successo viene restituito zero. In caso di errore viene
restituito -1 , e errno viene impostato di conseguenza.
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.
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.
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/