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)