Traté de crear algunas reglas de udev para montar y desmontar mis unidades flash USB; Las reglas por el momento son muy simples:
ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
plug_flash_drive.sh también es muy simple:
device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
unplug_flash_drive.sh:
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
He hecho algunas pruebas para poder determinar que:
- Cuando está enchufado, se detecta mi unidad flash; se crea un archivo en / dev
- udev llama a plug_flash_drive.sh
- la parte mkdir del guión funciona
- sin embargo, parece que la parte "montar" del script no se ejecuta, por lo que mi unidad no está montada
- cuando llamo a mis scripts en la línea de comando, funcionan perfectamente
¿Alguien sabe por qué mount no se ejecuta cuando lo llama udev?
EDITAR 28/08/14: Agregué "grep -q / proc / mounts && echo success || echo failure" al final de mi script para verificar en mi registro de depuración si el dispositivo está realmente montado antes de que finalice el script. Parece que el dispositivo está montado en ese punto, incluso cuando el script es llamado por udev. Entonces, el verdadero problema ahora es "mi dispositivo de bloque aparentemente se desmonta después de que finaliza el script de montaje cuando se llama a través de udev": s
set -xv
y exec >> "$HOME"/mount.log 2>&1
en los .sh
archivos?
mkdir "$mount_dir"
, perormdir "/media/$device_name"
? ¿Dónde se$mount_dir
establece?