আপনি যখন সামগ্রীগুলির সাথে একটি বিদ্যমান ফোল্ডারটি 'মাউন্ট ওভার' করবেন তখন কী হবে?


80

এখনই /tmpএটিতে কিছু অস্থায়ী ফাইল রয়েছে। আমি যখন আমার হার্ড ড্রাইভ ( /dev/sdc1) এর উপরে মাউন্ট করি তখন আমি হার্ড ড্রাইভে /tmpথাকা ফাইলগুলি দেখতে পাই। /tmpআমার হার্ড ড্রাইভটি যখন মাউন্ট করা হয় তখন আসল সামগ্রীটির কী ঘটে ? /tmpহার্ড ড্রাইভ যখন মাউন্ট করা হচ্ছে তখন এর আসল সামগ্রীতে আর / ডাব্লু অপারেশন করা সম্ভব ?

python@lanix / $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       286G   43G  229G  16% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.8G  4.0K  3.8G   1% /dev
tmpfs           766M  1.4M  765M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.8G   38M  3.8G   1% /run/shm
none            100M   24K  100M   1% /run/user
/dev/sdb1       7.5G  2.7G  4.9G  35% /mnt
/dev/sdc1       932G  242G  691G  26% /tmp

উত্তর:


117

আমার হার্ড ড্রাইভটি মাউন্ট করা হলে / টিএমপি-এর আসল সামগ্রীটির কী হবে?

বেশ কিছু না। এগুলি কেবল দৃশ্য থেকে লুকানো রয়েছে, সাধারণ ফাইল সিস্টেম ট্র্যাভারসালের মাধ্যমে পৌঁছনীয় নয়।

হার্ড ড্রাইভ মাউন্ট করার সময় / টেম্পের আসল সামগ্রীতে কী r / w ক্রিয়াকলাপ করা সম্ভব?

হ্যাঁ. আপনার "আসল" এর ভিতরে যে ফাইলগুলি খোলা ফাইল হ্যান্ডেলগুলি ছিল /tmpসেগুলি সেগুলি ব্যবহার করতে সক্ষম হবে। আপনি অন্য কোথাও বাইন্ড-মাউন্ট করে /অন্য কোথাও "পুনরায় প্রদর্শিত" করতে পারেন ।

# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp  

এখানে যা ঘটছে তার জন্য আরও ভাল (আমি আশা করি) অনুভূতি পেতে আপনি চালাতে পারেন এমন একটি সামান্য পরীক্ষা।

দ্রষ্টব্য: এটি পুরোপুরি সঠিক হওয়ার চেষ্টা বা সত্যিকার অর্থে কী ঘটছে তার সম্পূর্ণ বিবরণ নয়। আপনাকে বড় ছবি দেওয়ার জন্য যথেষ্ট সঠিক হওয়া উচিত।

আমি meআমার মেশিনে ডেকে একটি ব্যবহারকারী এবং তার বাড়িতে একটি এলোমেলো ডিরেক্টরি তৈরি করেছি যার মধ্যে একটি ফাইল রয়েছে:

me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls  
some_file
me@home $ cat some_file 
hello

এই মুহুর্তে, অস্বাভাবিক কিছু নয় - এটি কেবল একটি সরল ফাইল সহ একটি সরল ডিরেক্টরি। আমি সেই অধিবেশনটিকে ঠিক সেইভাবেই খোলা রাখি, এর সাথে cwdপরীক্ষার ডিরেক্টরিটি রয়েছে।

রুট হিসাবে, আমি একটি ছোট ফাইল সিস্টেম তৈরি করে এটিকে মাউন্ট করব /home/me/tmp

root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s

root@home # mkfs -t ext2 ./fs 
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done

root@home # mount ./fs /home/me/tmp

আমি তারপরে একটি নতুন টার্মিনালটি খুলি meএবং চারপাশটি দেখি:

me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied

সুতরাং, আমরা তৈরি করা ফাইলটি পরিষ্কারভাবে নেই। lost+foundডিরেক্টরি একটি EXT ফাইলসিস্টেম রুট এর পরিচায়ক। এবং আমি লেখার অনুমতি হারিয়েছি, সুতরাং এটি স্পষ্টতই মূল ডিরেক্টরি নয়।

প্রথম meসেশনে ফিরে আসুন , আসুন এটি কীভাবে বিশ্ব দেখায় তা দেখুন:

me@home $ echo something else > other_file

লেখার সমস্যা নেই।

me@home $ cat some_file other_file 
hello
something else

মূল ফাইলটি এখনও আছে, ইস্যু ছাড়াই নতুন ফাইল তৈরি হয়েছে।

তাই না? কি হচ্ছে?

প্রথম অধিবেশনটি ডিরেক্টরিটিতে প্রবেশ করানোর আগে এটিতে অন্য একটি ফাইল সিস্টেম মাউন্ট করে ওভারলেলে যায়। এই মাউন্ট ক্রিয়াটি মোটেও মূল ফাইল সিস্টেমকে প্রভাবিত করে না। শেল প্রক্রিয়াটির মূল ফাইল সিস্টেমে ডিরেক্টরিতে সঠিক বৈধ হ্যান্ডেল রয়েছে এবং এটির সাথে ইন্টারঅ্যাক্ট করা চালিয়ে যেতে পারে। এটা ধরণের প্রায় চালাচ্ছে তলদেশে গালিচা মাউন্ট পয়েন্ট।

দ্বিতীয় অধিবেশনটি ডিরেক্টরিতে প্রবেশ করল মাউন্টটি শুয়ে থাকার পরে। সুতরাং এটি নতুন, খালি ফাইল সিস্টেম দেখে। এবং সিসাদমিন অনুমতিগুলি বিরক্ত করেছিল, সুতরাং এটি অনুরোধ করা স্থানটি ব্যবহার করতে পারে না ... এটি ঠিক করতে দিন।

root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls 
lost+found  some_file
me@home #2 $ cat some_file 
bye bye

গালিচা নীচে থেকে সেশন 1 পালাতে পারে? (এটা মরিয়া হয়ে উঠছে।)

নিশ্চিত! সেশন 1 যদি ফাইল সিস্টেমের গাছটিকে মাউন্ট থেকে সরিয়ে নিয়ে যায় তবে এটি হ্যান্ডেলটি ভিতর থেকে হারিয়ে ফেলবে এবং অন্য সবার মতো মাউন্টটিকে অনুসরণ করবে।

me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory

# 2 সেশনের মত একই দৃষ্টিভঙ্গি, আমরা স্বাভাবিক অবস্থায় ফিরে আসছি।

কিন্তু আপনি কীভাবে জানবেন যে ফাইলগুলি অদৃশ্য হয়নি? আর কারও খোঁজ নেই!

এটি সেই মুহুর্তগুলির একটি যেখানে বাঁধাইয়ের মাউন্টগুলি কার্যকর হয়ে যায়। তারা আপনাকে ইতিমধ্যে মাউন্ট করা ফাইল সিস্টেমটি অন্য কোথাও মাউন্ট করতে দেয়।

me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind

(হ্যাঁ, আপনি একটি ফাইল সিস্টেম "নিজের ভিতরে" বাঁধতে পারেন C দুর্দান্ত কৌশল, তাই?)

me@home $ ls bind/tmp
other_file  some_file
me@home $ cat bind/tmp/*
something else
hello

সুতরাং তারা অবশ্যই আছে, কর্মের জন্য প্রস্তুত। এটি কেবল সহজ যে তারা তাদের আসল অবস্থানে দৃশ্যমান / পৌঁছনীয় নয়, মাউন্টটি তাদেরকে সাধারণ ডিরেক্টরি ট্র্যাভারসাল থেকে আড়াল করে।


আমি আপনাকে এটির সাথে চারপাশে খেলতে উত্সাহিত করি, একবার আপনি "কৌশল" বাজানো হচ্ছে তা বুঝতে পেরে সত্যিই জটিল নয়। এবং একবার আপনি এটি পেয়ে গেছেন ™, আরও বেশি কার্পেট টানার জন্য ইউনিয়ন ফাইল সিস্টেমগুলি দেখুন :-)

তবে একটি নোট: বুট প্রক্রিয়াটি শেষ হয়ে গেলে মাউন্ট /tmpবা /var(বা কোনও মূল ওএস ডিরেক্টরিগুলির কোনও) সত্যই ভাল ধারণা নয়। এই ডিরেক্টরিগুলিতে প্রচুর অ্যাপ্লিকেশন স্থিতি ছেড়ে দেয় এবং আপনি যদি তাদের চারপাশে মাউন্ট গেম খেলেন তবে গুরুতরভাবে বিভ্রান্ত হতে পারেন।


4
এটি একটি দুর্দান্ত উত্তর - আপনি যা চেয়েছিলেন তা আপনি উপরে এবং অতিক্রম করেছেন। বাইন্ড-মাউন্টের ধারণাটিও বেশ দুর্দান্ত! বিস্তারিত উত্তর দেওয়ার জন্য ধন্যবাদ। চিয়ার্স।
ব্যবহারকারী

11
রহস্যজনকভাবে ডিস্কের স্থান হারাতে এটি খুব সাধারণ উপায়। একটি স্টার্টআপ স্ক্রিপ্টের যে কোনও কারণে যদি মাউন্ট ব্যর্থ হয় তবে রুট ফাইল সিস্টেমের ডিরেক্টরিতে ডেটা লেখা যেতে পারে। যদি পুনরায় চালু করার চেষ্টা করা হয় তবে মাউন্টটি সফল হতে পারে এবং সম্ভবত কেউই খেয়াল করবে না (উদাহরণস্বরূপ, যদি ফাইল সিস্টেমে tmp ফাইল বা লগ থাকে) তবে এটি স্থান খায়, সম্ভবত অনেক কিছু।
ড্যান শেপার্ড 19

2
@ ড্যানশেপার্ড এটি আমার মাউন্ট পয়েন্টগুলি chmod 000 সেট করা পছন্দ করার এক কারণ Also
জ্যান লিংস

আপনার কাছে মাউন্ট -bind গেল /home/meউপর /home/me"বেঁধে" ফোল্ডারে পরিবর্তে? অর্থাৎ কার্পেটের উপরে একটি অন্য গালিচা রাখুন। নাকি আপনাকে fsপ্রথমে আনমাউন্ট করতে হবে ?
jiggunjer

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