Saya mencoba membuat beberapa aturan udev untuk memasang dan melepas USB flash drive saya; aturan untuk saat ini sangat sederhana:
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 juga sangat sederhana:
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"
Saya telah melakukan beberapa tes sehingga saya dapat memastikan bahwa:
- Ketika dicolokkan, flash drive saya terdeteksi; file dibuat di / dev
- plug_flash_drive.sh disebut oleh udev
- bagian mkdir dari skrip berfungsi
- Namun, tampaknya bagian "mount" dari skrip tidak dieksekusi, jadi drive saya tidak terpasang
- ketika saya memanggil skrip saya di baris perintah, mereka bekerja dengan sempurna
Adakah yang tahu mengapa mount tidak dieksekusi ketika dipanggil oleh udev?
EDIT 28/08/14: Saya menambahkan "grep -q / proc / mounts && echo success || echo failure" di akhir skrip saya untuk memeriksa log debug saya jika perangkat benar-benar dipasang sebelum skrip berakhir. Tampaknya perangkat yang dipasang di titik tersebut bahkan ketika script disebut oleh udev. Jadi masalah sebenarnya adalah sekarang "perangkat blok saya tampaknya tidak terpasang setelah script mount berakhir ketika dipanggil melalui udev": s
set -xv
dan exec >> "$HOME"/mount.log 2>&1
ke dalam .sh
file?
mkdir "$mount_dir"
tapirmdir "/media/$device_name"
? Di mana$mount_dir
diatur?