Ho provato a creare alcune regole udev per montare e smontare le mie unità flash USB; le regole per il momento sono molto semplici:
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 è anche molto semplice:
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"
Ho fatto alcuni test in modo da poter accertare che:
- Quando collegato, la mia unità flash viene rilevata; un file viene creato in / dev
- plug_flash_drive.sh viene chiamato da udev
- la parte mkdir dello script funziona
- tuttavia, sembra che la parte "mount" dello script non sia eseguita, quindi il mio disco non è montato
- quando chiamo i miei script dalla riga di comando, funzionano perfettamente
Qualcuno sa perché mount non viene eseguito quando chiamato da udev?
EDIT 28/08/14: Ho aggiunto "grep -q / proc / mounts && echo success || echo failure" alla fine del mio script per controllare nel mio registro di debug se il dispositivo è effettivamente montato prima che lo script termini. Sembra che il dispositivo sia montato a quel punto anche quando lo script è chiamato da udev. Quindi il vero problema è ora "il mio dispositivo a blocchi è apparentemente smontato dopo la fine dello script mount quando chiamato tramite udev": s
set -xv
e exec >> "$HOME"/mount.log 2>&1
nei .sh
file?
mkdir "$mount_dir"
, marmdir "/media/$device_name"
? Dove è$mount_dir
impostato?