সন্ধানকারী কীভাবে বাঁধাই মাউন্টগুলি তালিকাভুক্ত করতে সক্ষম?


11

প্রচুর লোক বলে চলে যে লিনাক্স বাইন্ড মাউন্টগুলির তথ্য রাখে না, সুতরাং তাদের এবং তাদের উত্সগুলির তালিকা পাওয়ার কোনও উপায় নেই। এখানে কিছু উদাহরন:

  • এখানে একটি মন্তব্য থেকে :

    আইআইআরসি এই তথ্য কোথাও রাখা হয় না: পরে mount --bindদুটি অনুলিপি সমান হয়, অন্যটির চেয়ে বেশি "আসল" থাকে না। সর্বোপরি কোনও অরিজিনাল থাকতে পারে যদি আপনি ইতিমধ্যে আনমাউন্ট করা হয় /mnt

  • এই সাইটে একটি উত্তর থেকে :

    মাউন্ট কমান্ডগুলি কী মাউন্টগুলি আবদ্ধ ছিল তা মনে রাখার একমাত্র উপায় হ'ল মাউন্ট কমান্ডের লগ /etc/mtab। একটি বাইন্ড মাউন্ট অপারেশন বাইন্ড মাউন্ট অপশন দ্বারা নির্দেশিত হয় (যার ফলে ফাইল সিস্টেম ধরণের উপেক্ষা করা যায়)। তবে মাউন্ট কেবলমাত্র বিকল্প সিস্টেমের সেটগুলির সাথে মাউন্ট করা ফাইল সিস্টেমগুলি তালিকাভুক্ত করার বিকল্প নেই।

  • থেকে একটি ডেবিয়ান বাগ রিপোর্ট :

    এটা ইচ্ছাকৃত। উভয় মাউন্ট পয়েন্ট সমস্ত উপায়ে সম্পূর্ণ সমান তাই কার্নেল পৃথক করার জন্য কোনও পতাকা রাখে না।

উপরেরটি যদিও বাজে কথা। সরঞ্জামটি findmntবাঁধার মাউন্টগুলির উত্স পাথগুলি তালিকাবদ্ধ করতে সক্ষম হয় (আকারে device[source-path]; আমি এটিকে কেবল উত্স পাথের তালিকায় আনার চেষ্টা করছি না ডিভাইসটি)। যদি লিনাক্স কার্নেলটি একটি বাইন্ড মাউন্টটি বজায় রাখতে হয় তবে সেই তথ্যটি কোথাও সংরক্ষণ করতে হবে , অন্যথায় এটি জানতে পারে না যে /homeএটি আবদ্ধ /users। তাহলে এই তথ্য কোথায়? এটি কি র‌্যামের কিছু অস্পষ্ট অঞ্চলে সংরক্ষণ করা হয়েছে? কি findmntমধ্যে চেহারা /procকোথাও?


আপনি কোন সংস্করণটি findmntচালাচ্ছেন এবং কোন বিকল্পগুলি আপনি এটি দিচ্ছেন? খনি এটির মতো প্রিন্ট করে না এবং উত্স কোডটি দেখে এটি ব্যবহার _PATH_PROC_MOUNTINFOকরছে বলে মনে হচ্ছে /proc/self/mountinfoযা এটির মধ্যে এই তথ্য নেই।
ব্র্যাচলে

ঠিক আছে আমার ধারণা /proc/self/mountinfoতুলনামূলকভাবে সম্প্রতি পুনর্গঠন করা হয়েছিল। আমি আমার RHEL6 মেশিনে ছিলাম যার আগে পথের তথ্য ছিল না তবে আমার RHEL7 মেশিনটি করেছে এবং আপনার লিঙ্কে উল্লিখিত হুইজিও তা করে does
ব্র্যাচলে

এটি বাজে কথা নয়: এটি পুরানো কার্নেলের সাথে সত্য ছিল, তবে নতুন কার্নেলগুলি তথ্য ট্র্যাক করে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস তারপরে যদি কোনও ডিরেক্টরিতে অন্য একটি ডিরেক্টরিতে মাউন্ট করা তথ্য ট্র্যাক না করা হয় তবে কীভাবে বাঁধাই মাউন্ট চলতে পারে?
মেলাব

@ মেলাব প্রকৃতপক্ষে, আপনি যদি এটি বেঁধে রাখা মাউন্টটিকে সন্ধান না করেন তবে বাঁধাই মাউন্টের পক্ষে আরও সহজ হওয়া সহজ। কখন /dev/Aমাউন্ট করা হয় /Bএবং আপনি যখন করেন mount --bind /B /C, পুরানো কার্নেলগুলি কেবল মনে রাখে /B → /dev/Aএবং /C → /dev/A, তারা /Bএবং এর মধ্যে কোনও সম্পর্ক মনে রাখে না /C। সুতরাং আনমাউন্টিংয়ের /Bস্বাভাবিকভাবে কোনও প্রভাব নেই /C। নতুন কার্নেলগুলি মনে করে যে /Cএটি একটি বাঁধার মাউন্ট ছিল /B, তবে এমন কোনও উপায়ে যা আনমাউন্ট /Cকরা থাকলে কাজ চালিয়ে যাওয়া থেকে বিরত রাখে না /B, আমি ঠিক জানি না।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

উত্তর:


12

আপনি কিছুটা ভুল বুঝেছেন; অনুমতি, পতাকা ইত্যাদির ক্ষেত্রে দুটি মাউন্ট পয়েন্ট সমান হয় কারণ বাঁধাই কার্যকরভাবে এক পাথ থেকে অন্য পথে প্রবেশের পুনঃনির্দেশ করে। তবে তারা এখনও স্বতন্ত্র

যদি আপনি তাকান তবে /proc/self/mountinfoআপনি এই প্রক্রিয়াটির জন্য মাউন্ট ওয়ার্ল্ডের কার্নেল দৃশ্য দেখতে পাবেন (নেমস্পেসগুলি জিনিসগুলিকে আরও জটিল করে তোলে; মাউন্ট টেবিলের কেবল একটি দৃশ্য নেই)।

man 5 procএই ফাইলটির ফর্ম্যাট ব্যাখ্যা করবে, তবে আপনি গাছের শ্রেণিবিন্যাস দেখতে পাবেন এবং যেখানে বাঁধাইয়ের মাউন্টগুলিতে তাদের "পিতামাতার" রয়েছে। এটি সেই ফাইল যা findmntপার্স করে।


9

লিনাক্স কোন মাউন্টটি একটি বাইন্ড মাউন্ট ছিল সে সম্পর্কে তথ্য রাখে না । এটি বাইন্ড মাউন্টগুলি সহ সমস্ত মাউন্টগুলির তথ্য রাখে না ।

এটি হার্ড লিঙ্কগুলির সাথে বেশ মিল। ফাইল-সিস্টেমের মতো ফাইল সিস্টেমে মাউন্টস লিঙ্কগুলি ইনোডগুলিতে ফাইলের নামের লিঙ্ক। কেবলমাত্র পার্থক্যগুলি হ'ল মাউন্টগুলিতে প্রতি মাউন্টপয়েন্ট পয়েন্ট রয়েছে এবং ফাইল সিস্টেমের মূলের পরিবর্তে টার্গেট ফাইল সিস্টেমের একটি সাব-ডাইরেক্টরির উল্লেখ করতে পারে।

আপনি যখন একটি হার্ড লিঙ্ক তৈরি করেন তখন ফাইল সিস্টেমটি সংরক্ষণ করে না কোন ফাইলের নামটি আসল ছিল এবং কোনটি লিঙ্ক। উভয়ই একই ইনোডকে বোঝায়। যদি আপনি মূল ফাইলটিকে লিঙ্কযুক্ত করেন তবে আপনি সরাসরি দ্বিতীয় ফাইলের নাম দিয়ে ফাইলটি তৈরি করেছেন যদি পরিস্থিতি আলাদা হয় না।

বাঁধার মাউন্টগুলিতে ফিরে যান: কার্নেলটি একটি টেবিল রাখে যাতে ফাইল সিস্টেম থাকে (একটি মেজর: গৌণ সংখ্যা জোড় দ্বারা চিহ্নিত), মাউন্টপয়েন্ট, ফাইল সিস্টেমের মূলের সাথে সম্পর্কিত কিছু পথ এবং কিছু পতাকা। আপনি এই তালিকাটি দেখে এ্যাক্সেস করতে পারেন /proc/self/mountinfo। (নাম স্টিফেন-হ্যারিস উল্লিখিত হিসাবে, নামস্থানগুলি জড়িত থাকলে এটি আরও জটিল হয়ে ওঠে)। findmntএই তালিকাটি বিশ্লেষণ করে।

যদি আপনার মূলটি মেজরের /dev/sda1সাথে থাকে: নাবালক 8:1এবং আপনি চালান mount --bind /a /b /proc/self/mountinfoতবে এর অনুরূপ লাইন থাকবে:

1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-ro

যদি আপনার /homeমেজরদের /dev/sda2সাথে থাকে: নাবালিকা 8:2এবং আপনি চালান তবে mount --bind /home /usersএটি দেখতে এরকম দেখাবে:

1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:2 / /home rw - ext4 /dev/sda2 rw
3 1 8:2 / /users rw - ext4 /dev/sda2 rw

আপনার প্রশ্নের প্রাসঙ্গিক কলামগুলি তৃতীয়, চতুর্থ এবং পঞ্চম। এগুলি ফাইল সিস্টেম আইডি ( আসল ফাইল সিস্টেমগুলির জন্য এটি ডিভাইস মেজর হিসাবে একই: গৌণিক; tmpfs এর মতো ভার্চুয়াল ফাইল সিস্টেমগুলির জন্য এটি [0: কাউন্টার ]), ফাইল সিস্টেমের মূলের সাথে সম্পর্কিত পথ যা মাউন্টপয়েন্টের সাথে আবদ্ধ (সাধারণত / স্বাভাবিকের জন্য) মাউন্টগুলি, বাইন্ড মাউন্টগুলির জন্য কিছু হতে পারে) এবং মাউন্টপয়েন্ট।
অবশিষ্ট কলামগুলির অর্থের জন্য লিনাক্স কার্নেল ডকুমেন্টেশন দেখুন

findmntফাইল সিস্টেমের মূলের তুলনায় উত্সের পথটিকে "FSROOT" বলে। আপনি findmnt -o TARGET,FSROOTএটি পেতে ব্যবহার করতে পারেন । আপনি যদি পরম উত্সের পথটি চান তবে আপনার /proc/self/mountinfoনিজের নিজের বিশ্লেষণ করতে হবে এবং একই ফাইল সিস্টেমের জন্য মাউন্টগুলির তথ্য একত্রিত করতে হবে।

আরও তথ্যের জন্য "কেবলমাত্র বাঁধাইয়ের তালিকাগুলির তালিকা করুন" এ আমার উত্তর দেখুন ।


যদি এর /proc/self/mountinfoমতো লাইন থাকতে পারে 2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-roতবে লিনাক্স অবশ্যই বাইন্ড মাউন্টগুলি সম্পর্কে কিছু তথ্য রাখে
মেলাব

না। আমার দ্বিতীয় উদাহরণ দেখুন। কোন ফাইল সিস্টেমটি মাউন্ট করা হয়েছিল এবং ফাইল সিস্টেমের মূলের সাথে সম্পর্কিত কোন পাথটি মাউন্ট করা হয়েছিল তা তথ্য রাখে । তাই জন্য mount --bind /home/melab /mntফলে লাইন নিম্নলিখিত নির্ভর করে এর যার উপর কোন অনুরূপ হতে পারে /homeএবং /home/melab: একটি mountpoint হয় 3 1 8:1 /home/melab /mnt rw - ext4 /dev/sda1 rw, 3 1 8:2 /melab /mnt rw - ext4 /dev/sda2 rw,3 1 8:3 / /mnt rw - ext4 /dev/sda3 rw
cg909

এটি সত্য যে /চতুর্থ কলামে আলাদা কিছু প্রায়শই একটি বাঁধাইয়ের মাউন্টকে নির্দেশ করে। তবে এটি একটি বিটিআরএফএস সাবভলিউমও হতে পারে।
cg909

হয় /dev/sda3এ মাউন্ট হওয়ার কথা /home/melab?
মেলাব

হ্যাঁ. আমার উদাহরণে আমি ব্যবহৃত /dev/sda1যেমন /, /dev/sda2যেমন /homeএবং /dev/sda3হিসাবে/home/melab
cg909
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.