আমি যখনই মাউন্ট করব তখন কি কোনও ইউএসবি কী এর একই নাম থাকবে?


9

আমার কাছে একটি ইউএসবি কী রয়েছে যা এটিতে বাশ স্ক্রিপ্টের মাধ্যমে প্রতিদিন ডেটা সংরক্ষণ করতে ব্যবহৃত হবে। কমান্ডটি ব্যবহার করে কোনও নির্দিষ্ট ব্যবহারকারীর এতে ফোল্ডার লিখতে সক্ষম হওয়ার জন্য আমি এটি মাউন্ট করতে সক্ষম হয়েছি:

mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop

স্ক্রিপ্টটি এটি পরিচালনা করতে পারে এবং ডিরেক্টরিগুলি তৈরি করতে পারে এবং এটি নিখুঁত। এক পর্যায়ে, ইউএসবি কীটি প্লাগ লাগানো হবে এবং একটি নতুন (একই মডেল) দিয়ে প্রতিস্থাপন করা হবে। নতুন ইউএসবি কীটির নাম কি এখনও থাকবে /dev/sdc1বা এটি অন্যরকম হবে?

যদি এটি অন্যরকম হয় তবে এটি স্বয়ংক্রিয়ভাবে তৈরি হওয়ার জন্য আমি কীভাবে আমার স্ক্রিপ্টে মাউন্টিং অংশটি অন্তর্ভুক্ত করতে পারি?


2
উত্তরটি হ'ল না তবে আপনি ওদেব বিধি দিয়ে এটিকে ঘিরে কাজ করতে পারেন । আরও ভাল তবে কিছুটা পুরানো ব্যাখ্যার জন্য এখানে দেখুন ।
সাটস ক্যাটসুরা

@ অ্যালেক্সটার্টান যদি এসডিসি পাওয়ার আগে আপনি অন্য কোনও ইউএসবি পোর্টে অন্য কোনও ইউএসবি ডিস্ক প্লাগ ইন করেন। সুতরাং আপনার সীমাবদ্ধতা "এবং এসডিসি 1 তে আর কিছু নয়" সত্য true সাধারণভাবে এটি একটি খুব বিপজ্জনক অনুমান যা কখনই তৈরি করা যায় না। অবিচ্ছিন্ন ডিভাইসের নাম হিসাবে এসডি [আজ] ব্যবহার করা কখনই ভাল ধারণা নয়। এটি যখন থেকে আমাদের চারটি স্ট্যাটিক পোর্ট সহ আইডিই কন্ট্রোলার ছিল তখন থেকেই এটি একটি উত্তরাধিকার, যা হার্ডওয়্যার জাম্পার সেট করে এবং সঠিক তারের প্লাগটি নির্বাচন করে সেট করা যেতে পারে।
ইকরাবে

1
@ ক্র্যাব্বে, আমি জানি, সে কারণেই আমি লেবেল সনাক্তকরণের ভিত্তিতে একটি উত্তর পোস্ট করেছি (এগুলি কিছুটা সহজ পরিচালনা করা যায়)।
অ্যালেক্স টার্টান

উত্তর:


6

এটির মাধ্যমে অ্যাক্সেস /dev/sdXyকরা ঝুঁকিপূর্ণ হলেও আরও নিখুঁত পরিচয় সনাক্তকরণ দ্বারা করা যেতে পারে UUID

যেহেতু আপনি উল্লেখ করেছেন (কোনও পর্যায়ে) ইউএসবি স্টিক পরিবর্তন করে, সামঞ্জস্যতা বজায় রাখার জন্য, আপনি আপনার ইউএসবি স্টিকটি একটি লেবেল দ্বারা চিহ্নিত করতে চাইতে পারেন। এটা করার জন্য, আপনি পারেন: /dev/disk/by-label/YourLabelHere

নোট করুন যে স্ক্রিপ্টটি চালানোর আগে আপনাকে একটি নতুন ইউএসবি স্টিকের উপর লেবেল স্থাপন করতে হবে, এবং /dev/disk/by-labelএটি কেবল তখনই উপলব্ধ যদি (কমপক্ষে) একটি ইউএসবি স্টিক সংযুক্ত থাকে (অন্যথায় এটি মুছে ফেলা হয়)।

ইউএসবি লেবেল কীভাবে সেটআপ করবেন সে সম্পর্কে বিশদটি এখানে পাওয়া যাবে: /ubuntu/194510/how-to-edit-label-of-usb-drive


1
যদি আপনার ফাইল সিস্টেমে লেবেল না থাকে তবে /dev/disk/by-id/তার পরিবর্তে এটি কার্যকর হতে পারে (এটি আমি আমার ফাইল সিস্টেমগুলির জন্য ব্যবহার করি)।
টবি স্পিড

3

এইভাবে আমি এই সমস্যার সমাধান করছি, তবে সাধু কাতসুরা আপনাকে যেমন বলেছিল, আপনাকে একটি ওদেব বিধি লিখতে হবে।

  1. আপনার ডিভাইসটি প্লাগ ইন করুন, এটি কোন ডিভাইস পেয়েছে তা পরীক্ষা করুন (উদাহরণস্বরূপ ডেমেসগ দেখে)।
  2. সুপারভাইজার কল হিসাবে udevadm info --query all /dev/sdc(বা যাই হোক না কেন)।
  3. একটি উদেব নিয়ম সেটআপ করুন, আমার পকেটবুকের জন্য এখানে একটি উদাহরণ। ক্ষেত্রগুলি ID_SERIAL_SHORTএবং ID_FS_UUIDআমি পদক্ষেপ 2 এ তথ্য থেকে পড়ি:

    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="3878-D432", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook", OWNER="ingo"
    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="9016-4EF8", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook-sd", OWNER="ingo"
    

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

    ENV{ID_PART_ENTRY_NUMBER}=="1", ENV{DEVTYPE}=="partition",
    

    পার্টিশন নম্বর 1 এর জন্য, উদেব বিধি লাইনগুলিতে।

উদেব বিধিগুলি পাওয়া যায় /etc/udev/rules.d, যদি আপনার কোনও বুদ্ধিমান ব্যবস্থা থাকে।

  1. এখন তুমি পার

    udevadm control --reload
    

    নিয়ম পুনরায় লোড করতে এবং

    udevadm monitor
    

    পদক্ষেপ 5 চলাকালীন কী ঘটে তা নিরীক্ষণ করা।

  2. আপনার ইউএসবি ডিভাইসটি প্লাগআউট এবং প্লাগইন করুন (অবশ্যই যদি আপনি এটি মাউন্ট করেন তবে আনমাউন্টিংয়ের আগে)। মনিটরের নতুন ডিভাইসটি শুরু হওয়ার সাথে সাথে আপনাকে অবহিত করা উচিত।

  3. /dev/ডান চিহ্নগুলি রয়েছে কিনা তা পরীক্ষা করুন । আমার উদাহরণে আমি এটি পেয়েছি:

    brw-rw---- 1 ingo disk    8,  48 Aug  3 10:32 sdd
    brw-rw---- 1 ingo disk    8,  32 Aug  3 10:32 sdc
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook-sd -> sdd
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook -> sdc
    

এখন আপনি সিমলিংকগুলি সহ /dev/pocketbookএবং /dev/pocketbook-sdঅথবা উদেব বিধি ফাইলের SYMLINK ক্ষেত্রে আপনার নামগুলি স্থির নিয়মের সাথে সংজ্ঞা দিতে পারেন def


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

0

শুধু @ alextartan এর উত্তর যুক্ত করতে।

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

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

আমি আমার নিজস্ব অনন্য (মানব বান্ধব) লেবেলিং কনভেনশন নিয়ে এসেছি এবং যখন আমি তৈরি করি তখন বিভিন্ন পার্টিশন লেবেল করার জন্য জিপিআর্ট ব্যবহার করি।

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

function get_dev {
  ## Return the device name of a partition
  ## In DEV
  ## Given its label
  ## Partition does not need to be mounted
  ## Usage get_dev <partition_label>
  ## Copyleft 04/28/2014 JPmicrosystems
  local LINE
  local VERBOSE=1  ## Verbose version
  local USAGE="ERROR Usage is: get_dev <partition_label>"
  unset DEV

  if [ -z "${1}" ]
  then
    (( VERBOSE )) && echo $USAGE
    return 1
  fi

  LINE=$(ls -l /dev/disk/by-label | grep " ${1} ")
  if (( $? ))
  then
    (( VERBOSE )) && echo "ERROR Partition [${1}] not found"
    return 1
  fi

  DEV="/dev/${LINE##*/}"
  return 0
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.