ฉันพยายามสร้างกฎ udev เพื่อเมานต์และยกเลิกการต่อเชื่อมแฟลชไดรฟ์ USB ของฉัน กฎสำหรับช่วงเวลานั้นง่ายมาก:
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 ของสคริปต์ทำงาน
- อย่างไรก็ตามดูเหมือนว่าส่วน "เมานท์" ของสคริปต์จะไม่ถูกเรียกใช้งานดังนั้นไดรฟ์ของฉันจึงไม่ถูกเมานต์
- เมื่อฉันเรียกสคริปต์ของฉันบนบรรทัดคำสั่งพวกเขาทำงานได้อย่างสมบูรณ์
ไม่มีใครรู้ว่าทำไมการติดตั้งไม่ได้ถูกเรียกใช้เมื่อเรียกโดย udev
แก้ไข 28/08/14: ฉันเพิ่ม "grep -q / proc / mounts && echo success || echo failure" ที่ท้ายสคริปต์ของฉันเพื่อตรวจสอบในบันทึกการแก้ไขข้อบกพร่องของฉันหากอุปกรณ์ถูกติดตั้งจริงก่อนที่สคริปต์จะจบลง ปรากฏว่ามีการติดตั้งอุปกรณ์ณ จุดนั้นแม้ว่าจะมีการเรียกใช้สคริปต์โดย udev ดังนั้นปัญหาที่แท้จริงคือตอนนี้ "อุปกรณ์บล็อกของฉันดูเหมือนจะไม่ได้ต่อเชื่อมหลังจากสคริปต์ mount สิ้นสุดเมื่อเรียกผ่าน udev": s
set -xv
และexec >> "$HOME"/mount.log 2>&1
เข้าไปใน.sh
ไฟล์?
mkdir "$mount_dir"
แต่rmdir "/media/$device_name"
?$mount_dir
ตั้งอยู่ที่ไหน