मैंने अपने USB फ्लैश ड्राइव को माउंट और अनमाउंट करने के लिए कुछ udv नियम बनाने की कोशिश की; इस समय के नियम बहुत सरल हैं:
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"
मैंने कुछ परीक्षण किए हैं ताकि मुझे पता चल सके कि:
- जब प्लग किया जाता है, तो मेरी फ्लैश ड्राइव का पता लगाया जाता है; एक फ़ाइल / देव में बनाई गई है
- प्लग_फ्लैश_ड्राइव.श को udv द्वारा कहा जाता है
- स्क्रिप्ट का mkdir हिस्सा काम करता है
- हालाँकि, ऐसा लगता है कि स्क्रिप्ट का "माउंट" भाग निष्पादित नहीं किया गया है, इसलिए मेरी ड्राइव माउंट नहीं है
- जब मैं कमांड लाइन पर अपनी स्क्रिप्ट को कॉल करता हूं, तो वे पूरी तरह से काम करते हैं
क्या किसी को पता है कि udev द्वारा बुलाए जाने पर माउंट को निष्पादित क्यों नहीं किया जाता है?
EDIT 28/08/14: मैंने अपनी स्क्रिप्ट के अंत में "grep -q / proc / mounts && इको सक्सेस" इको फेल्योर को अपने डिबग लॉग में जांचने के लिए जोड़ा था कि क्या डिवाइस वास्तव में स्क्रिप्ट के समाप्त होने से पहले आरोहित है। ऐसा लगता है कि डिवाइस है उस बिंदु तक कि जब स्क्रिप्ट udev द्वारा कहा जाता है पर रखा होगा। तो अब असली समस्या यह है कि "मेरे ब्लॉक डिवाइस को uev के माध्यम से माउंट स्क्रिप्ट के अंत के बाद प्रतीत नहीं होता है": s
set -xv
और exec >> "$HOME"/mount.log 2>&1
में .sh
फ़ाइलें?
mkdir "$mount_dir"
हैं लेकिनrmdir "/media/$device_name"
? कहां$mount_dir
सेट है?