USB flash sürücülerimi bağlamak ve bağlantısını kesmek için bazı udev kuralları oluşturmaya çalıştım; an için kurallar çok basit:
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 da çok basit:
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"
Belirleyebilmem için bazı testler yaptım:
- Takıldığında, flash sürücüm algılandı; / dev içinde bir dosya oluşturulur
- plug_flash_drive.sh udev tarafından çağrılır
- betiğin mkdir kısmı çalışır
- ancak, betiğin "mount" kısmının yürütülmediği anlaşılıyor, bu yüzden sürücüm bağlı değil
- komut satırımda komut dosyalarımı çağırdığımda, mükemmel çalışıyorlar
Udev tarafından çağrıldığında bağlantının neden yürütülmediğini bilen var mı?
EDIT 28/08/14: Aygıt gerçekten komut dosyası bitmeden önce bağlanmışsa hata ayıklama günlüğümde kontrol etmek için komut dosyama "grep -q / proc / mounts && echo success || echo hatası" ekledim. Cihaz anlaşılmaktadır olan komut udev tarafından çağrılan hatta bu noktada monte. Yani asıl sorun şimdi "blok cihazım udev üzerinden çağrıldığında mount komut dosyası bittikten sonra kaldırılıyor gibi görünüyor": s
set -xv
ve exec >> "$HOME"/mount.log 2>&1
içine .sh
?
mkdir "$mount_dir"
amarmdir "/media/$device_name"
? Nerede$mount_dir
ayarlanır?