উত্তর:
বাইন্ড মাউন্টগুলি কোনও ফাইল সিস্টেমের ধরণের নয়, বা একটি মাউন্ট করা ফাইল সিস্টেমের পরামিতি নয়; তারা একটি মাউন্ট অপারেশন পরামিতি । যতদূর আমি জানি, নিম্নলিখিত কমান্ডের ক্রমগুলি কার্নেলের সাথে সম্পর্কিত হিসাবে একইভাবে অভিন্ন সিস্টেমের দিকে পরিচালিত করে:
mount /dev/foo /mnt/one; mount --bind /mnt/one /mnt/two
mount /dev/foo /mnt/two; mount --bind /mnt/two /mnt/one
তাই কোন মাউন্টগুলি বাইন্ড মাউন্টগুলি ছিল তা মনে রাখার একমাত্র উপায় হ'ল mount
কমান্ডগুলির মধ্যে থাকা লগ /etc/mtab
। একটি বাইন্ড মাউন্ট অপারেশন bind
মাউন্ট বিকল্প দ্বারা নির্দেশিত হয় (যার ফলে ফাইল সিস্টেমের ধরণের উপেক্ষা করা যায়)। তবে mount
কেবলমাত্র বিকল্প সিস্টেমগুলির সেটগুলির সেট দিয়ে মাউন্ট করা ফাইলসিস্টেমগুলির তালিকা করার বিকল্প নেই। অতএব আপনার নিজের ফিল্টারিং করতে হবে।
mount | grep -E '[,(]bind[,)]'
</etc/mtab awk '$4 ~ /(^|,)bind(,|$)/'
নোট যে /etc/mtab
এখানে শুধুমাত্র দরকারী যদি এটি কোনও টেক্সট ফাইল দ্বারা রক্ষণাবেক্ষণ করে mount
। কিছু বিতরণ পরিবর্তে /etc/mtab
একটি প্রতীকী লিঙ্ক হিসাবে সেট আপ /proc/mounts
; /proc/mounts
বেশিরভাগ সমতুল্য /etc/mtab
তবে কয়েকটি পার্থক্য রয়েছে যার মধ্যে একটি হ'ল বাইন্ড মাউন্টগুলি ট্র্যাক করা হচ্ছে না।
তথ্যগুলির এক টুকরো যা কার্নেল দ্বারা ধরে রাখা হয়, তবে এতে প্রদর্শিত হয় না /proc/mounts
, যখন মাউন্ট পয়েন্ট কেবল মাউন্ট করা ফাইল সিস্টেমে ডিরেক্টরি গাছের একটি অংশ প্রদর্শন করে। অনুশীলনে সাধারণত এটি বাঁধাইয়ের মাউন্টগুলির সাথে ঘটে:
mount --bind /mnt/one/sub /mnt/partial
ইন /proc/mounts
, একই ডিভাইস, একই ফাইল সিস্টেমের ধরণ এবং একই বিকল্পগুলির জন্য /mnt/one
এবং এন্ট্রি রয়েছে /mnt/partial
। যে তথ্যগুলি /mnt/partial
কেবলমাত্র মূলত ফাইল সিস্টেমের অংশটি দেখায় সেগুলি (কলাম 4) এর /sub
প্রতিটি প্রক্রিয়া মাউন্ট পয়েন্ট তথ্যের মধ্যে দৃশ্যমান /proc/$pid/mountinfo
। সেখানকার এন্ট্রিগুলি দেখতে এইরকম:
12 34 56:78 / /mnt/one rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
12 34 56:78 /sub /mnt/partial rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
mount --version
ব্যবহার করছেন যা কোনও bind
তথ্য রেকর্ড করে /etc/mtab
? আমি ২.২০.১ সংস্করণটি ব্যবহার করছি এবং আমি সর্বশেষ উত্সগুলিতে নজর রেখেছি এবং উভয় ক্ষেত্রেই আমি বাঁধাকপি তথ্য কোথাও রেকর্ড করা দেখতে পাচ্ছি না যা আপনাকে গ্রেপ করার অনুমতি দেয় bind
। অন্যদিকে, আমি আমার উত্তরে যা পরামর্শ দিয়েছি --bind
তা bind
বিকল্পটি ব্যবহারের পাশাপাশি তৈরি করা বাঁধার মাউন্টগুলিকে তালিকাই দেয় ।
</etc/mtab awk …
- সম্মতিজনক (আমি ভুলে যাই এটি বোর্নে সমর্থিত কিনা)। আপনার তথ্য পরীক্ষা করুন। আমি নিশ্চিত করতে পারি যে /etc/mtab
এতে ডেবিয়ান স্ট্যাবিলে মাউন্ট bind
করা ফাইল সিস্টেমের বিকল্প রয়েছে mount --bind /source /target
(ইউজার-লিনাক্স-এনজি ২.১.2.২ থেকে মাউন্ট)।
mount
এবং /etc/mtab
। আপনি দেবিয়ান স্থিতিশীল ব্যবহার করছেন যা ব্যবহার-লিনাক্স-এনজি এর পুরানো সংস্করণ রয়েছে; আমি ডেবিয়ান পরীক্ষামূলক যা একটি নতুন সংস্করণ রয়েছে ব্যবহার করছি যা আর একই আছে বলে মনে হয় /etc/mtab
আচরণ, যা হয়তো এই কারণেই @rozcietrzewiacz দেখতে পাইনি bind
মধ্যে /etc/mtab
তাঁর বন্টন একটি নতুন সংস্করণ ব্যবহার করছেন?
findmnt
উত্তর হিসাবে পোস্ট করা উচিত । এটি কেবল তখনই কাজ করে যদি লক্ষ্য ডিরেক্টরিটি অন্য কোনও মাউন্ট পয়েন্ট না হয় by উদাহরণস্বরূপ চেষ্টা করুনsudo mount --bind / foo && findmnt | grep foo
সম্ভবত এটি কৌশলটি করতে পারে:
findmnt | grep "\["
উদাহরণ:
$ mkdir /tmp/foo
$ sudo mount --bind /media/ /tmp/foo
$ findmnt | grep "\["
│ └─/tmp/foo /dev/sda2[/media] ext4 rw,relatime,data=ordered
/
নিজেই বাঁধাই হয় তবে উদাহরণস্বরূপ, আউটপুটটিতে একটি নেই [...]
।
কার্নেলটি ব্যান্ড মাউন্টগুলি হ্যান্ডেল করে না সত্যের পরে সাধারণ মাউন্টগুলির থেকে আলাদা । mount
রান করার সময় যা ঘটে তার মধ্যে একমাত্র পার্থক্য ।
যখন আপনি একটি ফাইল সিস্টেম মাউন্ট করবেন (উদাহরণস্বরূপ mount -t ext4 /dev/sda1 /mnt
) কার্নেল (কিছুটা সরলীকৃত) তিনটি ধাপ সম্পাদন করে:
-t
বা ব্যবহার করেন তবে আপনার -t auto
mount
জন্য প্রকারটি অনুমান করে এবং কার্নেলের অনুমানযুক্ত প্রকারটি সরবরাহ করে)nodev
উদাহরণস্বরূপ মাউন্টপয়েন্টে একটি বিকল্প, ফাইল সিস্টেমে নয় You আপনার কাছে একটি বাইন্ড মাউন্ট থাকতে পারে nodev
এবং একটি ছাড়াও)আপনি যদি একটি বাইন্ড মাউন্ট সম্পাদনা করেন (উদাহরণস্বরূপ mount --bind /a /b
) নিম্নলিখিতটি ঘটে:
(আমি এড়িয়ে যাব mount --move
, কারণ এটি প্রশ্নের সাথে প্রাসঙ্গিক নয়))
লিনাক্সে ফাইলগুলি কীভাবে তৈরি করা হয় তার সাথে এটি বেশ মিল:
আপনি যদি কোনও হার্ড লিঙ্ক তৈরি করেন তবে নিম্নলিখিতটি ঘটে:
আপনি দেখতে পাচ্ছেন, তৈরি ফাইল এবং হার্ড লিঙ্কটি পার্থক্য ছাড়াই:
$ touch first
$ ln first second
$ ls -li
1184243 -rw-rw-r-- 2 cg909 cg909 0 Feb 20 23:56 /tmp/first
1184243 -rw-rw-r-- 2 cg909 cg909 0 Feb 20 23:56 /tmp/second
তবে , যেহেতু আপনি ইনড নম্বরগুলির সাথে তুলনা করে কোনও হার্ডলিংকগুলিকে কোনও ফাইলের সাথে সনাক্ত করতে পারেন, আপনি বড় আকারের: সংখ্যক মাউন্টগুলির সাথে তুলনা করে একটি ফাইল সিস্টেমে সমস্ত মাউন্টগুলি সনাক্ত করতে পারেন।
আপনি findmnt -o TARGET,MAJ:MIN
সরাসরি বা এটি দেখে এটি করতে পারেন/proc/self/mountinfo
( আরও তথ্যের জন্য লিনাক্স কার্নেল ডকুমেন্টেশন দেখুন )।
নিম্নলিখিত পাইথন স্ক্রিপ্ট সমস্ত বাইন্ড মাউন্টগুলি তালিকাভুক্ত করে। এটি ধরে নেওয়া হয়েছে যে মাউন্ট করা ফাইল সিস্টেমের মূলের সবচেয়ে সংক্ষিপ্ত আপেক্ষিক পাথ সহ প্রাচীনতম মাউন্ট পয়েন্টটি মূল মাউন্ট।
#!/usr/bin/python3
import os.path, re
from collections import namedtuple
MountInfo = namedtuple('MountInfo', ['mountid', 'parentid', 'devid', 'root', 'mountpoint', 'mountoptions', 'extra', 'fstype', 'source', 'fsoptions'])
mounts = {}
def unescape(string):
return re.sub(r'\\([0-7]{3})', (lambda m: chr(int(m.group(1), 8))), string)
with open('/proc/self/mountinfo', 'r') as f:
for line in f:
# Parse line
mid, pid, devid, root, mp, mopt, *tail = line.rstrip().split(' ')
extra = []
for item in tail:
if item != '-':
extra.append(item)
else:
break
fstype, src, fsopt = tail[len(extra)+1:]
# Save mount info
mount = MountInfo(int(mid), int(pid), devid, unescape(root), unescape(mp), mopt, extra, fstype, unescape(src), fsopt)
mounts.setdefault(devid, []).append(mount)
for devid, mnts in mounts.items():
# Skip single mounts
if len(mnts) <= 1:
continue
# Sort list to get the first mount of the device's root dir (if still mounted)
mnts.sort(key=lambda x: x.root)
src, *binds = mnts
# Print bind mounts
for bindmount in binds:
if src.root == bindmount.root:
srcstring = src.mountpoint
else:
srcstring = src.mountpoint+':/'+os.path.relpath(bindmount.root, src.root)
print('{0} -> {1.mountpoint} ({1.mountoptions})'.format(srcstring, bindmount))
unset DONE1FSES
FSES=$(findmnt -vUPno SOURCE,FSROOT,TARGET,MAJ:MIN)
FSES=${FSES//MAJ:MIN/MAJ_MIN}
while read SEARCH1FS
do
unset DONE2FSES
eval "$SEARCH1FS"
SEARCH1SOURCE=$SOURCE
SEARCH1FSROOT=$FSROOT
SEARCH1TARGET=$TARGET
SEARCH1MAJMIN=$MAJ_MIN
FS1WASHANDLED=0
while read DONE1FS
do
if [[ $DONE1FS == $MAJ_MIN ]]
then
FS1WASHANDLED=1
break
fi
done < <(echo "$DONE1FSES")
if [[ ($SEARCH1FSROOT == /) && ($FS1WASHANDLED == 0) ]]
then
DONE1FSES+=$MAJ_MIN$'\n'
while read SEARCH2FS
do
eval "$SEARCH2FS"
SEARCH2SOURCE=$SOURCE
SEARCH2FSROOT=$FSROOT
SEARCH2TARGET=$TARGET
SEARCH2MAJMIN=$MAJ_MIN
FS2WASHANDLED=0
while read DONE2FS
do
if [[ $DONE2FS == $SEARCH2FS ]]
then
FS2WASHANDLED=1
break
fi
done < <(echo "$DONE2FSES")
if [[ ($SEARCH1MAJMIN == $SEARCH2MAJMIN) && ($SEARCH1TARGET != $SEARCH2TARGET ) && ($FS2WASHANDLED == 0 ) ]]
then
DONE2FSES+=$SEARCH2FS$'\n'
echo "$SEARCH1TARGET$SEARCH2FSROOT --> $SEARCH2TARGET"
fi
done < <(echo "$FSES")
fi
done < <(echo "$FSES")
এটি অন্যান্য সন্ধানকারী উত্তরের মতো, তবে বিন্যাসের বিষয়টি এড়িয়ে চলে।
সমস্ত জমা জমা দেখাতে:
findmnt --kernel -n --list | grep '\['
Ext4 প্রকারের ফাইল সিস্টেমের সমস্ত জমাগুলি দেখানোর জন্য:
findmnt --kernel -t ext4 -n --list | grep '\['
সাব-মাউন্টগুলি বাদ দিয়ে সমস্ত মাউন্টগুলি দেখানোর জন্য:
findmnt --kernel -n --list | grep -v '\['
সাব-মাউন্টগুলি বাদ দিয়ে ext4 প্রকারের সমস্ত ফাইল সিস্টেমের প্রদর্শন করতে:
findmnt --kernel -t ext4 -n --list | grep -v '\['
"-N" শিরোনামগুলি সরায় এবং "--list" "ট্রি" ফর্ম্যাটটির লাইনগুলি সরিয়ে দেয়।
দেবিয়ান প্রসারিত পরীক্ষিত।
findmnt | fgrep [
যেমন এখানে ব্যাখ্যা ।