umount(2) monta y desmonta sistemas de ficheros.

Other Alias

mount

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.

CONFORME A

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.