NOMBRE¶
mount, umount - monta y desmonta sistemas de ficheros.
SINOPSIS¶
#include <sys/mount.h>
int mount(const char *fuente, const char
*destino, const char *tipo_sf, unsigned
long opciones, const void *datos);
int umount(const char *destino);
int umount2(const char *destino, int
opciones);
DESCRIPCIÓN¶
mount une el sistema de ficheros especificado por
fuente (que
frecuentemente es un nombre de dispositivo, pero que puede ser también
un nombre de directorio o un dispositivo virtual) al directorio especificado
por
destino.
umount y umount2 eliminan la unión del sistema de ficheros (el que
hay arriba del todo) que se encuentra montado en
destino.
Sólo el super-usuario puede montar y desmontar sistemas de ficheros. A
partir de la versión 2.4 de Linux, un mismo sistema de ficheros puede
ser visible en multiples puntos de montaje y se pueden realizar varios
montajes en el mismo punto de montaje, apilando unos sobre otros.
Los valores para el argumento
tipo_sf que soporta el núcleo se
listan en el fichero
/proc/filesystems (como "minix",
"ext2", "msdos", "proc", "nfs",
"iso9660", etc.). Es posible que aparezcan tipos adicionales cuando
se carguen los módulos apropiados.
El argumento
opciones puede tener el número mágico 0xC0ED (
MS_MGC_VAL) en los 16 bits más significativos (esto era
necesario en las versiones del núcleo anteriores a la 2.4, pero ya no
se necesita y se ignora si se especifica) y varias opciones de montaje (como
las definidas en <linux/fs.h> para libc4 y libc5 y en
<sys/mount.h> para glibc2) en los 16 bits menos significativos:
- MS_BIND
- (Linux 2.4 y siguientes) Realiza un montaje «de ligadura» (
bind), lo que hace que un subárbol de ficheros o de
directorios sea visible en otro punto dentro de un sistema de ficheros.
Los montajes de ligadura pueden cruzar los límites de los sistemas
de ficheros y atravesar «jaulas» chroot(2). Los
argumentos tipo_sf, opciones y datos se ignoran.
- MS_DIRSYNC
- (Desde Linux 2.5.19.) Hace que los cambios en los directorios de este
sistema de ficheros sean síncronos. (Esta propiedad la pueden
obtener los directorios o subárboles individuales usando
chattr(8).)
- MS_MANDLOCK
- Permite bloqueos obligatorios sobre los ficheros de este sistema de
ficheros. (Los bloqueos obligatorios todavía deben habilitarse
fichero a fichero, de la forma que se describe en fcntl(2).)
- MS_MOVE
- Mueve un subárbol. fuente especifica un punto de montaje
existente y destino especifica la nueva posición. El
movimiento es atómico: en ningún momento se desmonta el
subárbol. Los argumentos tipo_sf, opciones y
datos se ignoran.
- MS_NOATIME
- No actualiza el tiempo de acceso para los ficheros (de cualquier tipo) en
este sistema de ficheros.
- MS_NODEV
- No permite el acceso a los dispositivos (ficheros especiales) en este
sistema de ficheros.
- MS_NODIRATIME
- No actualiza el tiempo de acceso para los directorios en este sistema de
ficheros.
- MS_NOEXEC
- No permite que los programas se ejecuten desde este sistema de
ficheros.
- MS_NOSUID
- No hace caso a los bits set-UID y set-GID cuando se ejecutan programas
desde este sistema de ficheros.
- MS_RDONLY
- Monta el sistema de ficheros para sólo lectura.
- MS_REMOUNT
- Remonta un montaje existente. Esto le permite cambiar el valor de
opciones y datos de un montaje existente sin tener que
desmontar y remontar el sistema de ficheros. fuente y
destino deben ser los mismos valores que los especificados en la
llamada mount() inicial; tipo_sf se ignora.
- MS_SYNCHRONOUS
- Hace que las escrituras en este sistema de ficheros sean síncronos
(como si se hubiera especificado la opción O_SYNC en
open(2) para todos los ficheros abiertos en este sistema de
ficheros).
A partir de la versión 2.4 de Linux, las opciones
MS_NODEV,
MS_NOEXEC y
MS_NOSUID se pueden configurar individualmente para
cada punto de montaje.
El argumento
datos es interpretado por los diferentes sistemas de
ficheros. Normalmente es una cadena de opciones separadas por comas que
entiende este sistema de ficheros. Consulte
mount(8) para ver
más detalles de las opciones disponibles para cada tipo de sistema de
ficheros.
La versión 2.1.116 de Linux añadió la llamada al sistema
umount2() que, como
umount(), desmonta un destino pero permite
especificar
opciones adicionales que controlen el comportamiento de la
operación:
- MNT_FORCE
- Fuerza el desmontaje aunque el sistema de ficheros esté ocupado.
(Desde 2.1.116. Sólo para montajes NFS.)
- MNT_DETACH
- Realiza un desmontaje «perezoso»: hace que el punto de
montaje deje de estar disponible para nuevos accesos y realmente realiza
el desmontaje cuando el punto de montaje deja de estar ocupado. (Desde
2.4.11.)
VALOR DEVUELTO¶
En caso de éxito se devuelve 0. En caso de error, -1, y se da a
errno un valor apropiado.
ERRORES¶
Los valores de error dados más abajo son independientes del tipo de
sistema de ficheros. Cada tipo de sistemas de ficheros puede tener sus propios
errores especiales y comportamiento. Consulte los fuentes del núcleo
para los detalles.
- EPERM
- El usuario no es el super-usuario.
- ENODEV
- tipo_sf no configurado en el núcleo.
- ENOTBLK
- fuente no es un dispositivo de bloques (y se necesitaba un
dispositivo).
- EBUSY
- fuente ya está montado. O no puede remontarse para lectura
exclusiva, porque ya contiene ficheros abiertos para escritura. O no puede
montarse en destino porque destino ya está ocupado
(es el directorio de trabajo de alguna tarea, el punto de montaje de otro
dispositivo, tiene ficheros abiertos, etc.). O no puede desmontarse porque
está ocupado.
- EINVAL
- fuente tiene un superbloque inválido. O se ha intentado
volver a montar, pero fuente no estaba ya montado en
destino. O se ha intentando mover fuente cuando ésta
no es un punto de montaje o es '/'. O se ha intentado desmontar, pero
destino no era un punto de montaje.
- ENOTDIR
- El segundo argumento, o un prefijo del primero, no es un directorio.
- EFAULT
- Uno de los argumentos de tipo puntero apunta fuera del espacio de
direcciones de usuario.
- ENOMEM
- El núcleo no pudo obtener una página libre para copiar en
ella nombres de ficheros o datos.
- ENAMETOOLONG
- Un nombre de ruta era más largo que MAXPATHLEN.
- ENOENT
- Un nombre de camino estaba vacío o tenía un componente
inexistente.
- ELOOP
- Se han encontrado demasiados enlaces durante la resolución de la
ruta. O se ha intentado un movimiento cuando destino es un
descendiente de fuente.
- EACCES
- No se pudo acceder a un componente de una ruta.
O se intentó montar un sistema de ficheros para lectura exclusiva sin
dar la opción MS_RDONLY.
O el dispositivo de bloques fuente estaba en un sistema de ficheros
montado con la opción MS_NODEV.
- ENXIO
- El número mayor del dispositivo de bloques fuente
está fuera de rango.
- EMFILE
- (En caso de que no se necesite un dispositivo de bloques:) La tabla de
dispositivos ficticios está llena.
Estas funciones son específicas de Linux y no deberían emplearse
en programas pretendidamente transportables.
HISTORIA¶
La función
umount original se invocaba como
umount(dispositivo) y devolvía ENOTBLK cuando se invocaba con
algo distinto a un dispositivo de bloques. En la versión 0.98p4 de
Linux se añadió la llamada
umount(dir) para dar soporte a
los dispositivos anónimos. En Linux 2.3.99-pre7 se eliminó la
llamada
umount(dispositivo), dejando sólo
umount(dir) (ya
que ahora los dispositivos se pueden montar en más de un lugar, por lo
que especificar el dispositivo no es suficiente).
La opción MS_SYNC original se renombró a MS_SYNCHRONOUS en la
versión 1.1.69 cuando se añadió un MS_SYNC diferente a
<mman.h>.
Antes de la versión 2.4 de Linux, cualquier intento por ejecutar un
programa set-UID o set-GID sobre un sistema de ficheros montado con
MS_NOSUID fallaba dando el error
EPERM. Desde la versión
2.4, los bits set-UID y set-GID simplemente se ignoran de forma silenciosa en
este caso.
VÉASE TAMBIÉN¶
mount(8),
umount(8)