SDB:Fundamentos del acceso a dispositivos

Saltar a: navegación, buscar
Artículos recomendados Artículos relacionados
Icon-manual.png Icon-ayuda.png

Montaje estático (mount)

Para utilizar un dispositivo en un sistema GNU/Linux, su contenido ha de estar organizado con algún sistema de ficheros. Los más habituales para discos duros son ext4, reiserfs, xfs o ntfs, mientras que los discos CD/DVD emplean iso9960.

Cada sistema de ficheros se ubica en el lugar establecido según la Jerarquía de ficheros. Así, de la raíz (root o /, no lo confundas con el nombre del usuario administrador) pende todo el contenido del sistema, como por ejemplo /home, que es donde se guardan los datos de los usuarios.

Se denomina Montar a la acción de asociar el contenido de un dispositivo, es decir, su sistema de ficheros, a una carpeta determinada, que se denomina punto de montaje. El comando empleado para montar sistemas de ficheros se denomina con el descriptivo nombre de mount.

Mount puede ser empleado manualmente en un terminal para montar sistemas de ficheros, pero lo más habitual es que se utilice para montar los sistemas de ficheros que se describen en el archivo /etc/fstab.

Montar un dispositivo es hacer accesible dicho dispositivo en una carpeta dada, llamada Punto de montaje.

Knotes 128x128.png

Montaje manual en terminal

Si el sistema de ficheros a montar no está indicado en /etc/fstab o si bien queremos montarlo con otras opciones, puede invocarse o bien como usuario root o bien haciendo uso de la herramienta sudo, siguiendo la siguiente sintaxis:

mount [-t <tipo>] [-o <opciones>] <dispositivo> <punto_de_lectura> 
  • <tipo>: tipo de sistema de archivos: por ejemplo, ext4, reiserfs, xfs, etc. de GNU/Linux, ntfs-3g y vfat para Windows.
  • <opciones>: son múltiples, aunque destacan ro (sólo lectura), rw (lectura/escritura), loop (para montar cosas como las imágenes iso) y noauto (no montar automáticamente al arrancar). Deben especificarse sin espacios y separadas por comas.
  • <dispositivo>: módulo del núcleo correspondiente al dispositivo a montar. Típicamente /dev/sda es el primer disco duro y /dev/sdb el segundo, siendo los pendrives /dev/sdc, etc. Ha de indicarse también la partición dentro del disco.
  • <punto de lectura>: la carpeta que contendrá el sistema de ficheros montado.

Por ejemplo, la siguiente orden montaría la tercera partición del segundo disco duro en la carpeta /mnt:

root@opensuse-test # mount -t ntfs-3g -o defaults,rw /dev/sdb3 /mnt

Mientras que la siguiente haría accesible el contenido de una imagen iso en la carpeta /home/usuario/isos:

root@opensuse-test # mount -t iso9660 -o loop /home/usuario/Descargas/imagen.iso /home/usuario/isos

Si se ejecuta mount sin parámetros, mostrará los sistemas de ficheros montados en el sistema.

Para desmontar un dispositivo montado con mount se utiliza el comando umount, con la sintaxis:

umount <punto_de_lectura>
Los dos dispositivos montados en los ejemplos anteriores se desmontarían, respectivamente, con los siguientes comandos:
root@opensuse-test # umount /mnt
root@opensuse-test # umount /home/usuario/isos

Para desmontar un dispositivo no puede haber ninguna aplicación que esté haciendo uso de él, incluido el terminal (u otros terminales que puedan estar en ejecución en el sistema, incluso de scripts en ejecución). Así, en el ejemplo:

tux@opensuse-test:~> sudo mount /dev/sdb4 /mnt
tux@opensuse-test:~> cd /mnt
tux@opensuse-test:~> sudo umount /mnt
se obtendría un error de dispositivo en uso.

Un error muy común en principiantes es montar un dispositivo, acceder a él p.ej. como root, iniciar una sesión de usuario con su usuario y al cabo de un rato intentar desmontarlo en esa misma sesión de usuario, lo que da error porque la sesión se inició dentro del dispositivo.

Dialogo informacion 64x64.png

Sintaxis de fstab

En el archivo /etc/fstab se definen los sistemas de ficheros a montar con mount. El archivo contiene líneas que siguen la siguiente sintaxis:

<dispositivo> <punto_de_montaje> <sistema_de_archivos> <opciones> <dump-freq> <pass-num>

Como en cualquier fichero de configuración de Bash, el carácter almohadilla (#) convierte la línea en un comentario.

  • <dispositivo>: para el caso de usar el UUID, se antepone la palabra UUID y el identificador obtenido con el comando blkid (pero sin las comillas), de la forma:
UUID="serie_de_caracteres_que_identifica_al_dispositivo"
  • <punto_de_montaje>, <sistema_de_archivos> y <opciones> siguen las mismas reglas que para el montaje manual.
  • <dump-freq>: frecuencia con la que dump respaldará ese sistema de ficheros. Si es 0 no se respaldará.
  • <pass-num>: orden en el que fsck comprobará dicho sistema en busca de errores al inicio. Si es 0 no se revisará.

Lo que sigue es un ejemplo muy completo y detallado de un archivo fstab procedente de la wikipedia:

# dispositivo punto_de_montaje sistema_de_archivos opciones dump-freq pass-num
LABEL=/ / ext3 defaults 1 1
/dev/hda6 swap swap defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0

# Dispositivos extraíbles
/dev/cdrom /mount/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mount/floppy auto ,owner,kudzu 0 0
/dev/sdb /mount/usb vfat rw,user,noauto 0 0

# Partición NTFS de Windows XP
/dev/hda1 /mnt/WinXP ntfs-3g quiet,defaults,locale=en_US.utf8,umask=0 0 0

# Partición compartida entre Windows y Linux
/dev/hda7 /mnt/compartidos vfat umask=000 0 0

# Sistema de archivos de red, NFS
192.168.1.1:/home/usuario/Escritorio /mnt/remoto nfs defaults,auto,rw 0 0

# Carpeta compartida mediante SAMBA o Windows
//192.168.1.1/PUBLICO /media/PUBLICO smbfs username=publico,password=publico,dir_mode=0777,file_mode=0777 0 0

El comando

root@opensuse-test # mount -a
monta automáticamente el contenido de /etc/fstab salvo aquellos sistemas de ficheros que entre sus opciones tengan noauto. El comando es el mismo que ejecuta el sistema en el arranque.

Automontaje (autofs)

Autofs es una herramienta desarrollada para evitar el montaje manual de los distintos dispositivos, y puede verse como una evolución del sistema estático basado en mount y /etc/fstab.

Autofs permite gestionar sistemas de ficheros de nuestro sistema automáticamente, de forma que se monten cuando se intenta acceder a ellos y se desmonten cuando dejan de utilizarse.

Knotes 128x128.png

Autofs utiliza el demonio automount, que es el que se encarga de controlar el acceso a los puntos de montaje definidos en un archivo de configuración denominado /etc/auto.master. En él se definen los puntos de montaje a utilizar para los sistemas a montar de forma automática y los archivos de configuración correspondientes, así como otros parámetros que pudieran requerirse.

Por ejemplo, la línea

/externos /etc/auto.discos

indica que en la carpeta /externos se montarán los sistemas de ficheros descritos en el archivo /etc/auto.discos. La carpeta /externos es creada por el demonio automount cuando se inicia autofs.

El archivo de configuración de los sistemas de ficheros a automontar (en el ejemplo, /etc/auto.discos) tiene una estructura similar a /etc/fstab:

<nombre de la carpeta donde se montará el sistema de ficheros>  <opciones, incluido el tipo de sistema de archivos>   <dispositivo a montar>
  • <nombre de la carpeta donde se montará el sistema de ficheros>: sólo el nombre de la carpeta, sin la barra separadora.
  • <opciones, incluido el tipo de sistema de archivos>: similar a fstab, pero para el tipo de sistema de archivos se utiliza la opción -fstype=<tipo>
  • <dispositivo a montar>: Se antepone el signo dos puntos (:) antes del nombre de dispositivo, a menos que se utilice otros inidicadores, como por ejemplo el UUID. En este caso, se antepone el tipo de identificador de la forma
UUID="serie_de_caracteres_que_identifica_al_dispositivo"

La instalación estándar incluye /etc/auto.misc con un grupo de ejemplos de automontajes. También se incluyen /etc/auto.net y auto.smb para los automontajes especiales en red.

Montaje dinámico (udev)

udev surge por la necesidad de permitir conectar multitud de dispositivos a tu sistema. Además de CD/DVD, hoy son corrientes los discos duros externos, los pendrives y cualquier cosa que pueda conectarse mediante USB.

Con udev el sistema carga los dispositivos cuando son conectados al sistema, cargando el driver oportuno, si se requiere, y puede proceder a montarlos en su caso. La gestión de dispositivos tiene lugar en el espacio de usuario, lo que facilita la asignación de permisos, y además permite el uso de nombres persistentes.

udev usa el demonio udevd. Cuando udevd detecta la conexión o desconexión de un dispositivo, udev obtiene información de contexto (subsistema del kernel, conector físico usado, nombre dado por el kernel, ...) y también del propio dispositivo (número de serie, fabricante, ...). Para encontrar esta información utiliza los datos disponibles en /sys (donde está montado el sistema de ficheros sysfs) (versión del núcleo 2.6 y posteriores).

udev permite gestionar los dispositivos conectados al sistema de forma dinámica.

Knotes 128x128.png

Un conjunto de reglas (en /etc/udev/rules.d/) deciden qué acción hay que hacer a partir de los datos obtenidos. Por ejemplo, la regla proporcionará un nombre al dispositivo, creará el fichero de dispositivo apropiado, y ejecutará el programa que se haya configurado para que acabe de hacer funcionar el dispositivo.

Las reglas pueden asociar un nombre fijo a un dispositivo, pero también pueden llamar a un programa externo que dé más información sobre el dispositivo; así se puede conseguir un nombre más específico.

Un ejemplo para dos impresoras podría ser:

BUS=="usb", SYSFS_serial=="W09090207101241330", \
NAME="lp_color"
BUS=="usb", SYSFS_serial=="HXOLL0012202323480", \
NAME="lp_plain"