Ich habe versucht, einige udev-Regeln zu erstellen, um meine USB-Flash-Laufwerke zu aktivieren und zu deaktivieren. Die Regeln für den Moment sind sehr einfach:
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 ist auch sehr einfach:
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"
Ich habe einige Tests durchgeführt, damit ich feststellen kann, dass:
- Beim Anschließen wird mein Flash-Laufwerk erkannt. Eine Datei wird in / dev erstellt
- plug_flash_drive.sh wird von udev aufgerufen
- Der mkdir-Teil des Skripts funktioniert
- Es scheint jedoch, dass der "Mount" -Teil des Skripts nicht ausgeführt wird, sodass mein Laufwerk nicht gemountet ist
- Wenn ich meine Skripte auf der Kommandozeile aufrufe, funktionieren sie perfekt
Weiß jemand, warum mount nicht ausgeführt wird, wenn es von udev aufgerufen wird?
EDIT 28/08/14: Ich habe am Ende meines Skripts "grep -q / proc / mounts && echo success || echo failure" hinzugefügt, um in meinem Debug-Protokoll zu überprüfen, ob das Gerät tatsächlich eingehängt ist, bevor das Skript endet. Es scheint, dass das Gerät an diesem Punkt eingehängt ist , auch wenn das Skript von udev aufgerufen wird. Das eigentliche Problem ist nun "Mein Block-Gerät scheint nach dem Ende des Mount-Skripts, wenn es über udev aufgerufen wird, nicht gemountet zu sein": s
set -xv
und exec >> "$HOME"/mount.log 2>&1
in die .sh
Akten legt ?
mkdir "$mount_dir"
aberrmdir "/media/$device_name"
? Wo wird$mount_dir
gesetzt?