यह कैसे जांचें कि यूयूआईडी द्वारा एक विभाजन माउंट किया गया है या नहीं?


16

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


मेरे पास मेरे ड्राइव पर UUIDs डुप्लिकेट हैं, और इससे बचा नहीं जा सकता है।
जोशुआ

मेरा मानना ​​है कि आप एक विभाजन के यूआईडी को बदल सकते हैं tune2fs
एरॉनिकल

@Joshua, @Arronical हाँ, आप UUID को बदल सकते हैं tune2fs -U random /dev/sdxx। लेकिन यह सभी प्रकार के विभाजन के लिए काम नहीं करेगा।
काटू

वास्तव में यह काम नहीं करेगा। ड्राइव में एक ही UUID होना चाहिए क्योंकि वे प्रतिबिंबित हैं। UUID द्वारा पता लगाने की कोशिश केवल दर्पण डिवाइस के बजाय डुप्लिकेट पथ देता है।
यहोशू

जवाबों:


20

lsblkमदद हो सकती है। यह सिर्फ यूयूआईडी और आरोह बिंदु को प्रिंट कर सकता है, इसलिए, यूयूआईडी को देखते हुए, बस देखें कि क्या माउंट बिंदु खाली नहीं है:

uuid=foo
lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}'

इसलिए:

uuid=foo
mountpoint=$(lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}')
if [[ -n $mountpoint ]]
then
    echo mounted
else
    echo not mounted
fi

चूँकि lbslkआप विशिष्ट उपकरणों पर कार्य कर सकते हैं, आप यह भी कर सकते हैं:

mountpoint=$(lsblk -o MOUNTPOINT "/dev/disk/by-uuid/$uuid" | awk 'NR==2')

पहली विधि के साथ, यदि UUID वर्तमान में कनेक्टेड डिस्क से नहीं है, तो कोई त्रुटि नहीं होगी। दूसरी विधि के साथ, मौजूद नहीं होने पर lsblkत्रुटि होगी /dev/disk/by-uuid/$uuid


17
lsblk -o UUID,SIZE,MOUNTPOINT

यदि आप अपने UUID और माउंटपॉइंट के साथ केवल एक लाइन चाहते हैं ($ UUID आपके UUID का प्रतिनिधित्व करता है):

lsblk -o UUID,MOUNTPOINT|grep "$UUID"

माउंट पॉइंट खाली होगा अगर वह अनमाउंट है। lsblk -hअधिक विकल्पों के लिए प्रयास करें।

awkपरिणाम प्रिंट करने के लिए उपयोग करें । यदि NF(फ़ील्ड की संख्या) एक से अधिक है तो इसका मतलब है कि इसमें एक आरोह बिंदु है:

lsblk -o UUID,MOUNTPOINT|grep "$UUID"|awk '{if (NF>1) print $1" is mounted"; else print $1" is unmounted";}'

3
हां यह ! बिल्कुल यही! विशिष्ट UUID को फ़िल्टर करने के लिए grep के साथ भी सुधार किया जा सकता है, शायद awk के साथ भी पार्स
सर्गी कोलोडियाज़नी

9

यदि आप विवरण चाहते हैं mount

for uuid in /dev/disk/by-uuid/*; do if [[ "$uuid" =~ .*your-UUID-here.* ]]; then echo $(mount | grep "$(readlink -e "$uuid")") ; fi; done

your-UUID-hereअपने UUID के साथ बदलें

अधिक आसानी से:

 for uuid in /dev/disk/by-uuid/*; do 
   if [[ "$uuid" =~ .*your-UUID-here.* ]]
     then echo $(mount | grep "$(readlink -e "$uuid")")
   fi
 done

आउटपुट उदाहरण:

/dev/mmcblk1p2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)

आप बस यह जांच कर सकते हैं कि स्ट्रिंग अशक्त और गूंज "माउंटेड" नहीं है:

for uuid in /dev/disk/by-uuid/*; do if [[ "$uuid" =~ .*your-UUID-here.* ]]; then if [[ $(mount | grep "$(readlink -e "$uuid")") ]]; then echo "mounted"; fi; fi; done

लेकिन दूसरों ने ऐसा करने के बेहतर तरीके दिए :)


मुझे वैकल्पिक मार्ग +1 :)
Arronical

@Arronical आप में से बहुत उदार: D
Zanna

6

उबंटू UDisks2डेमॉन का उपयोग करता है , जो फ़ाइल सिस्टम के बारे में पूरी जानकारी को प्रदूषित करता है , और हम udisksctlइसके आउटपुट का उपयोग कर सकते हैं और फ़िल्टर कर सकते हैं ताकि हमें जिस जानकारी की आवश्यकता हो उसे त्वरित और गंदे तरीके से ढूंढ सकें :

udisksctl dump | python -c 'import sys;lines = [l.strip() for l in sys.stdin if " UUID" in l or " MountPoints:" in l];print "\n".join(lines)'

जो आप ऊपर देखते हैं, मूल रूप से फाइल सिस्टम और उनके माउंटपॉइंट्स के यूयूआईडी प्रिंट करेगा। दृश्य निरीक्षण से अब आप यह पता लगा सकते हैं कि कौन सा यूयूआईडी माउंट किया गया है, और कौन सा नहीं।

$ udisksctl dump | python -c 'import sys;lines = [l.strip() for l in sys.stdin                                           
> if " UUID" in l or " MountPoints:" in l];print "\n".join(lines)'
MountPoints:        /
UUID:               000b5321-01
MountPoints:
UUID:               bbf23a81-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               bbf23a87-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               bbf23a89-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               bbf23a8f-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               02fe8de2-a408-11e4-8eeb-f0761c8c6df7
MountPoints:        /mnt/HDD
UUID:               53827413-0b7e-4ae6-ae09-1daea529d6a1

6

मेरा समाधान

  • केवल एक शेल का उपयोग करता है और procfsइसलिए कोई अजीब कमांड आउटपुट स्वरूपण मुद्दे नहीं करता है,
  • डिवाइस यूयूआईडी को स्कैन (पुनः) नहीं करता है लेकिन कर्नेल कैश का उपयोग करता है,
  • इसलिए सुपर-उपयोगकर्ता विशेषाधिकारों की आवश्यकता नहीं है,
  • canonicalised पथ नामों पर भरोसा नहीं करता है, लेकिन (डिवाइस) फ़ाइल पहचान का उपयोग करता है।
my_uuid=...
while IFS=' ' read -r dev mnt remainder; do
  case "$dev" in
  /dev/*)
    if [ "$dev" -ef "/dev/disk/by-uuid/$my_uuid" ]; then
      echo "$my_uuid ($dev) mounted at $mnt"
      break
    fi;;
  esac
done < /proc/mounts

5

इस प्रश्न के लिए मुझे मिले उत्कृष्ट उत्तरों के आधार पर, मुझे एहसास हुआ कि डिवाइस नामों के साथ काम करना बहुत आसान है। डिवाइस का नाम UUID से प्राप्त करने के लिए:

disk_uuid=foo
disk_devname=$(blkid -U "$disk_uuid")

इसका मतलब है कि मैं जल्दी से कटौती कर सकता हूं अगर यह उत्पादन को बढ़ाकर df:

df | grep -q "$disk_devname" && echo "Disk mounted" || echo "Disk not mounted"

या Muru के उत्तर में कोड का उपयोग करके , जिसमें मुझे यह बताने का अतिरिक्त बोनस है कि ड्राइव कहां है:

mountpoint=$(lsblk -no MOUNTPOINT "$disk_devname")
if [[ -n  "$mountpoint" ]]; then
   echo "Disk is mounted at $mountpoint"
else
   echo "Disk not mounted"
fi

4

आप dfमाउंटेड फ़ाइल सिस्टम और उनके आरोह बिंदु को देखने के लिए कमांड का उपयोग कर सकते हैं । यहां मेरी मशीन से एक उदाहरण है ... विभाजन sdb3, जिस पर मेरे पास एक और सिस्टम स्थापित है, माउंट नहीं है, इसलिए सूचीबद्ध नहीं हैं (विभाजन फिर से लेबल किए गए हैं, यही कारण है कि यूयूआईडी के बजाय नाम दिखाए गए हैं):

df
Filesystem                   1K-blocks     Used Available Use% Mounted on
udev                           8100756        0   8100756   0% /dev
tmpfs                          1625296     9952   1615344   1% /run
/dev/sdb4                     41022688  7074348  31834804  19% /
tmpfs                          8126464    19456   8107008   1% /dev/shm
tmpfs                             5120        4      5116   1% /run/lock
tmpfs                          8126464        0   8126464   0% /sys/fs/cgroup
/dev/loop0                       76800    76800         0 100% /snap/ubuntu-core/423
/dev/sdb1                      4186108    12160   4173948   1% /boot/efi
zsc-lxd/containers/uc-1604-1  58620160   516736  58103424   1% /var/lib/lxd/containers/uc-1604-1.zfs
zsc-lxd/containers/uc-1610-1  58637184   533760  58103424   1% /var/lib/lxd/containers/uc-1610-1.zfs
tmpfs                          1625292      124   1625168   1% /run/user/1000
/dev/sdb5                     61796348 10766892  47867344  19% /media/cl/virtual
/dev/sda4                    206293688 13419740 182371804   7% /media/cl/system
/dev/sda3                    206293688 32116600 163674944  17% /media/cl/rescue
/dev/sda2                    206293688  1867604 193923940   1% /media/cl/media
/dev/sda1                    206293688  2539712 193251832   2% /media/cl/data  

क्या मैं विभाजन UUID का उपयोग कर सकता हूं df?
एरोनिकल

0

अगर कोई लिंक है जिसका नाम " the_UUID" है/dev/disk/by-uuid/ विभाजन है, तो माउंट किया गया है। मेरे Ubuntu 14.04.5 (YMMV) पर:

$ ll /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root  9 Nov 14 04:30 0123-4567 -> ../../sde
lrwxrwxrwx 1 root root 10 Nov 11 00:25 06ee65d5-26f7-41f3-91ab-3497021a6213 -> ../../dm-0
lrwxrwxrwx 1 root root 10 Nov 11 00:25 12817b99-9d2b-4357-a4ca-c11eab672a20 -> ../../sdb6
lrwxrwxrwx 1 root root 10 Nov 11 00:25 362254e8-2b99-442d-8ad9-4a348bc08032 -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov 11 00:25 83a64b80-5a37-4659-b797-221b88ef41f8 -> ../../sdb5
lrwxrwxrwx 1 root root 10 Nov 11 00:25 ff359af0-d996-4949-b27e-f24ce453c48c -> ../../sdc1

2
दुर्भाग्य से मेरा ड्राइव जो जुड़ा हुआ है, इस सूची में नहीं दिखाया गया है, भले ही घुड़सवार न हो।
एरोनिकल

में "रोचक" संदेश के लिए देखो dmesgऔर /var/log/kern.log*। ऐसा लगता है कि सिस्टम विभाजन पर फाइल सिस्टम से खुश नहीं है, और इसे माउंट नहीं कर सकता है। एक संभावित कारण विंडोज हाइबरनेशन है।
वॉल्टिनेटर

मुझे लगता है कि मैं भ्रामक हो सकता हूं, ड्राइव साफ-साफ दिखती है। यह सिर्फ इतना है कि जब यह माउंट नहीं है, लेकिन जुड़ा हुआ है और चालू है, यह /dev/disks/by-uuid/निर्देशिका में दिखाता है ।
अरकॉनिकल

2
नहीं, /dev/disk/by-uuidऔर इसके समकक्षों के पास यूयूआईडी के सभी यूयूआईडी / आईडी / लेबल्स हैं, जो अपने माउंट राज्य की परवाह किए बिना udv को ज्ञात हैं।
डेविड फोस्टरस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.