কীভাবে কার্নেলটি মূল পার্টিশনটি মাউন্ট করে?


29

আমার প্রশ্নটি একটি পৃথক / বুট পার্টিশন থেকে লিনাক্স সিস্টেম বুট করার বিষয়ে। যদি বেশিরভাগ কনফিগারেশন ফাইলগুলি পৃথক / পার্টিশনে অবস্থিত থাকে তবে বুট করার সময় কার্নেলটি সঠিকভাবে এটি কীভাবে মাউন্ট করবে?

এ সম্পর্কে যে কোনও বিবরণ দুর্দান্ত হবে। আমার মনে হচ্ছে আমি কিছু বেসিক মিস করছি। আমি বেশিরভাগ অপারেশন প্রক্রিয়া এবং ক্রম নিয়ে উদ্বিগ্ন।

ধন্যবাদ!

সম্পাদনা: আমি মনে করি যা রুট কার্নেল প্যারামিটারে ব্যবহৃত হয় সেই ফাইল ফাইলের লাইনের সাথে আমার যা চাওয়ার দরকার ছিল তা আরও বেশি। উদাহরণস্বরূপ, বলুন যে আমি আমার রুট পরমকে root = / dev / sda2 হিসাবে দেব give কার্নেলের / / sda2 ফাইলের ম্যাপিং কীভাবে থাকে?


যদিও নিচের লোকেরা আরআরআর্ডের আওতাভুক্ত রয়েছে, কেন কেন আরআরআরডি ব্যবহার করা হবে তা নিয়ে খুব কম আলোচনা হচ্ছে। আমার ধারণাটি হ'ল কারণ দেবিয়ানের মতো বিতরণগুলি একই আর্কিটেকচারের বিভিন্ন মেশিনে একটি কার্নেল ব্যবহার করতে চায় তবে সম্ভবত ব্যাপকভাবে বিভিন্ন হার্ডওয়্যার রয়েছে। কার্নেল মডিউলগুলির মাধ্যমে হার্ডওয়্যার সমর্থন মডিউলাইজ করে এটি সম্ভব হয়েছে। Initrd বুট করার জন্য খুব বেশি হার্ডওয়্যার সমর্থনের প্রয়োজন হয় না, এবং এটি একবার হয়ে গেলে, এটি এগিয়ে যাওয়ার জন্য প্রয়োজনীয় হার্ডওয়্যার মডিউলগুলি লোড করে। এ সম্পর্কিত বিবরণ / সংশোধন প্রশংসা করা হয়।
ফাহিম মিঠা

/ মাউন্ট না করে আপনি প্রথমে মাউন্ট / বুট করতে পারবেন না, যেহেতু / ছাড়া কোনও / বুট ডিরেক্টরি নেই।
psusi

উত্তর:


20

লিনাক্স প্রথমে একটি initrdর‌্যামডিস্ক দিয়ে বুট করে ( যেমন "INITial RamDisk" হিসাবে পরিচিত) /। এই ডিস্কটিতে আসল রুট পার্টিশন (যে কোনও ড্রাইভার এবং ফাইল-সিস্টেম মডিউলগুলি সহ প্রয়োজনীয়) সন্ধানের পক্ষে এটি পর্যাপ্ত রয়েছে। এটি রুটের পার্টিশনটিকে একটি অস্থায়ী মাউন্ট পয়েন্টে মাউন্ট করে initrd, তারপরে pivot_root(8)রুট এবং অস্থায়ী মাউন্ট পয়েন্টগুলি অদলবদল করার অনুরোধ জানায়, এডটিকে initrdসঠিক অবস্থানে রেখে umountআসল রুট ফাইল সিস্টেমটি চালু করে /


2
আপনার যদি এলএফএসের মতো কোনও আরআরডি না থাকে (লিনাক্সফ্রমস্ক্র্যাচ.অর্গ)?
মিঃ শিকাড্যান্স

@জনাব. শিক্যড্যান্স: এলএফএস কীভাবে কাজ করে তা পর্যবেক্ষণ না করে, আমি অনুমান করব যে তারা নিশ্চিত করে যে কার্নেলের মধ্যে প্রয়োজনীয় সমস্ত মডিউল সংকলিত রয়েছে (বা GRUB 2-র মাধ্যমে লোড করা হয়েছে, এটি সম্ভাবনা যথেষ্ট নতুন যে অনেক ডিস্ট্রিবিউশন এটি এখনও লক্ষ্য করে না) তাই এটি আসল রুট বিভাজন শুরু করতে পারেন।
গাইকোসর

4
@জনাব. Shickadance। এটি কেবল এলএফএস নয় যেটির কোনও আরআরডি নেই। যে কেউ তাদের নিজস্ব কার্নেল সংকলন করে তার কাছে একটি আরআরআরডিটি না ব্যবহার করার বিকল্প রয়েছে যা আমি জেন্টোর ক্ষেত্রে করি।
jonescb

1
@ ফাহিম: গ্রাব 2 মডিউলগুলি কার্নেল মডিউলগুলির মতো নয়। আমি গ্রাব 2 এর কার্নেল মডিউলগুলি লোড করার জন্য কিছু ক্ষমতা দেখছি, তবে একটি জিনিস আমি জানি না তা লিনাক্স কার্নেলের জন্য কাজ করবে বা কেবল * বিএসডি (যেখানে বুটলোডার লোডিং কার্নেল মডিউলগুলি স্বাভাবিক)। আমি সন্দেহ করি যে লোডযুক্ত মডিউলগুলির জন্য ঠিকানা মানচিত্রটি কোথায় খুঁজে পেতে হবে তা কার্নেলকে শেখানো দরকার এবং প্রত্যেককে গ্রুব 2 এ চলে যাওয়া দরকার (গ্রুব 1 এখনও কিছু বিতরণে স্ট্যান্ডার্ড)।
গাইকোসৌর

1
পাইভারট_রূটকে একটি নোংরা হ্যাক হিসাবে বিবেচনা করা হওয়ায়, আরআরআর্ডটি ডিগ্রামফ দ্বারা প্রতিস্থাপন করা হয়েছে।
psusi

41

প্রাচীন কালে, কার্নেলটি ডিভাইসটির মূল / অপ্রাপ্ত সংখ্যক সংখ্যক সংখ্যক ডিভাইসটি সনাক্ত করতে কঠোরভাবে কোডেড ছিল এবং কার্নেলের মধ্যে নির্মিত সমস্ত ডিভাইস ড্রাইভারের সূচনা করার পরে ডিভাইসটি মাউন্ট করেছিল। rdevউপযোগ এটা কম্পাইল না করেও কার্নেল ইমেজ শিকড় ডিভাইস সংখ্যা পরিবর্তন করতে ব্যবহার করা যেতে পারে।

অবশেষে বুট লোডারগুলি উপস্থিত হয়ে কার্নেলের কাছে একটি কমান্ড লাইন দিতে পারত। যদি root=আর্গুমেন্টটি পাস হয়ে যায় তবে এটি কার্নেলকে জানায় যে মানটিতে বিল্টের পরিবর্তে রুট এফএস ছিল। ড্রাইভারদের অ্যাক্সেসের প্রয়োজন ছিল যা এখনও কার্নেলের মধ্যে তৈরি করতে হয়েছিল। যখন আর্গুমেন্টটি /devডিরেক্টরিতে একটি সাধারণ ডিভাইস নোডের মতো দেখায় /devতবে রুট এফএস মাউন্ট করার আগে অবশ্যই কোনও ডিরেক্টরি নেই , সুতরাং কার্নেলটি সেখানে কোনও ডিভ নোড দেখতে পাবে না। পরিবর্তে, কিছু সুপরিচিত ডিভাইসের নামগুলি হার্ড-র কার্নেলে কোড করা হয়েছে যাতে স্ট্রিংটি ডিভাইস নম্বরটিতে অনুবাদ করা যায়। এ কারণে, কার্নেল এই জাতীয় জিনিসগুলি সনাক্ত করতে পারে /dev/sda1তবে বিদেশী জিনিসগুলির মতো /dev/mapper/vg0-rootবা ভলিউম ইউআইডি নয়।

পরে, initrdছবিতে এসেছিল। কার্নেলের সাথে, বুট লোডার initrdচিত্রটি লোড করবে , এটি ছিল এক ধরণের সংকোচিত ফাইল সিস্টেম ইমেজ (জিজেপড এক্সট 2 চিত্র, জিজিপড রোমফএস চিত্র, স্কোয়াশফগুলি শেষ পর্যন্ত প্রভাবশালী হয়ে উঠেছে)। কার্নেল এই চিত্রটিকে একটি র‌্যামডিস্কে ছড়িয়ে দিতে এবং র‌্যামডিস্কটিকে মূল এফএস হিসাবে মাউন্ট করবে। এই চিত্রটিতে বাস্তবের পরিবর্তে কিছু অতিরিক্ত ড্রাইভার এবং বুট স্ক্রিপ্ট রয়েছে init। এই বুট স্ক্রিপ্টগুলি হার্ডওয়্যার সনাক্ত করতে, রেইড অ্যারে এবং এলভিএমের মতো জিনিস সক্রিয় করতে, ইউআইডিগুলি সনাক্ত করতে, এবং আসল রুটটি অনুসন্ধানের জন্য কার্নেল কমান্ড লাইনটি পার্স করার জন্য বিভিন্ন কার্য সম্পাদন করে, যা এখন ইউআইডি, ভলিউম লেবেল এবং অন্যান্য উন্নত জিনিসগুলির দ্বারা নির্দিষ্ট করা যেতে পারে। তখনই বাস্তব রুট FS মাউন্ট /initrd, তারপর মৃত্যুদন্ড কার্যকর pivot_rootসিস্টেম কল কার্নেল swap 'র আছে /এবং/initrd, তারপরে /sbin/initআসল রুটে এক্সিকিউট করুন যা এরপরে আনমাউন্ট করবে /initrdএবং রামডিস্ককে মুক্ত করবে।

অবশেষে, আজ আমাদের আছে initramfs। এটি এর অনুরূপ initrd, তবে একটি র‌্যামডিস্কে লোড হওয়া একটি সংকুচিত ফাইল সিস্টেম চিত্রের পরিবর্তে এটি একটি সঙ্কোচিত সিপিও সংরক্ষণাগার। একটি tmpfs মূল হিসাবে মাউন্ট করা হয়, এবং সংরক্ষণাগারটি সেখানে বের করা হয়। ব্যবহার করার পরিবর্তে pivot_root, যা একটি মলিন হ্যাক হিসাবে গণ্য করা হয়, initramfsবুট স্ক্রিপ্ট বাস্তব রুট মাউন্ট /root, সমস্ত ফাইল তারপর, tmpfs রুট মোছার chrootমধ্যে /rootExec, এবং /sbin/init


1
Chroot পরে, tmpfs স্বয়ংক্রিয়ভাবে আনমাউন্ট করা হয়? এটি কি কেবল অদৃশ্য হয়ে যায়?
jiggunjer

@ জিগগুনজার, না, এটি এখনও রয়েছে, এটি কেবল ফাঁকা (/ মূল ডিরেক্টরিটি বাদ দিয়ে), এবং আর ব্যবহার করা হবে না।
psusi

আপনি উল্লেখ করেছেন যে মূল Fs এর প্রতিটি পুনরাবৃত্তি সম্পর্কে নতুন কিছু শিখেছি। দুর্দান্ত উত্তর!
jpaugh

3

আপনি যেমন জিজ্ঞাসা করছেন যে কার্নেলটি কীভাবে "ইত্যাদি" কনফিগারেশন ফাইলগুলিতে অ্যাক্সেস ছাড়াই মূল পার্টিশনটি "জানে" জানতে পারে।

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

ঐ কমাণ্ড লাইন অপশন সম্বন্ধে এক rootযেখানে আপনি রুট ফাইল সিস্টেম, অর্থাত্ নির্দিষ্ট করতে পারেন, root=/dev/sda1

যদি কার্নেল একটি আরআরআরডি ব্যবহার করে তবে বুটলোডার কার্নেলটি কোথায় রয়েছে তা জানার জন্য, বা একটি স্ট্যান্ডার্ড মেমোরি লোকেশনতে আরআরআরডি রাখার জন্য দায়বদ্ধ (আমার মনে হয়) - এটি আমার গুরুপ্লাগে অন্ততপক্ষে কাজ করে।

এটি নির্দিষ্ট করে না দেওয়া এবং তারপরে আপনার কার্নেল প্যানিকের তাত্ক্ষণিকভাবে অভিযোগ শুরু করার সাথে সাথে এটি কোনও মূল ফাইল সিস্টেম খুঁজে পাচ্ছে না এটি সম্পূর্ণভাবে সম্ভব।

কার্নেলের কাছে এই বিকল্পটি পাস করার অন্যান্য উপায়ও থাকতে পারে।


3
কোনও আরআরআরডি / ইনিরামফ নেই যখন এটি সঠিক ব্যাখ্যা, তবে ধাঁধাটির একটি অংশ এটি অনুপস্থিত। সাধারণত কার্নেল একটি ডিভাইস সনাক্ত করে যেমন /dev/sda1এটি কোনও ফাইল সিস্টেমে একটি প্রবেশিকা। আপনি একই ডিভাইসটি করতে cp -p /dev/sda1 /tmp/fooএবং /tmp/fooউপস্থাপন করতে পারতেন । কার্নেল কমান্ড লাইনে, কার্নেলটি অন্তর্নির্মিত পার্সার ব্যবহার করে যা সাধারণ ডিভাইস নামকরণ কনভেনশন অনুসরণ করে: sda1মানে প্রথম এসসিএসআই-জাতীয় ডিস্কের প্রথম পার্টিশন।
গিলস

@ গিলস এত আধুনিক কার্নেলগুলি এখনও ইউআইডি-র ভিত্তিতে ভলিউম মাউন্ট করতে পারবেন না? ছাড়া initrdবা initramfsআমি বলতে চাইছি এটি /dev/sdxফর্ম একটি "সরল" পার্টিশন হতে হবে ?
jiggunjer

1
@ জিগগুনজার আধুনিক ক্যানেলগুলি ইউইউডি দ্বারা ভলিউম অনুসন্ধানে সমর্থন করে। দেখুন init/do_mounts.c
গিলস

1

গ্রাব /bootপার্টিশনটি মাউন্ট করে এবং তারপরে কার্নেল চালায়। গ্রাবের কনফিগারেশনে এটি কার্নেলকে মূল ডিভাইস হিসাবে ব্যবহার করার কথা বলে tells

গ্রুবের উদাহরণস্বরূপ menu.lst:

kernel /boot/linux root=/dev/sda2

1

ক্যামন, গ্রুব "মাউন্ট" / বুট দেয় না, এটি কেবল 'মেনু.লস্ট' এবং কিছু মডিউল পড়ে, এটি লিনাক্স কার্নেলের অংশ নয়। আপনি যখন কার্নেলটি কল করবেন, আপনি রুট বিভাজনের সাথে একটি "রুট" যুক্তিটি পাস করবেন। সবচেয়ে খারাপ সময়ে, কার্নেল জানে যে ঠিক / বুট মাউন্ট করা হয়েছে (LOL)।

পরবর্তী: গাইকোসর ঠিক আছে, লিনাক্স সংকোচিত চিত্র বিন্যাসে প্রাথমিক র‌্যামডিস্ক ব্যবহার করে এবং তারপরে কল করে সত্যিকারের রুট ফাইল সিস্টেমটি মাউন্ট করে pivot_root। সুতরাং লিনাক্স কোনও চিত্র থেকে এবং তারপর আপনার স্থানীয় ডিস্ক ড্রাইভ থেকে চলতে শুরু করে।


1
গ্রাবের স্পষ্টতই গ্রুব 2-তে একটি ফাইল সিস্টেম 'মাউন্ট' করার ক্ষমতা রয়েছে। অবশ্যই, এটির সাথে / সক্ষম / এটি সক্ষম সমস্তই একটি স্ট্রাইপ বা অন্য স্ট্রিপের বুটেবল কার্নেলগুলির সন্ধান করা, তবে এটি এখনও মাউন্ট। এছাড়াও, আপনার কার্নেলটি মডিউল হিসাবে আপনার হার্ড ড্রাইভের জন্য অত্যন্ত গুরুত্বপূর্ণ ড্রাইভার সংকলিত না করা অবধি লিনাক্সের জন্য আরআরআরডিডের প্রয়োজন হয় না ।
শাদুর

5
ibm.com/developerworks/linux/library/l-linuxboot এটি বুট করার সময় লিনাক্স কার্নেল কী করে তার একটি মোটামুটি সংক্ষিপ্তসার
jsbillings

2
@ শাদুর, মাউন্ট ম্যানপেজ থেকে : ইউনিক্স সিস্টেমে অ্যাক্সেসযোগ্য সমস্ত ফাইলগুলি একটি বড় গাছে সাজানো হয়, ফাইলের হায়ারার্কি, / এ মূলযুক্ত file এই ফাইলগুলি বেশ কয়েকটি ডিভাইসে ছড়িয়ে যেতে পারে। মাউন্ট কমান্ডটি কোনও ডিভাইসে পাওয়া ফাইল সিস্টেমকে বড় ফাইল ট্রিতে সংযুক্ত করতে কাজ করে। - যেহেতু GRUB দ্বারা ব্যবহৃত ফাইল সিস্টেমগুলি ফাইলের স্তরক্রমের সাথে সংযুক্ত নয়, এটি মাউন্ট হচ্ছে না ।
ডি

1
@ শাদুর, বিটিডাব্লু: এটি স্পষ্টতই যে আরআরআরডিটি অন্য একটি রুট ফাইল সিস্টেম হিসাবে প্রয়োজনীয় নয়, তবে এটি সাধারণত ছোট বুট-টাইম রুট হিসাবে ব্যবহৃত হয়, যেহেতু কার্নেল বুট করার জন্য প্রয়োজনীয় লোড করে, বুট করে এবং শেষ পর্যন্ত সমস্ত কিছু লোড করে দেয়।
ডি

1
@ d4rio এগুলি গ্রুব দ্বারা চালিত হয়েছে, লিনাক্স নয় - যখন আপনি গ্রাবকে কেবল একটি বুটলোডার না করে তার নিজের একটি মাইক্রোকার্নেল ওএস হিসাবে বিবেচনা করেন তখন তা বোঝা সহজ হয়।
শাদুর

1

বুট লোডার, এটি গ্রাব বা লিলো বা যে কোনও কিছু হোক না কেন, কার্নেলটিকে root=পতাকাটির সাথে কোথায় দেখতে হবে তা জানায় এবং কার্নেলটি initrdবুট করার আগে optionচ্ছিকভাবে মেমরিতে প্রাথমিক র‌্যামডিস্কটি লোড করে।

এর পরে কার্নেলটি তার হার্ডওয়্যার এবং ডিভাইস ড্রাইভারদের লোড করে, পরীক্ষা করে এবং এটি যা দেখতে পারে তার জন্য সিস্টেমটি ঘিরে দেখে (আপনি টাইপ করে এই ডায়াগনস্টিক তথ্যটি পর্যালোচনা করতে পারেন dmesg ; আজকাল এটি সম্ভবত দেখতে খুব দ্রুত স্ক্রোল করে) তারপরে উল্লিখিত পার্টিশনটি মাউন্ট করার চেষ্টা করে root=প্যারামিটার।

যদি একটি এনআরআরডি উপস্থিত থাকে তবে এটি প্রথমে মাউন্ট করা হয় এবং এতে থাকা কোনও মডিউল / ডিভাইস ড্রাইভার রুট ফাইল সিস্টেমটি মাউন্ট করার আগে লোড করে এবং প্রোব আউট করা হয়। এইভাবে আপনি নিজের হার্ড ড্রাইভের ড্রাইভারগুলি মডিউল হিসাবে সংকলন করতে পারেন এবং এখনও বুট করতে সক্ষম হবেন।

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