লিনাক্স কীভাবে 'ইআরআরডি' চিত্রটি লোড করে?


13

আমি বুটিং প্রক্রিয়াটি বোঝার চেষ্টা করেছি, তবে কেবল একটি জিনিস যা আমার মাথার উপরে চলেছে ..

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

প্রাথমিক র‌্যামডিস্ক (যাকে আরডিডিস্ক বা আরআরআরডিও বলা হয়) উপরে বর্ণিত সমস্যাগুলি হুবহু সমাধান করে। লিনাক্স কার্নেলটি একটি ছোট ফাইল সিস্টেম একটি র‍্যাম ডিস্কে লোড করা এবং আসল রুট ফাইল সিস্টেম মাউন্ট করার আগে সেখানে প্রোগ্রাম চালানোর বিকল্প সরবরাহ করে। আরআরআরডি লোডিং বুট লোডার (GRUB, LILO, ইত্যাদি) দ্বারা পরিচালিত হয়। বুট মাঝারি থেকে ডেটা লোড করার জন্য বুট লোডারগুলির কেবল BIOS রুটিন প্রয়োজন। যদি বুট লোডার কার্নেলটি লোড করতে সক্ষম হয় তবে এটি প্রাথমিক র‌্যামডিস্কটিও লোড করতে পারে। বিশেষ ড্রাইভার প্রয়োজন হয় না।

যদি / বুটটি পৃথক পার্টিশন না হয় তবে / পার্টিশনে উপস্থিত থাকে, তবে কি 'initrd' চিত্র এবং কার্নেল চিত্রটি অ্যাক্সেস করার জন্য বুট লোডারকে এসসিএসআই ড্রাইভারের প্রয়োজন হবে না? আপনি যদি সরাসরি চিত্রগুলি অ্যাক্সেস করতে পারেন তবে আমাদের কেন এসসিএসআই ড্রাইভারের প্রয়োজন হবে ??

উত্তর:


20

Nighpher, আমি আপনার প্রশ্নের উত্তর দিতে চেষ্টা করব, কিন্তু বুট প্রক্রিয়ার একটি আরো ব্যাপক বর্ণনার জন্য, চেষ্টা আইবিএম নিবন্ধ

ঠিক আছে, আমি ধরে নিচ্ছি যে আপনি GRUB বা GRUB2 কে আপনার বুটলোডার হিসাবে ব্যাখ্যার জন্য ব্যবহার করছেন। প্রথমে, যখন বিআইওএস আপনার ডিস্কটি বুটলোডার লোড করার জন্য অ্যাক্সেস করে, তখন এটি ডিস্ক অ্যাক্সেসের জন্য এর অন্তর্নির্মিত রুটিনগুলি ব্যবহার করে, যা বিখ্যাত 13 ঘন্টা বাধায় সংরক্ষণ করা হয়। বুটলোডার (এবং সেটআপ পর্যায়ে কার্নেল) ডিস্ক অ্যাক্সেস করার সময় সেই রুটিনগুলি ব্যবহার করে। নোট করুন যে BIOS প্রসেসরের রিয়েল মোড (16 বিট) মোডে চলে, সুতরাং এটি 2 ^ 20 বাইটের বেশি র্যামের ঠিকানা করতে পারে না (2 ^ 20 নয় 2 address 16 কারণ রিয়েল মোডে প্রতিটি ঠিকানা সেগমেন্ট_এড্রেস * 16 + অফসেট সমন্বিত) যেখানে বিভাগের ঠিকানা এবং অফসেট উভয়ই 16-বিট, http://en.wikedia.org/wiki/X86_memory_segmentation দেখুন )। সুতরাং, এই রুটিনগুলি 1 এমআইবি র‍্যামের বেশি র‍্যাম অ্যাক্সেস করতে পারে না, এটি একটি কঠোর সীমাবদ্ধতা এবং একটি বড় অসুবিধা।

বিআইওএস এমবিআর থেকে বুটলোডার কোডটি লোড করে - আপনার ডিস্কের প্রথম 512 বাইট এবং এটি কার্যকর করে। আপনি যদি GRUB ব্যবহার করছেন তবে সেই কোডটি GRUB পর্যায় 1। এই কোডটি GRUB পর্যায়ে 1.5 লোড করে, যা ডিস্ক স্পেসের প্রথম 32 কিবিতে অবস্থিত, ডস সামঞ্জস্যতা অঞ্চল বা ফাইল সিস্টেমের একটি নির্দিষ্ট ঠিকানা থেকে হয়। এটি করার জন্য ফাইল সিস্টেমটি বোঝার দরকার নেই, কারণ 1.5 ম পর্যায়ে ফাইল সিস্টেমে রয়েছে এটি "কাঁচা" কোড এবং সরাসরি র‌্যামে লোড করে কার্যকর করা যেতে পারে: http://www.pixbeat.org/ ডকস / ডিস্ক / । ডিস্ক থেকে র‌্যামে স্টেজ 1.5 লোড বিআইওএস ডিস্ক অ্যাক্সেস রুটিন ব্যবহার করে।

এখানে চিত্র বর্ণনা লিখুন

স্টেজ ১.৫-এ ফাইল-সিস্টেম ইউটিলিটি রয়েছে, যাতে এটি ফাইল সিস্টেম থেকে স্টেজ 2 পড়তে পারে (ভাল, এটি এখনও ডিস্ক থেকে র‌্যামে পড়তে BIOS 13h ব্যবহার করে, তবে এখন এটি ইনোড ইত্যাদি সম্পর্কিত ফাইল-সিস্টেমের তথ্যগুলি বুঝতে পারে এবং এর বাইরে কাঁচা কোড পেতে পারে) ডিস্ক)। পুরানো বায়োসগুলি তাদের ডিস্কের ঠিকানা মোডে সীমাবদ্ধতার কারণে পুরো এইচডি অ্যাক্সেস করতে সক্ষম না হতে পারে - তারা সিলিন্ডার-হেড-সেক্টর সিস্টেমটি ব্যবহার করতে পারে, ডিস্কের প্রথম 8 গিগাবাইটের বেশি সম্বোধন করতে অক্ষম: http: //en.wikedia। org / wiki / সিলিন্ডার-প্রধান-সেক্টর

স্টেজ 2 র‌্যামে কার্নেলটি লোড করে (আবার, বিআইওএস ডিস্ক ইউটিলিটিগুলি ব্যবহার করে)। এটি যদি ২.6++ কার্নেল হয় তবে এর মধ্যে থ্রিমারফ সংকলিত রয়েছে, সুতরাং এটি লোড করার দরকার নেই। এটি যদি পুরানো কার্নেল হয় তবে বুটলোডার স্ট্যান্ডলোন আরআরডি চিত্রটি মেমরিতে লোড করে, যাতে কার্নেল এটি মাউন্ট করতে পারে এবং ডিস্ক থেকে আসল ফাইল সিস্টেম মাউন্ট করার জন্য ড্রাইভার পেতে পারে।

সমস্যাটি হ'ল কার্নেল (এবং র্যামডিস্ক) ওজন 1 এমআইবি এর বেশি হয়, সুতরাং এগুলি র‌্যামে লোড করতে আপনাকে প্রথমে 1 এমআইবিতে কার্নেলটি লোড করতে হবে, তারপরে সুরক্ষিত মোডে (32 বিট) লাফাতে হবে, লোড করা কার্নেলটিকে উচ্চ মেমরিতে নিয়ে যাবে (ফ্রি রিয়েল মোডের জন্য প্রথম 1 এমআইবি), তারপরে আবার রিয়েল (16 বিট) মোডে ফিরে আসুন, ডিস্ক থেকে প্রথম 1 এমআইবিতে র‌্যামডিস্ক পান (যদি এটি পৃথক আরআরডি এবং পুরানো কার্নেল হয়) তবে সম্ভবত সুরক্ষিত (32 বিট) মোডে স্যুইচ করুন, এটি যেখানে এটি রয়েছে সেখানে রেখে দিন, সম্ভবত বাস্তব মোডে ফিরে আসুন (বা না: /programming/4821911/does-grub-switch-to-protected-mode ) এবং কার্নেল কোডটি কার্যকর করুন। সতর্কতা: আমি বর্ণনার এই অংশটির পূর্ণতা এবং নির্ভুলতা সম্পর্কে পুরোপুরি নিশ্চিত নই।

এখন, যখন আপনি শেষ পর্যন্ত কার্নেলটি চালান, আপনার ইতিমধ্যে এটি এবং বুটলোডার দ্বারা র‌্যামডিস্কটি র‌্যামে লোড করা হয়েছে , যাতে কার্নেলটি আপনাকে বাস্তব রুট ফাইল সিস্টেম এবং এতে পিভট রুট মাউন্ট করার জন্য র‌্যামডিস্ক থেকে ডিস্ক ইউটিলিটিগুলি ব্যবহার করতে পারে। ramfs ড্রাইভারগুলি কার্নেলে উপস্থিত রয়েছে, সুতরাং এটি অবশ্যই অবশ্যই initramfs এর বিষয়বস্তু বুঝতে পারে।


বুটলডার কি সুরক্ষিত মোডে ঝাঁপ দেওয়ার পরিবর্তে খণ্ডগুলিতে কার্নেলটি লোড করতে পারে না ?? এবং সেই 1 এমবি মুক্ত করার দরকার কী আছে .. (দুঃখিত .. এটি বুঝতে পারিনি ..)
rpthms

প্রথম 1 এমআইবি মুক্ত করার প্রয়োজনীয়তা নিম্নরূপ: বুটলোডার আপনার হার্ড ড্রাইভটি কেবল রিয়েল মোডে অ্যাক্সেস করতে পারে, এটি এটি BIOS ইউটিলিটিগুলির সাথে অ্যাক্সেস করতে পারে, যা বাস্তব-মোড (তারা 16-বিট আর্গুমেন্টে কাজ করে এবং 16-বিট অপারেশন ব্যবহার করে)। রিয়েল মোডে প্রথম 1 এমআইবি ব্যতীত কোনও র‍্যাম দেখতে পায় না। তবে আপনাকে র‌্যামে কার্নেল + থ্রিমফর্মগুলি লোড করতে হবে এবং তারা র‌্যামের জন্য ~ 5 এমআইবি স্থান নেয়। এই বিআইওএস ইউটিলিটিগুলি কেবল প্রথম 1 এমআইবিতে 5 টি মাইবি ছুঁতে সক্ষম হবে না। সুতরাং, বুটলোডারকে সেগুলি ডিস্ক থেকে প্রথম 1 এমআইবিতে অনুলিপি করতে হবে, তারপরে সুরক্ষিত মোডে যান এবং তাদের প্রথম 1 এমবি র‌্যাম থেকে উচ্চ র‌্যামে স্থানান্তরিত করতে হবে। এটা কি এখন পরিষ্কার? :)
বোরিস বুর্কভো

1
পুরো পর্যায় 1 / 1.5 / 2 স্টাফ গ্রাব উত্তরাধিকার।
psusi

1
@ সিএমসিডিগ্রাগনকাই হ্যাঁ, স্টেজ 2 বুটলোডার ফাইল সিস্টেমে রয়েছে (যথা, /bootপার্টিশনে)। কার্নেলটি এই মুহুর্তে লোড করা হয় না - এটি গ্রাবের স্টেজ ১.৫, যিনি /bootফাইল সিস্টেমে (উদাহরণস্বরূপ /boot/grubফাইলটিতে) এর মাইনালিস্টিক ফাইল সিস্টেমের মাধ্যমে স্টেজ 2 অ্যাক্সেস করছেন । কার্নেল /bootপার্টিশন থেকে পড়তে সক্ষম হবে , তবে গ্রুব 2 কোড কার্যকর করার পরে এবং কার্নেলের লোডের পরে এবং কার্নেল initramfs পড়ার পরে এটি ঘটবে। আপনি কি init.shinitramfs এর কথা বলছেন ? এটি /bootআপনার হার্ড ড্রাইভের বিভাজনে থাকে , তারপরে গ্রাবের স্টেজ 2 এটিকে র‌্যামে রাখে এবং কার্নেল এটিকে র‌্যাম থেকে পড়ে।
বরিস বুর্কভ

1
ইনসার্ডের আলাদা ফাইল হতে হয়েছিল । নতুন initramfs -র করা যাবে কার্নেল লিঙ্ক, কিন্তু এটা না হতে হবে - এটা বুট-লোডার দ্বারা পৃথক ফাইল রূপে লোড করা যাবে। যেহেতু initramfs ফাইলটি সিপিও সংরক্ষণাগারগুলির অনুক্রম হিসাবে সংজ্ঞায়িত করা হয়েছে, তাই কিছু বুটলোডার (যেমন আইপিএক্সই) একাধিক থ্রিমফ ফাইলগুলি মঞ্জুরি দেয় যা একের পর এক মেমোরিতে লোড হবে। এছাড়াও কিছু লিনাক্স ডিস্ট্রিবিউশনে পিছনের সামঞ্জস্যের জন্য initrd- স্টাইল ফাইলের নাম ব্যবহার করা হয়, যদিও ব্যবহৃত প্রকৃত প্রযুক্তিটি এখন initramfs init
টেলকোমে

1

আমি বিশ্বাস করি, এটি নির্দিষ্ট বুটলোডারকে কী বৈশিষ্ট্য সমর্থন করে তা ফুটিয়ে তোলে। যেমন। এটি আপনার সংযুক্ত (বুট + রুট) পার্টিশনের নির্দিষ্ট ফাইল সিস্টেম জানতে হবে না। সেক্ষেত্রে আপনি কেবল একটি পৃথক বুট পার্টিশন তৈরি করতে পারেন যেমন এটি আপনার বুটলোডারের সাথে কাজ করে এবং আপনার রুট পার্টিশনটি কীভাবে মাউন্ট করবেন তার যে কোনও জটিলতা কার্নেলের উপর ছেড়ে যায় এবং বুট পার্টিশন থেকে বুট করা ইআরআরডি চিত্রটি থাকে। বুটলোডার কীভাবে এসসিএসআই ডিভাইসগুলি (এবং অন্যান্য ডিভাইসগুলিও, বুটলোডার কী ব্যবহৃত হয় তার উপর নির্ভর করে) এর নিজস্ব ড্রাইভার ব্যবহার করে বা বিআইওএস রুটিন ব্যবহার করে কীভাবে অ্যাক্সেস করবেন তা জানেন does তদুপরি, এটি কিছু ফাইল সিস্টেম ইত্যাদি পড়তে জানে

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


0

কেবল রেকর্ডের জন্য, যদি কোনও বুটলোডার আরআরডি লোড না করে তবে অন্য একটি বুটলোডার পরীক্ষা করা উপযুক্ত; আমি মত একটি পরিস্থিতির মধ্যে মাত্র দৌড়ে করেছি এই ও GRUB 2.00 সফল যখন জন্য LILO চুপটি উপেক্ষিত একটি সঠিকভাবে মাঝারি আকারের হলে initrd নিদিষ্ট (; একটি SATA এসএসডি একক ext4 এই rootfs GPT <4 মেগাবাইট)।

বুট প্রক্রিয়াটি একটি সাধারণ দিয়ে দ্রুত শেষ হয়

RAMDISK: Couldn't find valid RAM disk image starting at 0.
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,3)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.