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.
Requisitos previos: 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 kernel, 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.