क्या हर बार जब मैं इसे माउंट करता हूं, तो USB कुंजी का नाम समान होगा?


9

मेरे पास एक USB कुंजी है जिसका उपयोग दैनिक रूप से बैश स्क्रिप्ट के माध्यम से उस पर डेटा सहेजने के लिए किया जाएगा। मैं एक विशिष्ट उपयोगकर्ता को कमांड का उपयोग करके उसमें फ़ोल्डर लिखने में सक्षम होने के लिए इसे माउंट करने में कामयाब रहा:

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

स्क्रिप्ट चला सकता है और निर्देशिका बना सकता है जैसा वह चाहता है और यह एकदम सही है। कुछ बिंदु पर, USB कुंजी को अनप्लग किया जाएगा और एक नए (उसी मॉडल) के साथ बदल दिया जाएगा। क्या नई USB कुंजी में अभी भी नाम /dev/sdc1होगा या यह एक अलग होगा?

यदि यह एक अलग है, तो मैं अपनी स्क्रिप्ट में बढ़ते हिस्से को अपने आप कैसे बना सकता हूं?


2
इसका उत्तर नहीं है, लेकिन आप udev नियमों के साथ काम कर सकते हैं । बेहतर लेकिन थोड़े पुराने स्पष्टीकरण के लिए यहां देखें ।
सातु कटुरा

@ एलेक्सटन यदि आप sdc प्राप्त करने से पहले किसी अन्य USB पोर्ट में किसी अन्य USB डिस्क में प्लग करते हैं। तो आपका अड़चन "और कुछ नहीं sdc1 के लिए आत्मसात है" सच है। सामान्य तौर पर यह एक बहुत खतरनाक धारणा है जिसे कभी नहीं बनाया जा सकता है। यह लगातार डिवाइस के नाम के रूप में एसडी [az] का उपयोग करने के लिए एक अच्छा विचार नहीं है। यह उस समय से एक विरासत है जब हमारे पास चार स्थिर बंदरगाहों के साथ आईडीई नियंत्रक थे जो हार्डवेयर जम्पर सेट करके और सही केबल प्लग का चयन कर सकते थे।
ikrabbe

1
@ikrabbe, मुझे पता है, इसीलिए मैंने लेबल पहचान के आधार पर एक उत्तर पोस्ट किया (इन्हें थोड़ा आसान बनाया जा सकता है)।
एलेक्स टार्टन

जवाबों:


6

इसके द्वारा पहुँचना /dev/sdXyजोखिम भरा है, इसके द्वारा अधिक सटीक पहचान की जा सकती है UUID

चूँकि आप उल्लेख करते हैं (कुछ बिंदु पर) usb स्टिक को बदलना, अनुकूलता बनाए रखने के लिए, आप एक लेबल द्वारा अपनी usb स्टिक को पहचानना चाह सकते हैं। ऐसा करने के लिए, आप कर सकते हैं /dev/disk/by-label/YourLabelHere:।

ध्यान दें कि आपको स्क्रिप्ट को चलाने से पहले लेबल को एक नई usb स्टिक में सेट करना होगा, और यह भी, /dev/disk/by-labelकेवल तभी उपलब्ध होगा जब (कम से कम) एक usb स्टिक जुड़ा हो (अन्यथा इसे हटा दिया जाता है)।

यूएसबी लेबल सेटअप करने के तरीके के बारे में विवरण यहां पाया जा सकता है: /ubuntu/194510/how-to-edit-label-of-usb-drive


1
यदि आपके फाइलसिस्टम में लेबल नहीं हैं, तो /dev/disk/by-id/इसके बजाय उपयोग हो सकता है (यह मैं अपने फाइल सिस्टम के लिए उपयोग करता हूं)।
टॉबी स्पीट

3

इस समस्या को मैं इसी तरह से संबोधित करता हूं, लेकिन आम तौर पर जैसा कि सतो कात्सुरा ने आपको बताया, आपको एक udv नियम लिखने की आवश्यकता है।

  1. अपने डिवाइस में प्लग करें, जांचें कि यह किस डिवाइस को मिला है (उदाहरण के लिए dmesg देखकर)।
  2. सुपरयुजर कॉल के रूप में udevadm info --query all /dev/sdc(या जो भी)।
  3. एक udv नियम सेट करें, यहां मेरी पॉकेटबुक के लिए एक उदाहरण है। फ़ील्ड 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"
    

    मैंने OWNER को यहां सेट किया है, ताकि मैं इसे अपने मुख्य उपयोगकर्ता खाते के साथ माउंट कर सकूं। अपनी पॉकेटबुक के साथ भी मेरे पास विभाजन नहीं हैं, लेकिन सादे डिस्क को माउंट करें। यदि आपके पास विभाजन परिवर्तन हैं:

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

    udv नियम लाइनों पर विभाजन संख्या 1 के लिए।

Udv नियम पाए जाते हैं /etc/udev/rules.d, अगर आपके पास एक प्रणाली है।

  1. अब आप कर सकते हैं

    udevadm control --reload
    

    नियमों को फिर से लोड करने के लिए और

    udevadm monitor
    

    चरण 5 के दौरान क्या होता है इसकी निगरानी करना।

  2. अपने usb डिवाइस को प्लग-इन और प्लग-इन करें (बेशक इससे पहले कि आपने माउंट किया है)। मॉनिटर को नए उपकरण के बारे में सूचित करना चाहिए जब यह आरंभीकृत होता है।

  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, या udv रूल्स फ़ाइल के SYMLINK फ़ील्ड में आपके नाम जो भी हों।


1
आपके उत्तर के लिए धन्यवाद। हालाँकि मैं इसका उपयोग नहीं कर पाऊंगा। मैं जिस उपकरण पर काम कर रहा हूं, वह एक ज्वालामुखी पर स्थापित है और यूएसबी स्टिक का उपयोग वहां अर्जित डेटा को संग्रहीत करने के लिए किया जाता है। Usb स्टिक को बदलने के लिए हम हर तीन बार एक बार वहां जाएंगे। मेरे पास केवल इसके लिए एक दूरस्थ एसेस है, बिना किसी "स्क्रीन" इंटरफ़ेस के। जैसा कि USB हर समय अलग-अलग होगा, लेकिन एक ही USB पोर्ट पर प्लग इन किया जाता है, मुझे लगता है कि आसान तरीका sdc1 पाथ रख रहा है। मैं udv नियमों के साथ देखूंगा कि मैं क्या कर सकता हूं।
गुडरून

0

बस @ alextartan के उत्तर में जोड़ने के लिए।

मैंने अपना स्वयं का बैकअप सिस्टम रोल किया जो लक्ष्य के लिए USB ड्राइव का उपयोग करता है। मुझे यह सुनिश्चित करने की आवश्यकता है कि क्या हो रहा है। चूंकि UUID विशेष रूप से उपयोगकर्ता के अनुकूल नहीं हैं, इसलिए मैं डिस्क लेबल पर निर्भर हूं।

UUID भी थोड़ी समस्याग्रस्त हैं क्योंकि जब भी आप किसी पार्टीशन को रिफॉर्मेट करते हैं, उसे एक नया यूनीक UUID मिलता है, इसलिए यूयूआईडी का उपयोग करने वाली किसी भी स्क्रिप्ट को संशोधित करना होगा। मैं पहले से ही सुधारित विभाजन (या यहां तक ​​कि एक नए / प्रतिस्थापन ड्राइव पर एक विभाजन) के रूप में एक ही लेबल असाइन कर सकता हूं और अपनी स्क्रिप्ट अकेले छोड़ सकता हूं।

मैं अपने स्वयं के अनूठे (मानव हितैषी) लेबलिंग कन्वेंशन के साथ आया और विभिन्न विभाजन को लेबल करने के लिए gparted का उपयोग करता हूं जब मैं उन्हें बनाता हूं।

जब मेरी स्क्रिप्ट को किसी विशेष विभाजन तक पहुंचने की आवश्यकता होती है, तो मैं लेबल का उपयोग करके डिवाइस का नाम देखता हूं।

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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.