En todo sistema operativo, los archivos se organizan en sistemas de archivos. Un sistema de archivos es una estructura de datos de bajo nivel que organiza y mantiene los bloques de datos que implementan a los archivos contenidos dentro de un dispositivo, al igual que el espacio disponible y árbol de directorios. Todos los archivos accesibles desde un sistema Unix conforman una jerarquía y están organizados en un único gran árbol cuya raíz es el directorio /. Estos archivos pueden estar distribuidos a lo largo de diferentes sistemas de archivos en diferentes dispositivos (discos, particiones, etc.).

El comando mount permite anexar el sistema de archivos encontrado en un dispositivo al árbol de archivos principal a partir de cierta ruta o ubicación, proceso conocido como montar. En su forma estándar, el comando mount toma los siguientes parámetros:

# mount -t TIPO DISPOSITIVO DIRECTORIO

El parámetro TIPO indica el tipo de sistema de archivos alojado en el DISPOSITIVO. El último parámetro determina el directorio donde se "monta" el sistema de archivos, conocido como "punto de montaje". De forma tal que el directorio no se comporta como un directorio tradicional (conjunto de archivos y subdirectorios) sino que apunta a un sistema de archivos externo. De esto se trata el "montaje" de sistemas de archivos y así es como todos los archivos accesibles por el sistema operativo quedan organizados en un único gran árbol.

El sistema de archivos montado puede utilizar cualquier formato soportado por el sistema operativo o puede ser provisto a través la red (como por ejemplo Samba o NFS) u otros servicios. Típicamente mount es capaz de autodetectar el formato de sistema de archivos empleado por un dispositivo, con lo que el parámetro -t resulta opcional.



Con esta breve introducción acerca de sistemas de archivos, árboles de directorios, montaje y puntos de montaje, veamos a continuación cómo saber si un directorio es un directorio común o un punto de montaje (raíz de un sistema de archivos externo.

Cuando se ejecuta sin parámetros, mount lista todos los sistemas de archivos montados. La opción -l agrega las etiquetas a cada dispositivo (si es que tienen):

root@hal9000:~# mount -l
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=3999236k,nr_inodes=999809,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=802812k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro) [rootfs]
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
pstore on /sys/fs/pstore type pstore (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=3168020k)
/dev/sda4 on /data type ext4 (rw,relatime) [data]
/dev/sda3 on /home type ext4 (rw,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/elogind type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/elogind/elogind-cgroups-agent,name=elogind)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=802808k,mode=700,uid=1000,gid=1000)
none on /run/user/1000 type tmpfs (rw,relatime,mode=700,uid=1000)

A partir de la salida de mount, es posible listar todos los puntos de montaje con el siguiente comando:

root@hal9000:~# mount | cut -d' ' -f3
/sys
/proc
/dev
/dev/pts
/run
/
/run/lock
/sys/fs/pstore
/dev/shm
/data
/home
/sys/fs/cgroup
/sys/fs/cgroup/elogind
/run/user/1000
/run/user/1000

Sin embargo, existe una herramienta que permite saber si un directorio es un punto de montaje o no, se trata de mountpoint. Esta herramienta toma como parámetro una ruta a un directorio y determina si se trata o no de un punto de montaje:

root@hal9000:~# mountpoint /home
/home is a mountpoint
root@hal9000:~# mountpoint /usr/local
/usr/local is not a mountpoint

Esto resulta más rápido, práctico y eficiente que "parsear" la salida de mount, lo cual puede ser propenso a errores. Incluso una mejor alternativa al momento de programar scripts en Bash.

Incluso posee una opción "quiet" que permite desactivar toda salida y simplemente determinar si es o no un punto de montaje consultando el código de retorno del proceso:

root@hal9000:~# mountpoint -q /home
root@hal9000:~# echo $?
0
root@hal9000:~# mountpoint -q /usr
root@hal9000:~# echo $?
1
root@hal9000:~# mountpoint -q /saraza
root@hal9000:~# echo $?
1

Si es un punto de montaje retorna 0 (ok), si no lo es o no existe retorna 1 (error).

Con la opción -d es posible obtener el número de dispositivo (major/minor) montado en el punto de montaje pasado como parámetro:

root@hal9000:~# mountpoint -d /home
8:3
root@hal9000:~# ll /dev/block/8\:3
lrwxrwxrwx 1 root root 7 Nov 21 07:05 /dev/block/8:3 -> ../sda3

Por otro lado, mountpoint funciona tanto con rutas absolutas como relativas:

root@hal9000:~# cd /dev
root@hal9000:/dev# mountpoint shm/
shm/ is a mountpoint
root@hal9000:/dev# cd /usr/
root@hal9000:/usr# mountpoint local
local is not a mountpoint

Si se pasa una ruta o directorio inexistente retorna el siguiente error:

root@hal9000:/usr# mountpoint saraza
mountpoint: saraza: No such file or directory

Para más información, consultar las páginas de manual de ambos utilitarios:

man mount
man mountpoint


Tal vez pueda interesarte


Compartí este artículo