Я спробував створити кілька правил 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" скрипту не виконується, тому мій диск не змонтований
- коли я називаю свої скрипти в командному рядку, вони прекрасно спрацьовують
Хтось знає, чому монтаж не виконується при виклику udev?
EDIT 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
встановлено?