Sugerencias necesarias para udev, udisks, autofs, configuración de notificaciones para una solución completa de montaje automático en Linux


9

Continuando con el montaje automático de dispositivos conectados en Linux , lo que dejó las cosas un poco básicas. Al ejecutar Gentoo, estoy montando automáticamente una combinación de dispositivos locales y de red en mi computadora portátil con autofs-5.0.4-r5. Hacer autofs solo me da un par de quejas:

  • Tengo que predefinir nombres para puntos de montaje por dispositivo, pero ocasionalmente después de reiniciar mi lector de tarjetas MMC cambia de posición con mi memoria USB de arranque
  • Me gustaría que aparecieran puntos de montaje automáticos basados ​​en LABEL, solo los autofs AFAIK no pueden hacer eso

Que es lo que udev y udisks son ciertamente capaces de hacer. Pero:

  • No quiero que el sistema de archivos se monte automáticamente al enchufar el dispositivo, solo dame el punto de montaje fantasma llamado LABEL

El montaje real del sistema de archivos solo debería ocurrir en el primer acceso al punto de montaje, al igual que funciona el autofs fantasma. Esto debería reducir el riesgo de ensuciar los sistemas de archivos al desconectar accidentalmente los dispositivos, al tiempo que proporciona una gran accesibilidad.

Además de esto, podría usar saber en todo momento lo que está sucediendo en mi DE.

  • ¿Existe una aplicación de bandeja del sistema que sea capaz de indicar el estado de todos los montajes automáticos, es decir, verde = nada está montado, rojo = algo está montado?
  • ¿Existe una forma independiente de la distribución para proporcionar notificaciones de operación del sistema de archivos (des) montaje, por ejemplo, mediante notificación-envío? ¿Qué pasa con Gentoo-específico, eso también funciona para mí? Scripting udev no ayuda con NFS y CIFS, ¿verdad?

Este combo debería ser la última configuración de montaje automático, ¿o me falta algo?


He estado con Gnome ahora durante los últimos años, por lo que rodar el mío ya no es tan relevante.
lkraav

Respuestas:


4

Todo esto es factible con udev. Eche un vistazo a UAM , que parece abordar la mayoría de los problemas que ha mencionado, pero en realidad se monta automáticamente. Si lo desea, puede hacer uso de las excelentes capacidades que ofrece, pero modificarlo para que los medios no se monten automáticamente. También puede contactar al autor y sugerir su enfoque de montaje no automático como una nueva característica. Mientras tanto, eche un vistazo a sus capacidades:

  • Funciona además de udevhacerlo independiente del DE y basado en eventos. (También sugiere una solución alternativa para los medios ópticos que podrían no detectarse udev).
  • Le permite definir MOUNTPOINT_TEMPLATESque puede resolver el problema de nomenclatura que ha mencionado de varias maneras personalizadas (consulte uam.conf ), que posiblemente también utilice LABEL(como desee)
  • Los mecanismos de notificación son compatibles, solo tendrá que ajustarlos a sus necesidades específicas de DE.
  • Parece tener un diseño claro, que le permite localizar fácilmente dónde, cuándo y cómo se desencadena cada acción.

Hoy me remitieron a tinymount en #awesome, los interesados ​​en este tema probablemente deberían
echarle un

Mientras tanto, he seguido utilizando principalmente bashmount.
lkraav

2

Así es como lo hice recientemente, y ahora estoy bastante contento con este enfoque. Esto es para Ubuntu 12.04 + gentoo, pero supongo que cualquier distribución que permita instalar udev y autofs debería funcionar.

Prerrequisitos: debe haber instalado udev + autofs.

Paso 1)

Cree el siguiente archivo "/etc/udev/rules.d/90-usbsd-auto.rules" (por supuesto, puede usar cualquier nombre siempre que termine con ".rules"). :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9] 
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
    RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"

# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    RUN+="/bin/rm /media/usb/%k"

Qué hace esto: crea dos enlaces simbólicos, uno para la partición del dispositivo de almacenamiento USB en "/ dev / usbdisks / <...>". Utilizará la etiqueta de la partición de almacenamiento USB o el nombre del núcleo, si no hay una etiqueta. El segundo enlace simbólico se vinculará desde "/ media / usb / <...>" a "/ media / autousb / <...>", esto se hace para el soporte del montador automático (consulte el paso 2).

Nota: Originalmente no usé las reglas con las variables ID_FS_LABEL_ENC, ya que esto es peligroso en mi opinión. ¿Qué sucede si conecta dos memorias USB que usan la misma etiqueta?

Pero el póster específicamente quería usar la etiqueta del disco USB, por lo que modifiqué las reglas en consecuencia.

Para asegurarse de que udev lea estas reglas use

sudo udevadm control --reload-rules

Con este archivo de reglas de udev, todo está configurado para montar automáticamente la partición del dispositivo de almacenamiento USB. Sin embargo, tenga en cuenta que en este momento, el dispositivo NO se montará automáticamente (intencionalmente). Se montará automáticamente una vez que lo use con

Paso 2)

Configure autofs en automount / media / autousb / <...>: agregué la siguiente línea a mi archivo "/etc/auto.master" (para Ubuntu 12.04):

/media/autousb /etc/auto.usb --timeout=60

Esto significa que AutoFS desmontará el dispositivo después de 60 segundos de inactividad. Es posible que desee usar menos o más, dependiendo de su gusto.

Para Gentoo, debe modificar "/etc/autofs/auto.master" para que tenga sentido usar

/media/autousb /etc/autofs/auto.usb --timeout=60

Ahora creé "auto.usb" con el siguiente contenido:

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

Este auto.usb debe ser ejecutable, de modo que autofs use esto como un script (bash). Así por ejemplo

sudo chmod 0755 /etc/auto.usb

Qué hace esto: este script le dirá a AutoFS (/ usr / sbin / automount) cómo montar la partición del dispositivo de almacenamiento usb.

El script primero usará "/ sbin / blkid" para averiguar qué tipo de sistema de archivos hay en la partición.

El script proporcionará las opciones de montaje adecuadas según la partición del dispositivo.

Nota: Incluí código de muestra para los sistemas de archivos "vfat" (probablemente el más común para memorias USB), "ntfs" y "xfs". Por supuesto, es bastante fácil extender esto para admitir más sistemas de archivos.

Paso 3) Opcional ... Para "expulsar" == desmontar su (s) dispositivo (s) USB (o particiones en su dispositivo USB), cree un script en / sbin / usbeject:

#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount

Con este script, puede usar "sudo usbeject" para desmontar todas las particiones de dispositivos USB montadas (diciéndole a automount que las desmonte).

Por supuesto, simplemente puede asegurarse de que la partición no se use en ninguna parte; automounter desmontará la partición después del tiempo de espera de 60 segundos ...

El verdadero truco aquí es usar enlaces simbólicos de "/ media / usb" a "/ media / autousb":

  • Los enlaces simbólicos "/ media / usb" serán creados por udev, dando al usuario una visión general simple de qué particiones de dispositivos de almacenamiento usb existen
  • AutoFS montará automáticamente la partición a pedido si la usa a través de / media / usb
  • Con el archivo "auto.usb" con script, puede admitir cualquier tipo de sistema de archivos y, además, también puede admitir cualquier tipo de esquema de nomenclatura.
  • Este enfoque admite memorias USB con múltiples particiones, incluso si estas particiones usan diferentes tipos de sistemas de archivos.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.