Tôi đã cố gắng tạo một số quy tắc udev để gắn kết và ngắt kết nối ổ đĩa flash USB của mình; các quy tắc cho thời điểm này rất đơn giản:
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 cũng rất đơn giản:
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"
unsug_flash_drive.sh:
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
Tôi đã thực hiện một số thử nghiệm để tôi có thể xác định rằng:
- Khi cắm điện, ổ flash của tôi được phát hiện; một tập tin được tạo trong / dev
- plug_flash_drive.sh được gọi bởi udev
- phần mkdir của kịch bản hoạt động
- tuy nhiên, có vẻ như phần "mount" của tập lệnh không được thực thi, vì vậy ổ đĩa của tôi không được gắn kết
- Khi tôi gọi các tập lệnh của mình trên dòng lệnh, chúng hoàn toàn hoạt động
Có ai biết tại sao mount không được thực thi khi được gọi bởi udev?
EDIT 28/08/14: Tôi đã thêm "grep -q / Proc / mounts && echo thành công | Có vẻ như thiết bị được gắn tại thời điểm đó ngay cả khi tập lệnh được gọi bởi udev. Vì vậy, vấn đề thực sự bây giờ là "thiết bị chặn của tôi dường như chưa được khắc phục sau khi tập lệnh mount kết thúc khi được gọi qua udev": s
set -xv
và exec >> "$HOME"/mount.log 2>&1
vào các .sh
tập tin?
mkdir "$mount_dir"
nhưngrmdir "/media/$device_name"
? Đặt ở đâu$mount_dir
?