ওদেব দ্বারা ডাকলে মাউন্ট কার্যকর করা হয় না


17

আমি আমার ইউএসবি ফ্ল্যাশ ড্রাইভগুলি মাউন্ট এবং আনমাউন্ট করার জন্য কিছু udev নিয়ম তৈরি করার চেষ্টা করেছি; এই মুহুর্তের নিয়মগুলি খুব সহজ:

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"

প্লাগ_ফ্ল্যাশ_ড্রাইভ.শ খুব সহজ:

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"

আমি কিছু পরীক্ষা করেছি যাতে আমি তা নিশ্চিত করতে পারি:

  • প্লাগ ইন করা অবস্থায়, আমার ফ্ল্যাশ ড্রাইভটি সনাক্ত করা হয়; একটি ফাইল / ডিভ মধ্যে তৈরি করা হয়
  • প্লাগ_ফ্ল্যাশ_ড্রাইভ.শকে বলা হয় ইউদেব
  • স্ক্রিপ্টের mkdir অংশ কাজ করে
  • তবে, মনে হচ্ছে স্ক্রিপ্টের "মাউন্ট" অংশটি কার্যকর করা হয়নি, তাই আমার ড্রাইভটি মাউন্ট করা হয়নি
  • আমি যখন কমান্ড লাইনে আমার স্ক্রিপ্টগুলি কল করি তখন সেগুলি পুরোপুরি কার্যকর হয়

কেউ কি জানেন যে ওদেব ডেকে মাউন্ট চালানো হয় না কেন?

সম্পাদনা 28/08/14: আমি স্ক্রিপ্টের শেষে ডিগ্রিটি শেষ হওয়ার আগে ডিভাইসটি মাউন্ট করা আছে কিনা তা পরীক্ষা করতে আমার স্ক্রিপ্টের শেষে "গ্রেপ-কিউ / প্রো / মাউন্টস & অ্যান্ড সাফল্য || প্রতিধ্বনি ব্যর্থতা" যুক্ত করেছি added মনে হচ্ছে যে ডিভাইস হয় যে বিন্দু এমনকি যখন স্ক্রিপ্ট udev দ্বারা বলা হয় এ মাউন্ট করা। সুতরাং আসল সমস্যাটি হ'ল "আমার ব্লক ডিভাইসটি মাউন্ট স্ক্রিপ্ট শেষ হওয়ার পরে আপাতদৃষ্টিতে আনমাউন্ট করা হবে যখন উদেব মাধ্যমে ডাকবে":


এটি পয়েন্ট পাশে থাকতে পারে, কিন্তু আপনি mkdir "$mount_dir"কিন্তু কেন rmdir "/media/$device_name"? কোথায় $mount_dirসেট করা হয়?
জি-ম্যান

দুঃখিত, এটি একটি টাইপো, আমি মূল কোডগুলিতে কিছুটা অযথা ভেরিয়েবল ব্যবহার করি এবং স্পষ্টতার জন্য আমি এগুলি এখানে সরিয়ে দিয়েছি
Magva

আপনি কি পুরানো-স্কুল ডিবাগ করার চেষ্টা করেছেন; উদাহরণস্বরূপ, ফাইল স্থাপন করে set -xvএবং exec >> "$HOME"/mount.log 2>&1মধ্যে .sh?
জি-ম্যান 20:

1
আমি এটি করেছি, তবে আমি যে লগ পেয়েছি তা অনুসারে মাউন্ট স্ক্রিপ্টটি যখন ওদেব দ্বারা ডাকা হয় তখন সম্পাদন করা হয়।
উদেব

1
সেক্ষেত্রে, কমান্ড লাইন থেকে চালিত হলে স্ক্রিপ্টটিও ব্যর্থ হয়
Magva

উত্তর:


22

systemd-udevd তার নিজস্ব ফাইল সিস্টেম নেমস্পেসে চলে এবং ডিফল্টরূপে মাউন্টে udev .rules এর মধ্যে সম্পন্ন হোস্টে প্রচার করে না। আপনার পুরানো স্ক্রিপ্ট কাজ আপনি সেট পারেন তা নিশ্চিত করার MountFlags=sharedমধ্যে /usr/lib/systemd/system/systemd-udevd.serviceঅথবা (ভাল) তৈরি এবং তার কপি সম্পাদনা/etc/systemd/system/

দেখুন man 5 systemd.exec, আরও তথ্যের জন্য MountFlagsবিকল্প।


"হোস্টে প্রচার করবেন না" বলতে কী বোঝ?
sebelk

2
@ সেবেলক আমি বিশ্বাস করি ব্যবহারকারী 8৩৩৮৮ এর অর্থ তারা "মূল" নামের জায়গাতে প্রচার করেন না
চিহ্নিত করুন

2

এই লেখার হিসাবে, অন্যান্য উত্তরগুলি ভুল (বা তারিখের বাইরে)।

আপনার mountসিস্টেমড পরিষেবা থেকে চালানো উচিত নয় । এমনকি মন্তব্য পর MountFlagsএবং PrivateMountsলাইন systemd-udevd.service, আপনার নিয়ম এনটিএফএস বা exFAT মত ফিউজ ফাইল-সিস্টেমের জন্য কাজ করবে না, কারণ ফিউজ প্রক্রিয়া সহায়কভাবে systemd হত্যা করা হবে।

দেখুন এই ArchWiki পৃষ্ঠা যা বহু ভাল অপশন তালিকাবদ্ধ করে। আমার পছন্দটি গিটহাবের একটি ছোট প্রকল্প যা ইউদেব -মিডিয়া- অটোমাউন্ট নামে পরিচিত , যা কেবল উদেব বিধি থেকে একটি সিস্টেমড পরিষেবা পুনরায় চালু করে। নেমস্পেস এবং শিশু প্রক্রিয়াগুলিতে উদেবের বিভিন্ন অসুবিধাজনক বিধিনিষেধের আশেপাশে যাওয়ার এটি একটি সুবিধাজনক উপায়।

আরও দেখুন এই anwser , যা শো কীভাবে ব্যবহার করবেন তা SYSTEMD_WANTSudev পরিবর্তনশীল একটি systemd ইউনিট শুরু।


-1

আপনি RUN কার্যবিধির :=পরিবর্তে ব্যবহার করার চেষ্টা করতে পারেন +=

:=অপারেটর তালিকা মান সেট করে এবং আরও পরিবর্তন নামঞ্জুর করে।


ধন্যবাদ, তবে মাউন্টটি এখনও কাজ করে না :(
ম্যাগভা

1
হতে পারে আপনার ক্ষেত্রে না, তবে আমার সিস্টেমে মাউন্টটি / বিন / মাউন্টে অবস্থিত। "কমান্ড -v মাউন্ট" চেষ্টা করুন।
xae

1
আমার সিস্টেমে "কমান্ড -v মাউন্ট" দ্বারা ফিরে আসা পথটি / ইউএসআর / বিন / মাউন্ট। আমি লক্ষ্য করেছি যে আমার কাছে একটি / বিন / মাউন্ট এক্সিকিউটেবল ছিল, তবে
উদেব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.