কোনও ব্যবহারকারী লগইন না করে বুটে স্বয়ংক্রিয়ভাবে বাহ্যিক ড্রাইভগুলি / মিডিয়া / LABEL এ মাউন্ট করবেন?


73

এই প্রশ্নটি একই, তবে আমি যা চাই তার বিপরীতে। আমি চাই যে বাহ্যিক ইউএসবি ড্রাইভগুলি বুটের সময় স্বয়ংক্রিয়ভাবে মাউন্ট করা হোক, যাতে কেউ লগইন না করে, এর মতো লোকেশনে চলে যায় /media/<label>

আমি সমস্ত তথ্য fstab এ প্রবেশ করতে চাই না, আংশিক কারণ এটি ক্লান্তিকর এবং বিরক্তিকর, তবে বেশিরভাগ কারণেই আমি ভবিষ্যদ্বাণী করতে পারি না যে আমি এটিতে কী যুক্ত করব বা কীভাবে পার্টিশনগুলি ভবিষ্যতে পরিবর্তিত হবে।

আমি চাই যে ড্রাইভগুলি এমপিডির মতো জিনিসে অ্যাক্সেসযোগ্য হয়ে উঠুক এবং যখন আমি এসএসএইচ দিয়ে লগ ইন করি তখন উপলভ্য হয়। gnome-mountআপনি যখন স্থানীয়ভাবে কোনও জিনোম গ্রাফিকাল সেশনে লগইন করেন তখন কেবল জিনিসগুলি মাউন্ট করার জন্য মনে হয়।


4
দুর্দান্ত প্রশ্ন, আশা করি আপনার কাছে আমার একটি উত্তর থাকত, এখন আমি কীভাবে এটি সমাধান করা যায় তা আগ্রহী।
invert

1
আমি আমার উত্তর আপডেট।
রায়ান থমসন 20

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

1
আরআরআরজিএইচ ... আমার উত্তরে বাগ। চলমান /usr/local/sbin/udev-automounter.sh mount %kহওয়া উচিত /usr/local/sbin/udev-automounter.sh %k। দুঃখিত।
কোয়াকোট কোয়েক্সোট

1
ঠিক আছে, আপডেট -3 হিসাবে এটি স্পেসগুলির সাথে কাজ করে। এটি <LABEL> এর একটি "এনকোডড" সংস্করণ ব্যবহার করে এটি করে যা স্পেসগুলিকে \x20'র মধ্যে রূপান্তর করে । সুতরাং এটি সুন্দর নয়, তবে এটি কার্যকর হবে। উদেব স্পেস-সহ স্পেসগুলি লেবেলগুলি সুন্দরভাবে পরিচালনা করছে না, তবে আরও একটি বিকল্প রয়েছে যা এর পরিবর্তে আন্ডারস্কোর ব্যবহার করে \x20(যাতে এটি কমপক্ষে দেখতে সুন্দর দেখাচ্ছে)। দেখে মনে হচ্ছে স্পেস হ্যান্ডলিংয়ের শেলস স্ক্রিপ্টগুলিতে যেতে হবে।
কোয়াকোট কোয়েসোট

উত্তর:


74
  • উবুন্টু সার্ভার ১১.১০ এর জন্য দ্রষ্টব্য: অপ্রচলিত vol_idকমান্ডের কারণে এই স্ক্রিপ্টটি উবুন্টু সার্ভার ১১.১০ এ ব্যর্থ হয়েছে । vol_idদ্বারা দমন করা হয়েছে blkid। স্ক্রিপ্টটি ঠিক করতে, স্ক্রিপ্টে "blkid -o udev" দ্বারা "vol_id" প্রতিস্থাপন করুন udev-auto-mount.sh

আমি কিছুক্ষণের জন্য এদিকে মাথা ঘুরছি, এবং আমি মনে করি আমি একটি কার্যকরী সমাধান খুঁজে পেয়েছি। এটি ডেবিয়ান-ভিত্তিক সিস্টেমে বিকাশিত এবং পরীক্ষিত হয়, সুতরাং এটি উবুন্টুতে কাজ করা উচিত। আমি যে অনুমানগুলি তৈরি করে তা উল্লেখ করব যাতে এটি অন্যান্য সিস্টেমেও মানিয়ে নেওয়া যায়।

  • এটি প্লাগইনে স্বয়ংক্রিয়ভাবে ইউএসবি ড্রাইভগুলি মাউন্ট করবে এবং ফায়ারওয়্যারের সাথে মানিয়ে নিতে খুব বেশি কিছু নেওয়া উচিত নয়।
  • এটি ইউডিইভি ব্যবহার করে, তাই এইচএল / ডিভাইসকিট / জিনোম-যে কোনও কিছুর সাথে কোনও বানিজ্য নেই।
  • এটি স্বয়ংক্রিয়ভাবে /media/LABELডিভাইসটিতে মাউন্ট করার জন্য একটি ডিরেক্টরি তৈরি করে।

  • তবে এটি অন্যান্য অটোমোন্টারগুলিতে হস্তক্ষেপ করতে পারে; আমি এটির জন্য পরীক্ষা করতে পারি না। আমি আশা করি যে, জিনোম-ভিএফএস সক্রিয় হয়ে দু'জনেই মাউন্টটি করার চেষ্টা করতে পারে ... যদি জিনোম-ভিএফএস মাউন্টটি ব্যর্থ হয় তবে এটি কোনও ডেস্কটপ আইকনটি কনফিগার করতে পারে না। জিনোম থেকে আনমাউন্টিং সম্ভব হওয়া উচিত, তবে এর প্রয়োজন হতে পারে gksudoবা অনুরূপ হতে পারে ।

আমি এটি সিস্টেম বুটটিতে পরীক্ষা করে দেখিনি, তবে কেবলমাত্র আমি দেখতে পাচ্ছি যে এটি কাজ করবে না এটি হ'ল যদি সিস্টেম মাউন্টগুলির জন্য প্রস্তুত হওয়ার আগে ইউএসবি ড্রাইভ মাউন্ট করার চেষ্টা করে। যদি এটি হয় তবে আপনার সম্ভবত মাউন্ট স্ক্রিপ্টে আরও একটি ত্বক লাগবে। (আমি কোনও পরামর্শ আছে কিনা তা দেখতে সার্ভারফল্টের সাথে যাচাই করছি , তবে সেখানে এটিতে খুব বেশি আগ্রহ নেই))

এটি পরে, তারপর।


ইউডিইভি রেফারেন্স:


পটভূমি (ইউডিইভি? হুইজ্যাট?)

ইউডিইভি কার্নেলের হটপ্লাগ সিস্টেম। এটি স্বয়ংক্রিয়ভাবে সঠিক ডিভাইস এবং ডিভাইস সিমলিংকগুলি (যেমন /dev/disk/by-label/<LABEL>) বুট করার সময় এবং সিস্টেম চলাকালীন সংযুক্ত ডিভাইসগুলির জন্য কনফিগার করে ।

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

kernel -> udev -> dbus -> hal -> gnome-vfs/nautilus (mount)

এবং প্রেস্টো, আপনার ড্রাইভ মাউন্ট হয়ে যায়। তবে একটি হেডলেস সিস্টেমে, অটোমোটিংয়ের সুবিধা পেতে আমাদের লগ ইন করতে হবে না।

উদেব বিধি

যেহেতু ইউডিইভি আমাদের ডিভাইস সন্নিবেশে নিয়ম লিখতে এবং প্রোগ্রাম চালাতে দেয়, এটি একটি আদর্শ পছন্দ। আমরা দেবিয়ান / উবুন্টুর বিদ্যমান নিয়মগুলির সুবিধা নিতে যাচ্ছি, সেগুলি /dev/disk/by-label/<LABEL>আমাদের জন্য সিমিলিংক সেটআপ করুন এবং আমাদের জন্য ডিভাইসটি মাউন্ট করবে এমন একটি বিধি যুক্ত করুন।

ইউডিইভির বিধিগুলি /etc/udev/rules.d(এবং কার্মিকের /lib/udev/rules.dউপরে) রাখা হয়েছে এবং সংখ্যাসূচকভাবে প্রক্রিয়া করা হয়। কোনও ফাইলের সংখ্যার সাথে শুরু হচ্ছে না এমন ফাইলগুলির পরে প্রক্রিয়া করা হবে। আমার সিস্টেমে, এইচএল বিধিগুলি কল করা কোনও ফাইলে থাকে 90-hal.rules, তাই আমি আমার নিয়মগুলি putুকিয়ে রাখি 89-local.rulesযাতে তারা এইচএলএল হওয়ার আগে প্রক্রিয়াজাত হয়। প্রাথমিকভাবে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে এই নিয়মগুলি পরে ঘটে 60-persistent-storage.ruleslocal.rulesযথেষ্ট ভাল হতে পারে।

এটি আপনার নতুন নিয়ম ফাইলে রাখুন:

# /etc/udev/rules.d/local.rules 
# /etc/udev/rules.d/89-local.rules
# ADD rule: if we have a valid ID_FS_LABEL_ENC, and it's USB, mkdir and mount
ENV{ID_FS_LABEL_ENC}=="?*",   ACTION=="add",      SUBSYSTEMS=="usb", \
         RUN+="/usr/local/sbin/udev-automounter.sh %k"
  • নিশ্চিত করুন যে এর পরে কোনও স্থান নেই \, কেবলমাত্র একটি newline( \n)।

  • পরিবর্তন SUBSYSTEMS=="usb"করার জন্য SUBSYSTEMS=="usb|ieee1394"ফায়ারওয়্যার সমর্থনের জন্য।

  • আপনি যদি ডিভাইসটি সর্বদা কোনও নির্দিষ্ট ব্যবহারকারীর মালিকানা চান তবে একটি OWNER="username"ধারা যুক্ত করুন cla যদি আপনার কেবলমাত্র কোনও নির্দিষ্ট ব্যবহারকারীর মালিকানাধীন ফাইলগুলির প্রয়োজন হয় তবে তার পরিবর্তে মাউন্ট স্ক্রিপ্টটি টুইঙ্ক করুন।

বিধি পাঠ করা

এটি চালানোর জন্য ডিভাইসের তালিকার প্রোগ্রামগুলির তালিকায় একটি প্রোগ্রাম যুক্ত করে। এটি ইউএসবি পার্টিশন ডিভাইসগুলি সনাক্ত করে <LABEL>, তারপরে এই তথ্যটিকে একটি স্ক্রিপ্টে দেয় যা মাউন্টটি সম্পাদন করে। বিশেষত, এই বিধিটি মিলছে:

  1. ENV{ID_FS_LABEL_ENC}=="?*"- পূর্ববর্তী সিস্টেমের নিয়ম অনুসারে পরিবেশ পরিবর্তনশীল set নন-ফাইল সিস্টেমগুলির জন্য অস্তিত্ব নেই, তাই আমরা এটি পরীক্ষা করে দেখি। আমরা আসলে ID_FS_LABELমাউন্ট পয়েন্টের জন্য ব্যবহার করতে চাই , তবে আমি ইউডিইভিটিকে আমার পক্ষে এড়িয়ে চলার ব্যাপারে নিশ্চিত করিনি, সুতরাং মাউন্ট স্ক্রিপ্টটি এটি পরিচালনা করব'll

    এই এবং অন্যান্য এনভায়রনমেন্ট ভেরিয়েবলগুলি udev দ্বারা vol_idকমান্ডটি ব্যবহার করে ( অবনমিত ) পাওয়া যায়। একটি পার্টিশনে সুন্দর দ্রুত বিশদ বিবরণ দেখতে এটি একটি সহজ সরঞ্জাম:

    $ sudo vol_id /dev/sdc1
    ID_FS_TYPE=ext2
    ID_FS_UUID=a40d282a-4a24-4593-a0ab-6f2600f920dd
    ID_FS_LABEL=Travel Dawgs
    ID_FS_LABEL_ENC=Travel\x20Dawgs
    ID_FS_LABEL_SAFE=Travel_Dawgs
    
  2. ACTION=="add"- শুধুমাত্র addইভেন্টগুলি মেলে ...

  3. SUBSYSTEMS=="usb"- কেবলমাত্র ইউএসবি বাসে থাকা ডিভাইসগুলির সাথে মেলে। আমরা SUBSYSTEMSএখানে ব্যবহার করি কারণ এটি আমাদের ডিভাইসের পিতামাতার সাথে মেলে; আমরা যে ডিভাইসে আগ্রহী সেগুলি হ'ল সাবস্কায়স্ট == "স্ক্সি" হবে। প্যারেন্ট ইউএসবি ডিভাইসের সাথে মিলে যাওয়া আমাদের প্রোগ্রামটিকে অভ্যন্তরীণ ড্রাইভগুলিতে যুক্ত করা এড়িয়ে যায়।

  4. RUN+="..."- কোনও মিল নয়, তবে একটি ক্রিয়া: চালানোর জন্য প্রোগ্রামগুলির তালিকায় এই প্রোগ্রামটি যুক্ত করুন। প্রোগ্রামটির যুক্তিগুলিতে %kডিভাইসের নামের (যেমন sdc1, না /dev/sdc1) প্রসারিত হয় এবং $env{FOO}পরিবেশে পরিবর্তনশীল FOO এর সামগ্রী পাওয়া যায়।

বিধি পরীক্ষা করা হচ্ছে

প্রথম রেফারেন্স লিংক (উপরে) একটি দুর্দান্ত ইউডিইভি টিউটোরিয়াল, তবে এটি কিছুটা পুরানো। আপনার নিয়মগুলি পরীক্ষা করার জন্য এটি যে প্রোগ্রামগুলি পরিচালনা করে ( udevtestবিশেষত) ক্যাপ-অল udevadmইউটিলিটি দ্বারা প্রতিস্থাপিত হয়েছে ।

আপনি নিয়মটি যুক্ত করার পরে, আপনার ডিভাইসটি প্লাগ ইন করুন। এটি কয়েক সেকেন্ড দিন, তারপরে এটি কোন ডিভাইসে নির্ধারিত হয়েছে তা পরীক্ষা করে দেখুন:

$ ls -l /dev/disk/by-label/*
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Foo -> ../../sda1
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Bar -> ../../sdb1
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Baz -> ../../sdc1

যদি আপনার অপসারণযোগ্য ড্রাইভে থাকে label_Bazতবে এটি ডিভাইসে রয়েছে sdc1। এটি চালান এবং শেষের দিকে আউটপুটটি দেখুন:

$ sudo udevadm test /sys/block/sdc/sdc1
parse_file: reading (...)                           (many lines about files it reads)
import_uevent_var: import into environment: (...)   (many lines about env variables)
(...)                                               (many lines tracing rule matches & programs run)
update_link: found 1 devices with name 'disk/by-label/LABEL_BAZ'
update_link: found '/block/sdc/sdc1' for 'disk/by-label/LABEL_BAZ'
update_link: compare (our own) priority of '/block/sdc/sdc1' 0 >= 0
update_link: 'disk/by-label/LABEL_BAZ' with target 'sdc1' has the highest priority 0, create it
udevtest: run: '/usr/local/sbin/udev-automounter.sh sdc1 LABEL_BAZ'
udevtest: run: 'socket:/org/freedesktop/hal/udev_event'
udevtest: run: 'socket:@/org/kernel/udev/monitor'

আমাদের RUN+=নিয়ম থেকে স্ক্রিপ্টের নামটি শেষ কয়েকটি লাইনে (এই উদাহরণের নীচে থেকে তৃতীয়) সন্ধান করুন। আপনি এই ডিভাইসের জন্য ব্যবহৃত হবে সেগুলি আর্গুমেন্টগুলি দেখতে পারেন। আর্গুমেন্টগুলি সঠিক কিনা তা পরীক্ষা করতে আপনি এখন এই আদেশটি চালাতে পারেন; যদি এটি আপনার কমান্ডলাইনে কাজ করে তবে কোনও ডিভাইস isোকানো হলে তা স্বয়ংক্রিয়ভাবে কাজ করা উচিত।

আপনি রিয়েলটাইমে ইউডিইভি ইভেন্টগুলিও নিরীক্ষণ করতে পারেন: চালান sudo udevadm monitor( man udevadmস্যুইচগুলির বিশদ জানতে দেখুন )। তারপরে কেবল একটি নতুন ডিভাইস প্লাগ ইন করুন এবং ইভেন্টগুলি স্ক্রোল দেখুন। (সম্ভবত আপনি যদি নিম্ন-স্তরের বিশদ না থাকেন তবে ওভারকিল ...)

বিধিগুলি পুনরায় লোড হচ্ছে

একবার আপনি যাচাই করেছেন যে নিয়মটি সঠিকভাবে পড়তে চলেছে, আপনাকে ইউডিইভি কে তার বিধিগুলি পুনরায় লোড করতে বলা উচিত যাতে নতুনটি কার্যকর হয়। এই যেকোন পদ্ধতি ব্যবহার করুন (যদি প্রথমটি কাজ না করে তবে দ্বিতীয়টি উচিত ... তবে প্রথমটি প্রথম চেষ্টা করুন):

  • চালান sudo udevadm control --reload-rules

  • চালান sudo /etc/init.d/udev reload

  • পুনরায় বুট করার


লিপি! প্রকৃতপক্ষে, 2 টি স্ক্রিপ্ট ...


এখানে প্রথম স্ক্রিপ্ট। যেহেতু আমরা চালিত প্রোগ্রামটি দ্রুত শেষ করা দরকার, এটি ব্যাকগ্রাউন্ডে দ্বিতীয় স্ক্রিপ্টটি বন্ধ করে দেয়। এটি রাখুন /usr/local/sbin/udev-automounter.sh:

#!/bin/sh
#
# USAGE: usb-automounter.sh DEVICE 
#   DEVICE   is the actual device node at /dev/DEVICE

/usr/local/sbin/udev-auto-mount.sh ${1} &

এখানে দ্বিতীয় স্ক্রিপ্ট। এটি কিছুটা আরও ইনপুট চেকিং করে। এটি ভিতরে রাখুন /usr/local/sbin/udev-auto-mount.sh। আপনি নীচের মাউন্ট বিকল্পগুলি টুইঙ্ক করতে চাইতে পারেন। এই স্ক্রিপ্টটি এখন LABEL পার্টিশনটি নিজেরাই সন্ধান করে; UDEV কেবলমাত্র DEVICE নাম প্রেরণ করে।

বুট-সময় ড্রাইভগুলি মাউন্ট করার ক্ষেত্রে যদি সমস্যা হয় , আপনি sleep 60স্ক্রিপ্টটি ড্রাইভ মাউন্ট করার চেষ্টা করার আগে সিস্টেমটিকে সমস্ত উপায়ে আসতে সময় দেওয়ার জন্য, আপনি এই স্ক্রিপ্টটিতে একটি দীর্ঘ দীর্ঘ সময় দিতে পারেন।

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

#!/bin/sh
#
# USAGE: udev-auto-mount.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE
# 
# This script takes a device name, looks up the partition label and
# type, creates /media/LABEL and mounts the partition.  Mount options
# are hard-coded below.

DEVICE=$1

# check input
if [ -z "$DEVICE" ]; then
   exit 1
fi

# test that this device isn't already mounted
device_is_mounted=`grep ${DEVICE} /etc/mtab`
if [ -n "$device_is_mounted" ]; then
   echo "error: seems /dev/${DEVICE} is already mounted"
   exit 1
fi

# If there's a problem at boot-time, this is where we'd put
# some test to check that we're booting, and then run
#     sleep 60
# so the system is ready for the mount below.
#
# An example to experiment with:
# Assume the system is "booted enough" if the HTTPD server is running.
# If it isn't, sleep for half a minute before checking again.
#
# The risk: if the server fails for some reason, this mount script
# will just keep waiting for it to show up.  A better solution would
# be to check for some file that exists after the boot process is complete.
#
# HTTPD_UP=`ps -ax | grep httpd | grep -v grep`
# while [ -z "$HTTPD_UP" ]; do
#    sleep 30
#    HTTPD_UP=`ps -ax | grep httpd | grep -v grep`
# done


# pull in useful variables from vol_id, quote everything Just In Case
eval `/sbin/vol_id /dev/${DEVICE} | sed 's/^/export /; s/=/="/; s/$/"/'`

if [ -z "$ID_FS_LABEL" ] || [ -z "$ID_FS_TYPE" ]; then
   echo "error: ID_FS_LABEL is empty! did vol_id break? tried /dev/${DEVICE}"
   exit 1
fi


# test mountpoint - it shouldn't exist
if [ ! -e "/media/${ID_FS_LABEL}" ]; then

   # make the mountpoint
   mkdir "/media/${ID_FS_LABEL}"

   # mount the device
   # 
   # If expecting thumbdrives, you probably want 
   #      mount -t auto -o sync,noatime [...]
   # 
   # If drive is VFAT/NFTS, this mounts the filesystem such that all files
   # are owned by a std user instead of by root.  Change to your user's UID
   # (listed in /etc/passwd).  You may also want "gid=1000" and/or "umask=022", eg:
   #      mount -t auto -o uid=1000,gid=1000 [...]
   # 
   # 
   case "$ID_FS_TYPE" in

       vfat)  mount -t vfat -o sync,noatime,uid=1000 /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;

              # I like the locale setting for ntfs
       ntfs)  mount -t auto -o sync,noatime,uid=1000,locale=en_US.UTF-8 /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;

              # ext2/3/4 don't like uid option
       ext*)  mount -t auto -o sync,noatime /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;
   esac

   # all done here, return successful
   exit 0
fi

exit 1

সুপার বোনাস ক্লিনআপ স্ক্রিপ্ট!

আরও একটি স্ক্রিপ্ট। এটি সমস্তই ডিভাইসটিকে আনমাউন্ট করে মাউন্টপয়েন্ট ডিরেক্টরিগুলি সরান remove এটি ধরে নিয়েছে যে এটির জন্য এটির গোপনীয়তা রয়েছে, সুতরাং আপনার এটি চালানো দরকার sudo। এই স্ক্রিপ্টটি এখন কমান্ডলাইনে পুরো মাউন্টপয়েন্টটি নিয়েছে, যেমন:

$ /usr/local/sbin/udev-unmounter.sh "/media/My Random Disk"

এটি রাখুন /usr/local/sbin/udev-unmounter.sh:

#!/bin/sh
#
# USAGE: udev-unmounter.sh MOUNTPT
#   MOUNTPT is a mountpoint we want to unmount and delete.
MOUNTPT="$1"

if [ -z "$MOUNTPT" ]; then
   exit 1
fi


# test mountpoint - it should exist
if [ -e "${MOUNTPT}" ]; then

   # very naive; just run and pray
   umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0

   echo "error: ${MOUNTPT} failed to unmount."
   exit 1
fi

echo "error: ${MOUNTPT} does not exist"
exit 1

3
তুমি মহান! :)
কলিপ্টো

1
আমি যদি স্বয়ংক্রিয়ভাবে মাউন্ট চালনা করি তবে ম্যানুয়ালি এটি কাজ করে তবে আমি ড্রাইভে প্লাগ ইন করি না এবং বুটে না not : /
এন্ডোলিথ

সুতরাং সমস্যাটি ইউডিইভি নিয়মের সাথে। লেবু আপনাকে ডিবাগ করতে সহায়তা করার জন্য এই বিভাগটি কিছুটা প্রসারিত করুন।
কোয়াকোট কোয়েসোট

3
আমি সমস্ত স্ক্রিপ্টগুলি গিথুবে একত্রিত করেছি: github.com/fatso83/Code-Snippets/tree/master/system-utils/… উবুন্টু ১০.১০ এ তারা সূক্ষ্মভাবে কাজ করে এবং অটো-আনমাউন্টও অন্তর্ভুক্ত করে
অলিগফ্রেন

1
রেফারেন্স: udev_237 - মানুষের udev দ্বারা (Ubuntu_18.04) মনে রাখবেন যে, নেটওয়ার্ক অ্যাক্সেস বা প্রোগ্রাম চলমান আনমাউন্ট মাউন্ট / ফাইল সিস্টেম হয় udev 'র ভেতরে মঞ্জুরিপ্রাপ্ত নয় ডিফল্ট কারণে স্যান্ডবক্স যে systemd-udevd.service উপর জারি করা হয়েছে। উৎস: unix.stackexchange.com/questions/200194/... একটি সমাধান জন্য, কটাক্ষপাত আছে serverfault.com/questions/766506/...
প্রো ব্যাকআপ

9

নেটগুলির আশেপাশে অন্যরা যে প্রস্তাব দিয়েছে তার একটি চূড়ান্ত বিকল্প হ'ল ivmanতবে এটি নির্ভর করে pmountযা আপনি ইতিমধ্যে জানিয়েছিলেন যে কাজ করে না। pmountপরিত্যক্ত এবং ivmanপ্রায় একই।

এর প্রতিস্থাপনটি ivmanহ'ল halevt, এবং এটি কারমিতে উপলভ্য। এটি ivman(পড়ুন: "রক্ষণাবেক্ষণ করা" এবং "পিএমএন্টের উপর নির্ভর করে না") এর একটি পুনরায় বাস্তবায়ন । প্যাকেজটি জাঙ্কির উপর উপলভ্য নয়, যদিও আপনি আপগ্রেড করার পরিকল্পনা না করলে আপনি নিজেই এটি তৈরি করতে সক্ষম হতে পারেন।

এই উভয় সরঞ্জামই ডিবিস এবং এইচএএল স্তরগুলির উপরে বসে থাকে এবং সেগুলির ইভেন্টগুলিতে প্রতিক্রিয়া জানায়। স্পষ্টতই উভয়ই সিস্টেম ডেমন হিসাবে বা ব্যবহারকারী-সেশন মাউন্ট ম্যানেজার (একটি লা জিনোম-ভিএফএস) হিসাবে চালাতে পারে - /etc/defaults/{ivman,halevt}ফাইলগুলি সিস্টেম সেটিংসের দায়িত্বে থাকে।

মাউন্টপয়েন্টগুলি ivmanব্যবহার করার জন্য টুইট করার জন্য এখানে কিছু নির্দেশাবলী দেওয়া হয়েছে /media/<LABEL>। এটি halevtকরার সহজ উপায় এটি সম্ভবত রয়েছে তবে সম্ভবত তারা আপনাকে উত্তর খুঁজে পেতে সহায়তা করবে।


HALEVT এর সাথে কাজ করা

আপডেট : অটোমেজিকাল সিডি পাওয়ার আগ্রহের সাথে সাথে আমার ইউডিইভি উত্তরটি সরবরাহ করে না, আমি আরও গভীরভাবে তাকিয়েছি halevt। আমি এই ব্লগ পোস্টটি পেয়েছি যা প্রক্রিয়া সম্পর্কে অনেক কিছু ব্যাখ্যা করতে সহায়তা করেছিল। halevtদেবিয়ান লেনির জন্য আমার নিজের প্যাকেজটি সংকলন করতে হয়েছিল (ভাগ্যক্রমে সমস্ত নির্ভরতা লেনি-ব্যাকপোর্ট বিভাগে ছিল)। একবার ইনস্টল হয়ে গেলে প্রক্রিয়াটি বেশিরভাগ ক্ষেত্রে ভয়াবহ ছিল না:

  1. সিস্টেম হলভেট-ডেমন সক্রিয় রয়েছে তা নিশ্চিত করুন /etc/default/halevt
  2. সিস্টেম হালভেট ব্যবহারকারীকে ডিভাইসগুলি মাউন্ট করতে অনুমতি দিন /etc/PolicyKit/PolicyKit.conf(নীচে দেখুন; উত্স দেখুন )
  3. এর মধ্যে পছন্দসই মাউন্টপয়েন্টে ভলিউম লেবেলটি অনুলিপি করতে এইচএএল নীতিটি সংশোধন করুন /etc/hal/fdi/policy/preferences.fdi(নীচে দেখুন)
  4. আপনি যদি সিডি / ডিভিডি সমর্থন চান তবে উপরের ব্লগপোস্ট থেকে eject.halস্ক্রিপ্টটি ধরুন, সংশোধন করুন এবং সংরক্ষণ করুন /usr/local/bin
  5. মাউন্টগুলি সক্ষম করতে হ্যালভিট সিস্টেম কনফিগারেশনটি পরিবর্তন করুন /etc/halevt/halevt.xml
  6. আপনার লগইন ম্যানেজারের প্রাক-এবং পরবর্তী সেশন-এর স্ক্রিপ্টগুলিতে কোড যুক্ত করুন যখন কেউ লগ-ইন করে থাকে তখন সিস্টেম হলিভ্ট-ডেমন বন্ধ করতে এবং লগ-অফ করার পরে এটি পুনরায় চালু করে।

আপনার নতুন কনফিগারেশন পরীক্ষা করতে যদি আপনার HAL এবং HALEVT ডেমন পুনরায় চালু করতে হয় তবে সেগুলি সঠিক ক্রমে পেতে এটি ব্যবহার করুন:

sudo sh -c "/etc/init.d/halevt stop ; /etc/init.d/hal restart ; /etc/init.d/halevt start"

ধাপ 1

পরীক্ষা করে দেখুন যে START_DAEMON=yes/etc/default/halevt

ধাপ ২

ইন /etc/PolicyKit/PolicyKit.conf, বিভাগের ভিতরে এটি যুক্ত করুন <config></config>:

<match action="org.freedesktop.hal.storage.mount-removable">
   <match user="halevt">
      <return result="yes"/>
   </match>
</match>

ধাপ 3

ইন /etc/hal/fdi/policy/preferences.fdi, এই অ্যাড ভিতরে `অধ্যায়:

<match key="volume.label" empty="false">
    <match key="volume.label" is_absolute_path="false">
        <merge key="volume.policy.desired_mount_point" type="copy_property">volume.label</merge>
    </match>
</match>

পদক্ষেপ 4

স্ক্রিপ্টটি ভাল তবে চালানো দরকার /bin/bash; /bin/dashযখন /bin/shডাকা হয় তখন কিছু সিস্টেম আসলে ব্যবহার করতে পারে । সুতরাং আপনি সঠিক পেলেন তা নিশ্চিত করতে স্ক্রিপ্টের শীর্ষ লাইনটি পরিবর্তন করুন:

#!/bin/sh         <------ old first line

#!/bin/bash       <------ new first line

পদক্ষেপ 5

এটি মজাদার অংশ। আপনার সিস্টেমটি /etc/halevt/halevt.xmlইতিমধ্যে একটি বেসিক সরবরাহ করতে পারে , সুতরাং আপনার নিজের ব্যবহারের জন্য আপনাকে এটি তৈরি করতে হবে। আমার ক্ষেত্রে, আমার সিস্টেম ইতিমধ্যে বুনিয়াদি অপসারণযোগ্য মাউন্টগুলি সরবরাহ করেছে, তবে আমাকে সিডিরোম মাউন্টিং এবং ইজেক্ট বোতামটির জন্য সমর্থন যোগ করতে হয়েছিল।

আমি উল্লিখিত ব্লগ পোস্টটিতে আপনার নিজের টুইটগুলি দেখার জন্য একটি ভাল উদাহরণ এক্সএমএল কনফিগারেশন রয়েছে । এটি বেশিরভাগই লেখকের fluxboxপরিবেশের জন্য জিনোম-মাউন্ট রিপ্লেসমেন্ট স্থাপন সম্পর্কে , সুতরাং তার উদাহরণ এক্সএমএল আপনার চাওয়ার চেয়ে আরও বেশি কিছু করে, তবে আপনি যা করতে পারেন তার অনুভূতি পাওয়ার জন্য এটি দুর্দান্ত উপায়। এর মধ্যে কয়েকটি ভাল উদাহরণও রয়েছে /usr/share/doc/halevt/examples

আমাকে sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"সবকিছু চালানোর আগে দৌড়াতে হয়েছিল।

অটোমোটিংিং সিডি / ডিভিডি কাজ করতে এখানে আমার সংযোজন রয়েছে:

<!-- CD/DVD mount -->
<halevt:Device match="hal.block.device &amp; hal.block.is_volume = true  &amp; hal.volume.is_disc = true &amp; hal.volume.disc.has_data = true">
   <halevt:Property name="hal.volume.is_mounted">
      <halevt:Action value="true" exec="halevt-mount -u $hal.udi$ -p $hal.volume.policy.desired_mount_point$ -m 002"/>
   </halevt:Property>
</halevt:Device>

<!-- CD/DVD eject button support -->
<halevt:Device match="hal.storage.drive_type = cdrom">
   <halevt:Condition name="EjectPressed" exec='/usr/local/bin/eject.hal $hal.block.device$'/>
</halevt:Device>

পদক্ষেপ 6

সিস্টেমটি হলভেট-ডেমন কাজ করার পরে, আপনি জিনোমে লগইন করার সময় এটি নিষ্ক্রিয় করতে হবে এবং লগ আউট করার পরে এটি পুনরায় চালু করতে হবে। ( নন-জিডিএম লগইন পরিচালকদের জন্য এই প্রশ্নের আমার উত্তর দেখুন )) এই জিনিসটি তাত্ত্বিক কারণ আমি এটি ব্যবহার করি না, তবে এটি কার্যকর হওয়া উচিত।

ইন /etc/gdm/PreSession/Default, সিস্টেমের হলিভেট-ডেমন থামাতে এটি যুক্ত করুন:

/etc/init.d/halevt stop

ইন /etc/gdm/PostSession/Default, সিস্টেমটি হলটি-ডেমন পুনরায় চালু করতে এটি যুক্ত করুন:

/etc/init.d/halevt start

3
২০১৩-এ এটি পড়তে থাকা লোকদের জন্য এখন তাদের জানা উচিত যে এইচএএলকে অবমূল্যায়ন করা হয়েছে এবং তাদের উপরে ওভাদ ভিত্তিক সমাধান যেমন একটি কোয়াট কোয়েক্সোট উপরে দেওয়া উচিত।
অলিগোফ্রেন

6

সময়ের সাথে সাথে, সহজ সমাধানগুলি উপস্থিত হয়।

এই সমাধানটি ইউদেভিল সফ্টওয়্যার প্যাকেজের উপর নির্ভর করে যা এই উদ্দেশ্যে লেখা হয়েছিল এবং উদেব বিধিগুলির সাথে কোনও ঝুঁকির প্রয়োজন নেই। এটি সম্ভবত (নতুন এবং পুরানো ব্যবহারকারীদের কাছে) সরাসরি-এগিয়ে সমাধান হিসাবে পছন্দনীয়।

কেবল devmonউদেব এবং গ্লিবের উপর নির্ভর করে উডেভিলের স্ক্রিপ্টটি সমস্ত যাদু করে। প্রাথমিক কনফিগারেশন প্রয়োজন ছাড়াই বাক্সের বাইরে প্রায় কাজ করে।

আমি আমার ওয়ার্কস্টেশনে যা করেছি তা হ'ল ডেমোনকে ডেকে পাঠানো হয়েছিল rc.local:
devmon 2>&1 >> /var/log/devmon &
আপনার স্বাচ্ছন্দ্যের জন্য আপনি এটি তৈরি করার rc.localমতো কোনও স্বয়ংক্রিয় সরঞ্জাম ব্যবহার pleaserunনা করে এটিকে একটি init স্ক্রিপ্টে এম্বেড করতে চাইতে পারেন : https://unix.stackexchange.com/ A / 124609/42673

এটি চলমান থাকার পরে, আমি যে প্লাগ প্লাগ করি সেগুলি পরিদর্শন করা হয় (এটি পার্টিশনের সন্ধান করে এবং যদি তাদের ফাইল সিস্টেমের লেবেলের সন্ধান পাওয়া যায়) তবে মাউন্ট করা হবে /media/FILESYSTEM_LABEL
ভবিষ্যতে কোনও সময়ে এই কার্যকারিতাটি অন্তর্ভুক্ত করার জন্য (ইন) বিখ্যাত সিস্টেমড ব্যতীত এর চেয়ে সহজ কিছু কল্পনাও করতে পারেন না।

udevil At A Glance ( github.io/udevil )
লিপি: ডেমন ( ইগুরুব্লগ / স্ক্রিপ্ট-ডেমন )


3

কোয়াকোইটের উত্তর উবুন্টু লুসিড লিংক (10.04) এ কাজ করে না - কোনও /sbin/vol_idআদেশ নেই।

অভিনব হয়ে ও ইউদেব ব্যবহার করার পরিবর্তে এটি আপনার /etc/rc.local এ রেখে দিন এবং করুন:

for dev in $(ls -1 /dev/disk/by-label/* | grep -v EFI) ; do
  label=$(basename $dev)
  mkdir -p /media/$label
  $(mount | grep -q /media/$label) || mount $dev /media/$label
done

1
আপনাকে ধন্যবাদ .. আমি যা অর্জন করতে চেয়েছিলাম তার এটি সহজতম উপায়। এমনকি একটি
এনটিএফএস

3

ডেবিয়ান ভিত্তিক সিস্টেমগুলির জন্য (যেমন উবুন্টু ইত্যাদি) আপনার জন্য ইউএসবি ড্রাইভ স্বয়ংক্রিয়ভাবে মাউন্ট করে এমন ইউএসবিমাউন্ট প্যাকেজ রয়েছে m এটি ইতিমধ্যে উল্লিখিত হিসাবে একটি ইউদেব ভিত্তিক পদ্ধতির ব্যবহার করে - এটি কেবলমাত্র একটি সাধারণ প্যাকেজ ইনস্টল। মনে হচ্ছে প্যাকেজটির মূল লেখক বাষ্প শেষ হয়ে গেছে তবে উবুন্টু / ডেবিয়ান এখনও এটি বজায় রাখার জন্য উপস্থিত রয়েছে (আমার ধারণা এটি এত জটিল নয়) - এটি এখনও সর্বশেষ প্রকাশে পাওয়া যায় available

ইনস্টল করা স্ক্রিপ্টগুলি উপযুক্ত মাউন্ট পয়েন্টগুলি সরবরাহ করতে (/etc/usbmount/usbmount.conf) কনফিগার করা যায়।


1
আপনি কনফিগারেশন ফাইলের লেবেলগুলির তালিকাটি পূরণ না করে ইউএসবিমাউন্টটি লেবেল দ্বারা মাউন্ট করতে পারবেন না।
গিলস

1
কোনও তালিকা বজায় না রেখে আপনি যদি ইউএসবিউন্টে লেবেলে মাউন্ট যুক্ত করতে চান তবে পোস্ট esite.ch/2014/04/11/… দেখুন See
অলিভার সৌডার

3

কোয়াকোসোটের অপসারণের দুর্দান্ত নির্দেশাবলীর সন্ধান করতে:

আপনার পূর্বে তৈরি udev নিয়ম ফাইলে নিম্নলিখিত লাইনটি যুক্ত করুন (/etc/udev/rules.d) "

ENV{ID_FS_LABEL_ENC}=="?*",   ACTION=="remove",      SUBSYSTEMS=="usb", \
         RUN+="/usr/local/sbin/udev-autounmounter.sh %k"

এরপরে নিম্নলিখিত লিপিটি তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তুগুলি সহ এটি কার্যকর করতে (/usr/local/sbin/udev-autounmounter.sh) chmod করুন:

#!/bin/sh
#
# USAGE: usb-autounmounter.sh DEVICE 
#   DEVICE   is the actual device node at /dev/DEVICE

/usr/local/sbin/udev-auto-unmount.sh ${1} &

অবশেষে আনমাউন্ট স্ক্রিপ্ট নিজেই (udev-auto-unmount.sh):

#!/bin/sh
#
# USAGE: udev-auto-unmount.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE
# 
# This script takes a device name, looks up the partition label and
# type, creates /media/LABEL and mounts the partition.  Mount options
# are hard-coded below.

DEVICE=$1

# check input
if [ -z "$DEVICE" ]; then
   exit 1
fi

#test that the device is already mounted
MOUNTPT=`mount | grep ${DEVICE} | cut -d ' ' -f 3`
if [ -z "${MOUNTPT}" ]; then
   echo "error: the device is not already mounted"
   exit 1
fi

# test mountpoint - it should exist
if [ -e "${MOUNTPT}" ]; then

   # very naive; just run and pray
   umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0

   echo "error: ${MOUNTPT} failed to unmount."
   exit 1
fi

echo "error: ${MOUNTPT} does not exist"
exit 1

সুতরাং অন্যান্য নির্দেশাবলীর সাহায্যে ডিরেক্টরিটি স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে এবং উদেব ইভেন্টগুলিতে অদৃশ্য হয়ে যাবে।


আমার মনে হয় if [ -n "$device_is_mounted" ]; thenহওয়া উচিত if [ -z "${MOUNTPT}" ]; then, তাই না?
eresonance

2

আপনি পিসডিএম চেষ্টা করে দেখতে চাইতে পারেন


এটা ঠিক অন্য fstab সম্পাদক, তাই না?
এন্ডোলিথ

হ্যাঁ, তবে "এটি স্টোরেজ ডিভাইসের গতিশীল কনফিগারেশনের জন্য ওদেব বিধি তৈরি করার অনুমতি দেয়"
সত্যজিৎ ভাট

"ওদেব বিধি তৈরি" কি আমাকে কোনও উপায়ে সহায়তা করবে? এমনকি এর অর্থ কী তা আমার কোনও ধারণা নেই। স্থানীয়ভাবে লগ ইন করা কোনও ব্যবহারকারী ছাড়া এটি কী পূর্ব-অজানা অপসারণযোগ্য ডিভাইসগুলি মাউন্ট করে?
এন্ডোলিথ

দুঃখিত, আমি উদেব বিধি সম্পর্কে কোনও ধারণা পাই না। আপনি কটাক্ষপাত থাকতে পারে fredericiana.com/2006/03/15/writing-udev-rules-short-notes এবং reactivated.net/writing_udev_rules.html
Sathyajith ভাট

2

আপনি su username -c gnome-volume-manager/etc/rc.local এ দেওয়ার চেষ্টা করতে পারেন । জিনোম-ভলিউম-ম্যানেজারটি কেবল চালানোই যথেষ্ট।

সম্পাদনা: দেখে মনে হচ্ছে যে জিনোম-ভলিউম-ম্যানেজার এখন উবুন্টু ডেস্কটপেও ডিফল্ট বিতরণের অংশ নয়।

wajig policy  gnome-volume-manager
gnome-volume-manager:
  Installed: (none)
  Candidate: 2.24.0-0ubuntu1
  Version table:
     2.24.0-0ubuntu1 0
        500 http://ubuntu.secs.oakland.edu jaunty/universe Packages

তবে, আপনি যদি এটি ইনস্টল করেন তবে এটি এখনও কাজ করবে। এটি একটি চেষ্টা মূল্য। যদি এটি কাজ না করে তবে এটি আবার সরিয়ে ফেলুন।

এছাড়াও usbmountপ্যাকেজটি রয়েছে, যা আপনি যা চান তা করেন তবে সম্ভবত স্বাভাবিক অটোমোটিংয়ের ক্ষেত্রে হস্তক্ষেপ থাকতে পারে।


অজানা কমান্ড "জিনোম-ভলিউম-ম্যানেজার"। আমি উবুন্টু জন্টিতে আছি।
এন্ডোলিথ

একটি / usr / lib / gnome-ভলিউম-ম্যানেজার / gnome-ভলিউম-ম্যানেজার আছে, কিন্তু এটি কিছুই করে না।
এন্ডোলিথ

আচ্ছা বুঝলাম. জিনোম-ভলিউম-ম্যানেজার নামে একটি প্যাকেজ রয়েছে। সম্পর্কিত: crunchbanglinux.org/forums/topic/239/…
এন্ডোলিথ

দেখে মনে হচ্ছে জিনোম-ভলিউম-ম্যানেজার জিনিসগুলি মাউন্ট করার জন্য এইচএল ব্যবহার করে? এবং "২০০৯ সালের হিসাবে, এইচএএল ডিভাইসকিটের পক্ষে অবহেলিত হওয়ার প্রক্রিয়াধীন রয়েছে।" লিনাক্সের সবকিছু সর্বদা কেন এমন হয়? তারা কেবল প্রায় সঠিকভাবে কাজ করা শুরু করে এবং তারপরে তারা এটিকে আউট করে ফেলে এবং এটিকে নতুন কিছু দিয়ে কাজ করে যা কার্যকর হয় না।
endolith

বিকেল মাউন্ট এমনকি আর কাজ করে না। > সন্ধ্যায় / ডেভ / ডিস্ক / বাই লেবেল / স্টোর ত্রুটি: ডিভাইস / ডেভ / এসডিসি 1 টোগোয়ারে / লিনাক্স / সুরভিভার / ব্যবহার_জোনম_ভলিউম_ম্যানেজ.আরটিএমএল
এন্ডোলিথ

2

কোয়েট কুইসোটের ইউদেব-ভিত্তিক সমাধানের জন্য আমার সম্পাদিত সংযোজনগুলি প্রত্যাখ্যান করা হয়েছিল, তাই আমি সেগুলি এখানে রাখব। প্রথমে তার পোস্ট দেখুন।

প্রথমত, যদি আপনি চান যে আপনার উদেব নিয়মটি কাজ করবে যখন কোনও ডিভাইস এসসিএসআই সাবসিস্টেমের মাধ্যমে সংযুক্ত থাকে (যার মধ্যে ইউএসবি, ফায়ারওয়্যার এবং ইএসটিএ উভয়ই থাকে) তবে উদেব নিয়মে SUBSYSTEMS মিলটি পরিবর্তন করুন SUBSYSTEMS=="scsi"

যদিও মনে রাখবেন যে এটি স্বয়ংক্রিয়ভাবে অভ্যন্তরীণ ড্রাইভগুলি সহ বেশ কিছু কিছু মাউন্ট করবে, সিস্টেমটি চলাকালীন আপনি সেগুলি হটপ্লাগ করে রাখেন, তাই আপনি যা চান তা এটি নাও হতে পারে।

দ্বিতীয়ত, এখানে আমি ব্যবহার করছি এমন স্ক্রিপ্ট যা সেই পোস্টের সমস্ত স্ক্রিপ্টগুলি প্রতিস্থাপন করে। এটি / মিডিয়া / মাউন্ট করা ব্লক ডিভাইসটি সরিয়ে যাওয়ার সাথে সাথে স্বয়ংক্রিয়ভাবে নির্মিত মাউন্টপয়েন্টগুলি পরিষ্কার করে দেয় - ম্যানুয়াল হস্তক্ষেপের প্রয়োজন নেই। এরপরে, ব্যাকগ্রাউন্ডে চালানোর জন্য আলাদা স্ক্রিপ্ট কল করার পরিবর্তে এটি টার্মিনাল থেকে চালিত না হওয়ার সময় পটভূমিতে নিজেকে রাখে (যেমন যখন উদেবের মাধ্যমে কার্যকর করা হয়)।

এটি মাউন্ট করা ডিভাইস অদৃশ্য হওয়া অবধি অপেক্ষা করার জন্য ইনোটাইফাইট ব্যবহার করে এবং তারপরে এটি তৈরি করা ডিরেক্টরিটি সরিয়ে দেয়। সুতরাং, আপনার সিস্টেমে ইনোটিফাই-সরঞ্জামগুলি ইনস্টল করা দরকার। ডেবিয়ান-ভিত্তিক ডিস্ট্রোজে (উবুন্টু সহ) sudo apt-get install inotify-toolsযথেষ্ট হওয়া উচিত।

#!/bin/bash
#
# Auto-mounter script, to be executed by udev on the addition of a
# mass storage device.
#
# Takes one argument; the base block device partition, e.g. "sdb3".
#
# Creates a mountpoint for the partition using its FS label, in
# /media/{fslabel} and mounts it there, read-only, unsynced.
#
# If the filesystem has no label, "Untitled" is used instead.
#
# If another filesystem is already mounted at that location, the
# newcomer will be mounted with an integer number appended to its
# label.

MOUNT_OPTS="ro,noatime,nodiratime"



# If we're called from a non-tty and not explicitly told to continue,
# we call ourselves in a subshell and thus return immediately (udev
# gets impatient):
if [[ "$2" != "backgrounded" ]] && ! tty &> /dev/null; then
    ($0 $1 backgrounded &)
    exit
fi



# Determine the desired mountpoint from the label of the fs on the partition:
MOUNTPOINT="/media/$(blkid /dev/$1 | grep LABEL | sed -E 's:^.+LABEL="([^"]+).+:\1:')"

# If it had no label, use "Untitled":
[[ "$MOUNTPOINT" = "/media/" ]] && MOUNTPOINT="/media/Untitled"

# If something's already mounted there, append a number:
if [[ -e "$MOUNTPOINT" ]] && mountpoint "$MOUNTPOINT" &> /dev/null; then
    NUM=1
    while mountpoint "$MOUNTPOINT $NUM" &> /dev/null; do NUM=$((NUM+1)); done
    MOUNTPOINT="$MOUNTPOINT $NUM"
fi

# Create the mountpoint and mount there:
mkdir "$MOUNTPOINT" && mount -o $MOUNT_OPTS /dev/$1 "$MOUNTPOINT"



# Wait until the device is removed (the block device is "deleted"):
inotifywait -e delete /dev/$1

# Then clean up. If it fails, retry every second for up to 5 mins:
TRIES=0
while [[ -e "$MOUNTPOINT" ]] && [[ $TRIES -lt 300 ]]; do
    rmdir "$MOUNTPOINT"
    sleep 1s
    TRIES=$((TRIES+1))
done

আপনি লক্ষ করবেন যে আমি সিঙ্ক ছাড়াই ডিভাইসগুলি মাউন্ট করেছি এবং কেবল পঠনযোগ্য। এটি কেবল কারণ 99% সময়, আমার ব্যবহারের কেসটি একটি বাহ্যিক ড্রাইভ থেকে পড়ছে এবং যখনই আমাকে এটি লেখার দরকার পড়েছে, আমি যাইহোক সার্ভারে সক্রিয় থাকব এবং সহজেই একটি mount -o remount,rw <mountpoint>আদেশ জারি করতে পারি । আপনার প্রয়োজন অনুসারে সম্পাদনা করুন :)


কীভাবে আপনি এই স্ক্রিপ্টটি চালাবেন? আধুনিক সংস্করণগুলির জন্য halevtবর্তমানের apt-getসক্ষম প্যাকেজ বলে মনে হয় না ।
ক্যাম্পবেলন

আঃ ... সম্ভবত যদি আমি কোয়াকোসোটের শীর্ষস্থানীয় / স্বীকৃত উত্তর এন্ট্রি অনুসরণ করি ... তবে এখানে একটি পূর্ণ উত্তর পাওয়া ভাল
লাগবে

1

মাউন্টম্যানের মাধ্যমে কনফিগার করার চেষ্টা করুন, যাতে আপনাকে ম্যানুয়ালি ডেটা প্রবেশ করতে না হয়।

এটি উবুন্টু সংগ্রহস্থলের একটি অংশ হওয়া উচিত।


আপনার এটি পেতে ব্রহ্মাণ্ড বিভাগ সক্ষম করতে হবে।
কোয়াকোট কোয়েসোট

apt: মাউন্টম্যানেজার? বিভাগ = মহাবিশ্ব;)
এন্ডোলিথ

এটি কি আমার জন্য একটি fstab স্থাপন করতে চলেছে?
এন্ডোলিথ

@ এন্ডোলিথ: মানাবে না: মহাবিশ্ব? ইনস্টল = মাউন্ট ম্যানেজার আরও যুক্তিযুক্ত হতে পারে? ;)
ববি

যে ফর্ম্যাট কাজ করে? এটি তাই বলে না মানুষ পৃষ্ঠা থেকে manpages.ubuntu.com/manpages/karmic/en/man8/apturl.8.html
endolith

-5

আপনার যদি একবারে কেবল একটি ড্রাইভ মাউন্ট করা থাকে তবে আপনি কেবল এটিকে আপনার /etc/fstabফাইলে সম্পাদনা করতে পারেন । এর লাইন ধরে কিছু:

/dev/sdb1     /mnt/usbdrive     ext3     defaults 0   0

এটি বুট এ এটি মাউন্ট করা উচিত, এবং এটি perms সহ যে কারও কাছে অ্যাক্সেসযোগ্য। আপনার যদি একাধিক ড্রাইভ থাকে তবে আপনি এখনও এর সাথে এটি করতে পারেন:

/dev/sdb1     /mnt/usbdrive1     ext3     defaults 0   0
/dev/sdc1     /mnt/usbdrive2     ext3     defaults 0   0

6
স্পষ্টভাবে প্রশ্ন কি জিজ্ঞাসা করে না।
কোয়াকোট কোয়েসোট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.