কোনও পার্টিশন ইউআইডি দ্বারা মাউন্ট করা আছে কিনা তা কীভাবে পরীক্ষা করবেন?


16

আমার কাছে যদি কোনও ড্রাইভ পার্টিশনের ইউআইডি থাকে, কমান্ড লাইনটি ব্যবহার করে এটি মাউন্ট করা হয়েছে কিনা তা আমি কীভাবে অনুসন্ধান করব?


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

আমি বিশ্বাস করি যে আপনি একটি পার্টিশনের uuid এর সাথে পরিবর্তন করতে পারেন tune2fs
অরোনিকাল

@ জোশুয়া, @ আরোনিকাল হ্যাঁ, আপনি এর সাথে ইউআইডি পরিবর্তন করতে পারেন tune2fs -U random /dev/sdxx। তবে এটি সমস্ত ধরণের পার্টিশনের জন্য কাজ করবে না।
কাতু

আসলে এটি কাজ করবে না। ড্রাইভে অবশ্যই একই ইউআইডি থাকতে হবে কারণ সেগুলি মিরর হয়েছে। ইউআইডি দ্বারা সনাক্ত করার চেষ্টা করা হয়েছে কেবল আয়না ডিভাইসের পরিবর্তে সদৃশ পাথগুলি returns
জোশুয়া

উত্তর:


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')

প্রথম পদ্ধতির সাহায্যে, কোনও ত্রুটি হবে না যদি ইউইউডিটি বর্তমানে সংযুক্ত ডিস্ক থেকে নেই। দ্বিতীয় পদ্ধতির সাহায্যে অস্তিত্ব না থাকলে lsblkত্রুটি ঘটবে /dev/disk/by-uuid/$uuid


17
lsblk -o UUID,SIZE,MOUNTPOINT

যদি আপনি কেবল আপনার ইউআইডি এবং মাউন্টপয়েন্টের সাথে একটি লাইন চান ($ ইউআইডি আপনার ইউইউডি উপস্থাপন করে):

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
হ্যাঁ এটা ! ঠিক এই! নির্দিষ্ট ইউআইডি ফিল্টার করার জন্য গ্রেপ দিয়ে আরও উন্নত করা যেতে পারে, এমনকি অ্যাজকের সাথে পার্সও করা যায়
সের্গি কলডিয়াজহনি

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আপনার ইউআইডি দিয়ে প্রতিস্থাপন করুন

আরও পঠনযোগ্য:

 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 :)
অ্যারোনিকাল

@ অ্যারোনিকাল আপনার পক্ষে খুব উদার: ডি
জান্না

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তাই কোনও অদ্ভুত কমান্ড আউটপুট বিন্যাসের সমস্যা নেই,
  • (পুনরায়) ডিভাইস ইউআইডিগুলিকে স্ক্যান করে না তবে কার্নেল ক্যাশে ব্যবহার করে,
  • অতএব সুপার-ব্যবহারকারীর সুবিধার দরকার নেই,
  • ক্যানোনিক্যালাইজড পাথ নামের উপর নির্ভর করে না তবে ফাইল (ডিভাইস) ফাইল পরিচয় ব্যবহার করে।
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

এই প্রশ্নের জন্য আমি যে দুর্দান্ত উত্তর পেয়েছি তার উপর ভিত্তি করে, আমি বুঝতে পেরেছি যে ডিভাইসের নাম নিয়ে কাজ করা অনেক সহজ। ইউইউডি থেকে ডিভাইসের নাম পেতে:

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

এর অর্থ আউটপুট গ্রেপ করে মাউন্ট করা থাকলে আমি দ্রুত ছাড় করতে পারি df:

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

বা মুড়ুর উত্তরে কোডটি ব্যবহার করে , যেখানে আমাকে ড্রাইভটি কোথায় লাগানো হয়েছে তা বলার যুক্ত বোনাস রয়েছে:

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  

আমি কি এর সাথে পার্টিশন ইউআইডি ব্যবহার করতে পারি df?
অ্যারোনিকাল

0

পার্টিশনে " the_UUID" নামের একটি লিঙ্ক থাকলে /dev/disk/by-uuid/মাউন্ট করা হয়। আমার উবুন্টু 14.04.5 (ওয়াইএমএমভি) তে:

$ 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এবং এর অংশগুলি তাদের মাউন্টের অবস্থা নির্বিশেষে udev- তে পরিচিত সংযুক্ত ডিভাইসের সমস্ত ইউআইডি / আইডি / লেবেল ধারণ করে।
ডেভিড ফোস্টার 17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.