Я попытался создать некоторые правила udev для монтирования и размонтирования моих флешек; правила на данный момент очень просты:
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 также очень прост:
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"
Я провел несколько тестов, чтобы убедиться, что:
- При подключении моя флешка обнаружена; файл создается в / dev
- plug_flash_drive.sh вызывается udev
- часть скрипта mkdir работает
- однако кажется, что часть «mount» сценария не выполнена, поэтому мой диск не смонтирован
- когда я вызываю мои скрипты в командной строке, они отлично работают
Кто-нибудь знает, почему mount не выполняется при вызове udev?
РЕДАКТИРОВАТЬ 28/08/14: я добавил «grep -q / proc / mounts && echo success || echo fail» в конце моего скрипта, чтобы проверить в моем журнале отладки, действительно ли устройство смонтировано до его завершения. Оказывается , что устройство будет установлен в тот момент , даже если сценарий вызывается Udev. Таким образом, настоящая проблема в том, что «мое блочное устройство, по-видимому, размонтировано после завершения сценария монтирования при вызове через udev»: s
set -xv
и exec >> "$HOME"/mount.log 2>&1
в .sh
файлы?
mkdir "$mount_dir"
ноrmdir "/media/$device_name"
? Где$mount_dir
установлен?