Estamos actualizando nuestros servidores desde una distribución muy desactualizada a un sistema moderno basado en Debian Jessie, que incluye lightdm / xfce y, por supuesto, systemd (y udisks2). Un punto de fricción es el montaje automático de unidades USB. Solíamos lograr esto con algunas reglas de udev. Las viejas reglas casi siguen funcionando: el punto de montaje se crea y la unidad se monta bien, pero después de unos segundos systemd está haciendo algo que rompe el montaje, por lo que los intentos de acceso posteriores producen errores de "El punto final de transporte no está conectado".
Montar manualmente la unidad a través de la línea de comando funciona bien. Al igual que dejar un administrador de archivos (thunar y thunar-volman, que a su vez usa udisks2). Pero esas no son opciones viables: estos sistemas se ejecutan principalmente sin cabeza, por lo que normalmente no se ejecuta thunar. Necesitamos poder conectar unidades de disco para copias de seguridad desatendidas basadas en cron.
Pensé que modificar el script udev para generar un trabajo separado que espere unos segundos antes de realizar el montaje podría hacer el truco, pero systemd parece hacer todo lo posible para evitar esto; de alguna manera todavía espera que el trabajo separado termine antes continuo.
¿Quizás el guión udev le hace cosquillas a udisks2 de alguna manera es el enfoque correcto? Estoy perdido, por lo que cualquier consejo es muy apreciado.
fuente
Respuestas:
Después de varios comienzos falsos, descubrí esto. La clave es agregar un servicio de unidad systemd entre udev y un script de montaje.
(Para el registro, no pude hacer que esto funcionara utilizando udisks2 (a través de algo así
udisksctl mount -b /dev/sdb1
) llamado directamente desde una regla udev o desde un archivo de unidad systemd. Parece que hay una condición de carrera y el nodo del dispositivo no está listo , lo que resulta enError looking up object for device /dev/sdb1
. Desafortunado, ya que udisks2 podría encargarse de todo el desorden del punto de montaje ...)El trabajo pesado se realiza mediante un script de shell, que se encarga de crear y eliminar puntos de montaje, y de montar y desmontar las unidades.
/usr/local/bin/usb-mount.sh
El script, a su vez, es llamado por un archivo de unidad systemd. Utilizamos la sintaxis del nombre de archivo "@" para poder pasar el nombre del dispositivo como argumento.
/etc/systemd/system/[email protected]
Finalmente, algunas reglas de udev inician y detienen el servicio de la unidad systemd en hotplug / unplug:
/etc/udev/rules.d/99-local.rules
Esto parece hacer el truco! Un par de comandos útiles para depurar cosas como esta:
udevadm control -l debug
activa el registro detallado para/var/log/syslog
que pueda ver lo que está sucediendo.udevadm control --reload-rules
después de modificar archivos en el directorio rules.d (puede que no sea necesario, pero no puede dañar ...).systemctl daemon-reload
después de modificar los archivos de la unidad systemd.fuente
blkid
no parece extraer unID_FS_LABEL
, así que simplemente utilicé el enDEVBASE
lugar deLABEL
construirloMOUNT_POINT
.udevadm
lugar deblkid
. Ofrece muchos más detalles, así como información adicional. (p. ej.udevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. La limpieza puede usar una verificación adicional comoif [ "$f" != "/media/*" ]; then
antes de ejecutarsefind
.hay una nueva y sucinta
systemd
opción de montaje automático que se puede usar con lafstab
que le permite usar todas las opciones de permisos de montaje estandarizados, y se ve así:Un ejemplo de ello en una
fstab
línea:la
noauto
opción significará que no intentará montarse en el arranque, como ocurre con el software anteriorautofs
.después de agregarle una nueva
x-systemd.automount
líneafstab
, debe ejecutar:y luego ambos, o uno, de los siguientes:
para más información al respecto:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
fuente
sudo systemctl restart local-fs.target
hizo el truco para míHe modificado el script de @MikeBlackwell a:
/dev/sd[a-z]
sino/dev/sd[a-z]*
; a menudo, el caso con servidores que tienen un mayor número de cabezales./var/log/usb-mount.track
/var/log/messages
con la etiqueta usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Como @MikeBlackwell ya ha realizado la mayor parte del trabajo pesado, decidí no reescribirlo; Acabo de hacer los cambios necesarios. He reconocido su trabajo avistando su nombre y URI de la respuesta original.
Encuéntralo en https://github.com/raamsri/automount-usb
fuente
Usando pmount , systemd y el enfoque de Mike Blackwell, puede simplificar todo:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH y gracias Mike.
fuente
Iría con la respuesta de Warren Young. Tengo algunos cambios que hice en
Agregué algo de protección de espacio ya que estaba dando errores de la evaluación del entorno para la unidad.
Agregué una sección para chmod un disco usb para que todos los usuarios tengan acceso completo a discos que no sean ntfs o vfat.
/usr/local/bin/usb-mount.sh
fuente