ডিস্কটি যেখানে মাউন্ট করা আছে তা দেখার জন্য কোনও আদেশ রয়েছে?


28

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

আমি একটি ন্যূনতম ইনস্টল (কোনও প্রয়োজনে অতিরিক্ত প্যাকেজ ইনস্টল করতে পারি) দিয়ে একটি ডেবিয়ান স্কুইজ লাইভ সিস্টেমে কাজ করছি।

উত্তর:


13

লিনাক্সের অধীনে, আপনি সরাসরি কার্নেল থেকে মাউন্ট পয়েন্টের তথ্য পেতে পারেন /proc/mountsmountপ্রোগ্রামে একই তথ্য রেকর্ড /etc/mtab। পাথ এবং বিকল্পগুলি পৃথক হতে পারে, কার্নেলের কাছে /etc/mtabযা mountপ্রেরণ করা হয়েছে সেখানে কার্নেলের অভ্যন্তরে /proc/mountsপ্রদর্শিত ডেটা প্রদর্শন করা হয়। /proc/mountsসর্বদা আপ-টু-ডেট যেহেতু /etc/mtabপারে নাও হতে /etcহয়েছিল শুধুমাত্র পাঠযোগ্য কিছু পয়েন্ট যে বুট স্ক্রিপ্ট দ্বারা প্রত্যাশিত ছিল না হয়। বিন্যাস অনুরূপ /etc/fstab

উভয় ফাইলে, প্রথম শ্বেতস্পেসে পৃথক করা ফিল্ডে ডিভাইস পাথ এবং দ্বিতীয় ক্ষেত্রটিতে মাউন্ট পয়েন্ট থাকে।

awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts

অথবা যদি আপনার কাছে বিশ্রী না থাকে:

grep "^$device_path " /proc/mounts | cut -d ' ' -f 2

অনেকগুলি প্রান্তের মামলা রয়েছে যেখানে আপনি যা প্রত্যাশা করেন তা নাও পেতে পারেন। ডিভাইসটি যদি /devএকই ডিভাইসটিকে মনোনীত করে এমন কোনও অন্য পথ দিয়ে মাউন্ট করা হয় , তবে আপনি এটি এটিকে লক্ষ্য করবেন না। ইন /proc/mounts, বাইন্ড মাউন্টগুলি মূল থেকে পৃথক হয়। মাউন্ট পয়েন্ট যদি অন্যটি ছায়া দেয় তবে একের বেশি মিল থাকতে পারে (এটি অস্বাভাবিক)।

ইন /proc/selfবা /proc/$pid, একটি প্রতি-প্রক্রিয়া mountsযে ফাইলটি নকল বিশ্বব্যাপী ফাইল। মাউন্ট তথ্য প্রক্রিয়াগুলির মধ্যে পৃথক হতে পারে, উদাহরণস্বরূপ কারণে chroot। ডাকা একটি অতিরিক্ত ফাইল রয়েছে যার mountinfoআলাদা ফর্ম্যাট রয়েছে এবং এতে আরও তথ্য রয়েছে, বিশেষত ডিভাইসটির বড় এবং ছোটখাটো সংখ্যা numbers ডকুমেন্টেশন থেকে :

36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3)   (4)   (5)      (6)      (7)   (8) (9)   (10)         (11)

(1) mount ID:  unique identifier of the mount (may be reused after umount)
(2) parent ID:  ID of parent (or of self for the top of the mount tree)
(3) major:minor:  value of st_dev for files on filesystem
(4) root:  root of the mount within the filesystem
(5) mount point:  mount point relative to the process's root
(6) mount options:  per mount options
(7) optional fields:  zero or more fields of the form "tag[:value]"
(8) separator:  marks the end of the optional fields
(9) filesystem type:  name of filesystem of the form "type[.subtype]"
(10) mount source:  filesystem specific information or "none"
(11) super options:  per super block options

সুতরাং আপনি যদি সংখ্যা অনুসারে কোনও ডিভাইস সন্ধান করেন তবে আপনি এটি এটি করতে পারেন:

awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'

"ডিভাইসটি যদি একই ডিভাইসটিকে নির্দিষ্ট করে দেয় / ডি / ডি / ই / তে কোনও অন্য পথ দিয়ে মাউন্ট করা হয় তবে আপনি এটি এটিকে লক্ষ্য করবেন না" " - আসলে এটির ক্ষেত্রে: আমার কাছে udisksসিমিলিংক রয়েছে (/ dev / ডিস্ক / বাই লেবেল / ...)। তবে আমি ডিভাইস নোড ব্যবহার করে সমাধান করতে পারি readlink -f। আমি /proc/mountsধারণাটি পছন্দ করি, আমি মনে করি এটির চেয়ে কিছুটা বেশি নির্ভরযোগ্য /etc/mtab
অবধি 22:55

@ ডিটেলি বা আপনি ব্যবহার করতে পারেন mountinfostatডিভাইস নম্বর পেতে কল করুন (আমার আপডেট হওয়া উত্তর দেখুন, আমি আগে কমান্ডটি অন্তর্ভুক্ত করতে ভুলে গেছি)।
গিলস 'এস-অশুভ হওয়া বন্ধ করুন'

এই কমান্ডের -d " "জন্য আপনার বিকল্পের প্রয়োজন হতে পারে । cutgrep
ক্রেগ ম্যাককুইন


26

লিনাক্সে, আপনি এখন findmntআদেশটি util-linux(সংস্করণ ২.১18 থেকে) ব্যবহার করতে পারেন :

$ findmnt -S /dev/VG_SC/home
TARGET SOURCE                 FSTYPE OPTIONS
/home  /dev/mapper/VG_SC-home ext4   rw,relatime,errors=remount-ro,data=ordered

বা lsblk( util-linux২.১৯-এর পরে থেকেও ):

$ lsblk /dev/VG_SC/home
NAME       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
VG_SC-home 254:2    0  200G  0 lvm  /home

এটি একটি নির্দিষ্ট ডিভাইস (ডিস্ক বা পার্টিশন ...) এর নীচে মাউন্ট করা সমস্ত ফাইল সিস্টেম খুঁজে পেতে দরকারী:

$ lsblk  /dev/sda2
NAME                    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda2                      8:2    0  59.5G  0 part
├─linux-debian64 (dm-1) 252:1    0    15G  0 lvm
└─linux-mint (dm-2)     252:2    0    15G  0 lvm  /

কেবল মাউন্টপয়েন্ট পেতে:

$ findmnt -nr -o target -S /dev/storage/home
/home
$ lsblk -o MOUNTPOINT -nr /dev/storage/home
/home

findmntডিভাইস মাউন্ট না করা থাকলে, না করে উপরে ব্যর্থতার প্রস্থান স্থিতি দিয়ে ফিরে আসে lsblk

তাই:

if mountpoint=$(findmnt -nr -o target -S "$device"); then
  printf '"%s" is mounted on "%s"\n' "$device" "$mountpoint"
else
  printf '"%s" does not appear to be directly mounted\n' "$device"
fi

নতুন কিছু শেখার জন্য এটি সর্বদাই ভাল
রোয়াইমা

6

mountকোন যুক্তি দিয়ে কমান্ড সমস্ত বর্তমানে মাউন্ট ফাইল সিস্টেম তালিকা প্রস্তুত করা যাবে; আপনি grepযে ডিস্কটি চান তা করতে পারেন (বা grep /etc/mtabযা ফাইলটি mountসেই তথ্যটি পড়ে):

$ grep /dev/sda /etc/mtab
/dev/sda3 /boot ext2 rw,noatime 0 0

যদিও বহিরাগত পাঠ্য অনেক আছে। আমার অন্যান্য কমান্ডগুলিতে মাউন্ট পয়েন্টটি পাস করতে সক্ষম হতে হবে। (দুঃখিত, আমি স্পষ্ট করে দিয়েছি যে
প্রশ্নে।

আহ, grep ${NODE} /etc/mtab | cut -d ' ' -f 2এটা করা উচিত।
অবধি

যদিও grep ^"${NODE}[[:space:]]\+" /etc/mtab | cut -d ' ' -f 2"অনেক কম ভঙ্গুর ...
অবধি

2

হ্যাঁ। আপনি দেখতে পাচ্ছেন কেবল আকর্ষণীয় মাউন্ট পয়েন্ট / ফিল্টারিং অ-আগ্রহী প্রকারগুলি বা তালিকা নির্দেশিকা /যেগুলির অধীনে কিছু একই উদাহরণের ব্যবহারের জন্য একই মাউন্টপয়েন্টের আওতাভুক্ত নয় তবে নীচে একটি সংক্ষিপ্ত রুনডাউনও রয়েছে। আপনি যে আদেশটি সম্পর্কে জিজ্ঞাসা করছেন তা হ'ল findmnt (যদিও lsblkএটি পরিবেশনও করতে পারে) :

lsblk -f /dev/sda[12]

NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sda1 vfat   ESP   F0B7-5DAE                            /esp
sda2 btrfs  sys   94749918-bde1-46e6-b77c-b66e0368ecdb /    

এখন, আপনি দেখতে পাচ্ছেন, /dev/sda1মাউন্ট করা হয়েছে /esp। আমি ভাবছি যদি এটি অন্য কোথাও মাউন্ট করা হয়?

findmnt /dev/sda1

TARGET SOURCE                    FSTYPE OPTIONS
/esp   /dev/sda1                 vfat   rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
/boot  /dev/sda1[/EFI/arch_root] vfat   rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro

আহা। আমি দেখি. একটি সাবফোল্ডার এছাড়াও --bindবুট উপর মাউন্ট করা হয়। ঠিক আছে...

sudo umount /boot /esp
findmnt /dev/sda1

কিছুই নেই। কি খারাপ অবস্থা?

echo "$?"

1

ওহ ... ভাল, খুব ভাল। হুমমম ...

for d in 1 2
do    findmnt "/dev/sda$d" >/dev/null
      printf  "/dev/sda$d%.$((6>>!$?))s%s\n"\
              " isn't" " currently mounted."
done

/dev/sda1 isn't currently mounted.
/dev/sda2 is currently mounted.

ওহ, হ্যাঁ, এটি সত্যিই দুর্দান্ত।

for d in /dev/sd*
do    findmnt -noSOURCE,TARGET "$d"
done

/dev/sda2[/arch_root] /

এখন এসডিএ 1 এটি যেখানে রয়েছে সেখানে রেখে দিন এবং এটি আবার চেষ্টা করুন ...

sudo mount -a
for d in /dev/sd*
do    findmnt -noSOURCE,TARGET "$d"
done

/dev/sda1                 /esp
/dev/sda1[/EFI/arch_root] /boot
/dev/sda2[/arch_root] /

তবে আমি এই যাদু আদেশটি কোথায় পেলাম?

man mount | sed -e:n -e'/findmnt/!d;N;/\n$/q;bn'

আরও দৃust় এবং কাস্টমাইজযোগ্য আউটপুট ব্যবহারের জন্য findmnt(8) , বিশেষত আপনার স্ক্রিপ্টগুলিতে। নোট করুন যে মাউন্টপয়েন্টের নামের অক্ষরগুলি পরিবর্তিত হয়েছে ?


1

কোনও ডিভাইস নোড /devমাউন্ট করা আছে কিনা তা সনাক্ত করার কোনও পরিষ্কার এবং সহজ উপায় আমি জানিনা । যদিও আমি এটি অফার করতে পারি। এটি সরাসরি মাউন্ট করা ডিভাইসগুলি ( /dev/sda1) এবং ইউআইডি ( /dev/disk/by-uuid/aa4e7b08-6547-4b5a-85ad-094e9e1af74f) দ্বারা মাউন্ট করা ডিভাইসগুলি পরিচালনা করে । আপনার ডিভাইসের নামগুলিতে সাদা স্থান থাকলে এটি ভেঙে যায়।

deviceIsMounted()
{
    local DEVICE="$1"
    local MOUNT=$(
        (
            echo "$DEVICE"
            find /dev -type l -lname "*${DEVICE/*\/}" -exec readlink -f {} \; -print |
                xargs -n2 |
                awk -v device="$DEVICE" '$1 == device {print $2}'
        ) |
            xargs -n1 -i{} grep -F {} /proc/mounts
    )
    test -n "$MOUNT" && echo "$MOUNT"
}

deviceIsMounted /dev/sda1 && echo yes              # Mountpoint and status
deviceIsMounted /dev/md2 >/dev/null && echo yes    # Just status

ফাংশন থেকে এন্ট্রি লিখেছেন /proc/mountsকরতে stdout- এ , যদি পাওয়া যায় এছাড়াও 0. অন্যথা প্রস্থান অবস্থা 1 প্রস্থান স্থিতি সেট।


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