আমার কেন ইনি্রামফ দরকার?


17

আমি জানতে পেরেছি যে আমি যদি ফাইল ফাইলটি jffsবা চয়ন করি sd(এবং না initramfs) তবে কার্নেলের আকার খুব ছোট হবে (১.৪ মেগাবাইট initramfsযার তুলনায় ৩.৪ এমবি)। এর অর্থ এটি initramfsযথেষ্ট বড় জায়গা নেয়। সুতরাং আমি যদি পারি তবে আমি এটি পুরোপুরি সরিয়ে ফেলব এবং এর ফলে খুব ছোট কার্নেল থাকবে যা আমি চাই।

আমার মনে মূল প্রশ্নটি উঠছে: আমার কেন দরকার initramfs? কোনও প্রাথমিক ফাইল সিস্টেম না থাকলে লিনাক্স কার্নেল বুট করা যায় না?

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


2
আপনি initramfs ছাড়া করতে পারবেন না। অতিরিক্ত initramfs ফাইল ব্যতীত এটি করা সম্ভব, তবে আপনি যা করেন তা নির্বিশেষে কার্নেলের মধ্যে এটির নিজস্ব খালি রয়েছে কি না or সুতরাং আমি আপনার প্রশ্নটি বুঝতে পারি না - আপনি কোন বিতরণের কথা বলছেন? আপনি আপনার কর্নেলটি কীভাবে তৈরি করছেন? আপনি কি কার্নেল .config ফাইল সরবরাহ করতে পারেন? এগুলি খুব গুরুত্বপূর্ণ। আমার সন্দেহ হয় যে আপনার ডিস্ট্রো সরাসরি তার কর্নালে এর আরআরআমগুলি সংকলন করছে - এবং তাই এটিতে থাকা অন্যথায় খালি ইন্ট্রামগুলি পূরণ করছে - তবে আপনি যে তথ্য সরবরাহ করেছেন তার উপর ভিত্তি করে আমি জানতে পারি না।
মাইকজার্ভ

2
@ মাইকজার্ভ, স্পষ্টতই একটি অন্তর্নির্মিত কিন্তু খালি / অব্যবহৃত থ্রিমফ গণনা করে না।
psusi

ঠিক আছে, @psusi কার্নেল ডক্সের সাথে একমত নয়। এবং আমি কেবল এটি সম্পর্কে দৃ ad় থাকি কারণ কোনও রহস্য হওয়ার দরকার নেই - এর ন্যায় /root- এটিই। এটি কেবল আলাদাভাবে করে switch_rootতবে এটি নির্দিষ্ট শর্তযুক্ত নির্দিষ্ট কার্নেল মডিউলগুলির সাথে যথাযথ সতর্কতা অবলম্বন করা হয়, যে কোনও সময় করা যেতে পারে। ইনিরামফেসগুলি ডিস্ক চিত্র ছাড়া আর কিছুই নয় - ব্রিম্মিং বা না, এটি রয়েছে। এবং আপনি এটি ছাড়া কখনও না - এটি সর্বোপরি আপনার মূল। এটি কেবল একটি রহস্য হওয়া উচিত নয়, আমি যা মনে করি তা হ'ল এবং এর চারপাশে থাকা সমস্ত অযৌক্তিক বিভ্রান্তি আমি পছন্দ করি না।
মাইকজার্ভ

2
@ মাইকজার্ভ, না, / রুট হ'ল মূল ব্যবহারকারীদের জন্য হোম ডিরেক্টরি। রুটফেসগুলি হল /, যা এরপরে আসল মূলটিকে মাউন্ট করে। আপনি কেবল শব্দার্থবিজ্ঞানের বিতর্ক করছেন। এই আলোচনার উদ্দেশ্যে, ইনি্রামফ না থাকা মানে ডিস্কে কোনও ফাইল না থাকা আপনার বুট লোডারকে কার্নেলটি লোড করে পাস করতে হবে।
psusi

এটি সত্য, আমি কেবল স্পষ্টতার স্বার্থে / মূল ব্যবহার করেছি, তবে আমি আপনাকে এটি দেব। তবে না, তারা শব্দার্থবিজ্ঞান নয়, তারা আপনার লিনাক্স কার্নেলের মৌলিক মেকানিক্স। এগুলি মৌলিক বিষয়। কেবল তাদের সঠিক করার চেষ্টা করুন।
মাইকজার্ভ

উত্তর:


12

একটি initramfs থাকার আকার বৃদ্ধি র‌্যামফএস ড্রাইভারের কারণে নয় (এটি কেবলমাত্র কয়েক কেবি, এবং যে কোনও উপায়ে অন্য জিনিসের জন্য প্রয়োজন) কেবল থ্রাইমফের জন্য নয়। Initramfs এর মধ্যে এমন প্রোগ্রাম রয়েছে যা আসল রুট ফাইল সিস্টেমকে একত্রিত ও মাউন্ট করার জন্য প্রয়োজনীয়।

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

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

আপনি যদি কোনও ইনিশ্রাম ব্যবহার করতে না চান, কেবল আপনার বুটলোডারকে বলুন যে কোনওটি পাস করবেন না। কার্নেল বিল্ডের আউটপুটটিতে অবশ্যই একটি অন্তর্ভুক্ত করবেন না, অবশ্যই - এটি কীভাবে হয় যদি আর্কিটেকচার- এবং বুটলোডার-নির্ভর হয়ে থাকে: উদাহরণস্বরূপ, vmlinuxএবং bzImageথ্রিমারফগুলি অন্তর্ভুক্ত করবেন না (তারা যথাক্রমে কাঁচা এবং সঙ্কুচিত কার্নেল ), তবে uImage(ইউ-বুট-এর জন্য) কার্নেল এবং initramf গুলি উভয়ই প্যাক করে।

(টেকনিক্যালি, মাইকজার্ভ নোট হিসাবে সর্বদা একটি ইনিগ্রামফ থাকে - তবে ডিফল্টরূপে এটি একটি খালি, ১৩৪-বাইট আর্কাইভ। আপনার বিল্ড প্রক্রিয়া এবং এতে থাকা সরঞ্জামগুলি রয়েছে যা রুট ফাইল সিস্টেমটি মাউন্ট করার জন্য ব্যবহৃত হয়))

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


আপনি যদি একটি 2.6 বা আরও নতুন লিনাক্স কার্নেল ব্যবহার করছেন তবে আপনার থ্রিমারফ রয়েছে। প্রথাগত হিসাবে আপনি গৌণ থ্রিম্রামস চিত্র ব্যবহার করুন বা না করুন এটি অন্য একটি বিষয়, তবে থ্রিম্রামগুলি alচ্ছিক নয়।
মাইকজার্ভ

2
@ মিমিকার্জ আপনার একটি আছে, হ্যাঁ। তবে একটি খালি ইনিরামফগুলি হল চিনাবাদাম। এটি ব্যবহার করতে হবে না (যার জন্য এটিতে সত্যিকারের রুটটি মাউন্ট করার জন্য পর্যাপ্ত প্রোগ্রাম রয়েছে যা একটি সাধারণ এম্বেডড সিস্টেমে অদক্ষ উপায়ে আকার বাড়ায়)।
গিলস 2'14

যাই হোক না কেন বাধ্যতামূলক চিনাবাদাম। আমি জানি না যখন আমি অন্যথায় বলেছিলাম! প্রশ্নকর্তা এটি ফাইল সিস্টেম হিসাবে কীভাবে সরিয়ে ফেলবেন সে সম্পর্কিত তথ্যের জন্য অনুরোধ করছিলেন - যা সম্ভব নয়।
মাইকজার্ভ

এবং হ্যাঁ এটি ব্যবহার করতে হবে - initramfs ছাড়া কোনও মূল নেই। কখনো।
মাইকজার্ভ

8

এলএফএস থেকে :

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

...

এলএফএস এনভায়রনমেন্টে ইনি্রামফ থাকার কেবলমাত্র চারটি প্রাথমিক কারণ রয়েছে: নেটওয়ার্ক থেকে রুটফেসগুলি লোড করা, LVM লজিক্যাল ভলিউম থেকে লোড করা, পাসওয়ার্ডের প্রয়োজন হয় এমন এনক্রিপ্টযুক্ত রুটফেস থাকা বা রুটফগুলি একটি হিসাবে চিহ্নিত করার সুবিধার্থে লেবেল বা ইউইউডি। অন্য যে কোনও কিছুর অর্থ সাধারণত কার্নেলটি সঠিকভাবে কনফিগার করা হয়নি।

...

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

অন্য উত্স www.kernel.org

এর পাশাপাশি অনেকগুলি লিনাক্স সিস্টেম রয়েছে যা রাউটারগুলির মতো পছন্দ করে যারা ইনি্রামফ ব্যবহার করে না।


1

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


এটিও ভুল।
মাইকজার্ভ

6
@ মাইকজার, আপনার মন্তব্য অকেজো। আপনি যদি এটি দাবি করতে চলেছেন তবে আপনাকে কেন তা ব্যাখ্যা করতে হবে।
psusi

আমি করেছি বা তার পরিবর্তে, আমার উত্তরটির প্রায় 99% রচনা কর্নেল ডকুমেন্টেশন করে।
মাইকজার্ভ

@ মিক্সভার, এটি সঠিক is আমি এখন ইন্ট্রামফ ছাড়াই বেশ কয়েক বছর ধরে জেন্টু লিনাক্স চালাচ্ছি।
টিম

1

এটি একটি পুরানো প্রশ্ন তবে এখনও এটির কোনও গ্রহণযোগ্য উত্তর বলে মনে হচ্ছে না তাই আমি এটি এখানে ফেলে দেব (আমি এখানে কোনও বিশেষজ্ঞ নই, আমি এটি নিজের জন্য বের করার চেষ্টা করছি))

Https://www.kernel.org/doc/Docamentation/early-userspace/README থেকে (নীচে সমস্ত উপায় যা বলে যে এটি ২০০৪ সাল থেকে আপডেট হয়নি))

কার্নেলের কাছে বর্তমানে মূল ফাইল সিস্টেমটি মাউন্ট করার 3 টি উপায় রয়েছে:

ক) সমস্ত প্রয়োজনীয় ডিভাইস এবং ফাইল সিস্টেম ড্রাইভার কার্নেলের মধ্যে সংকলিত, কোনও আরআরআরডি না। init / main.c: init () root = বিকল্পের উপর ভিত্তি করে চূড়ান্ত রুট ফাইল সিস্টেমটি মাউন্ট করার জন্য প্রস্তুত_নামস্পেস () কে কল করবে এবং optionচ্ছিক init = init / main.c: init এর শেষে তালিকাভুক্ত চেয়ে অন্য কিছু init বাইনারি চালাতে পারবে ()।

খ) কিছু ডিভাইস এবং ফাইল-সিস্টেম ড্রাইভার মডিউল হিসাবে নির্মিত এবং একটি আরআরআরডিতে সঞ্চিত। Initrd এ অবশ্যই একটি বাইনারি '/ linuxrc' থাকতে হবে যা এই ড্রাইভার মডিউলগুলি লোড করার কথা। লিনাক্সসিআরসি-র মাধ্যমে চূড়ান্ত রুট ফাইল সিস্টেমটি মাউন্ট করা এবং পিভট_রুট সিস্টেল ব্যবহার করাও সম্ভব। আরআরআরডিটি প্রস্তুত_নামস্পেস () এর মাধ্যমে মাউন্ট করা এবং সম্পাদন করা হয়।

গ) initramfs ব্যবহার করে। প্রস্তুত_নামস্পেসে () কল করতে হবে না। এর অর্থ একটি বাইনারি অবশ্যই সমস্ত কাজ করে। বলেন বাইনারিটি usr / gen_init_cpio.c সংশোধন করে অথবা নতুন সিআরডি ফর্ম্যাট, সিপিও আর্কাইভের মাধ্যমে initramfs এ সংরক্ষণ করা যেতে পারে। একে অবশ্যই "/ init" বলা উচিত। এই বাইনারিটি প্রস্তুত_নামস্পেস () যা করতে পারে তার সমস্ত কিছুর জন্য দায়বদ্ধ।

পিছনের সামঞ্জস্য বজায় রাখার জন্য, / init বাইনারি কেবল তখনই চালিত হবে যখন এটি কোনও initramfs সিপিও সংরক্ষণাগার মাধ্যমে আসে। যদি এটি না হয় তবে init / main.c: init () চূড়ান্ত রুটটি মাউন্ট করতে এবং পূর্বনির্ধারিত init বাইনারিগুলির একটি নির্বাহ করতে প্রস্তুত_নামস্পেস () চালাবে।

এটির মূল্যের জন্য, আমি বিশ্বাস করি যে ডিভাইসগুলি / ডিস্ট্রোগুলি যেমন রাস্পবেরি পাই ইত্যাদির সাহায্যে ইন্ট্রামফ ব্যবহার হয় না; কিছু ক্ষেত্রে কার্নেলটি মূল বিভাজনে থাকে (বুটলোডার দ্বারা মাউন্ট করা হয় যার মধ্যে প্রয়োজনীয় fs মডিউল থাকে)) অন্যান্য ক্ষেত্রে যেখানে কার্নেল যেমন একটিতে থাকে/boot পার্টিশন, একই পার্টিশনে initramfs -র অন্যদেরও rootfs মাউন্ট সামনে সরাসরি অ্যাক্সেস করা যেতে পারে বলেছেন।

কিছু ক্ষেত্রে initramfs কার্নেলের মতো একই ফাইলে তৈরি করা যেতে পারে তবে এটি সর্বদা হয় না। (ক) বেশ স্পষ্টভাবে বলে মনে হয়েছে যে কিছু ক্ষেত্রে ইনি্রামফের প্রয়োজন হয় না।


0

আমি নিম্নলিখিত ব্যাখ্যা আরও স্পষ্ট মনে করি,

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

Initramfs ব্যবহার করা alচ্ছিক। ডিফল্টরূপে, কার্নেলটি অন্তর্নির্মিত ড্রাইভারগুলি ব্যবহার করে হার্ডওয়্যার শুরু করে, নির্দিষ্ট রুট পার্টিশন মাউন্ট করে, ইনস্টল করা লিনাক্স বিতরণের init সিস্টেমটি লোড করে। Init সিস্টেমটি অতিরিক্ত মডিউলগুলি লোড করে এবং অবশেষে আপনাকে লগ ইন করার অনুমতি না দেওয়া পর্যন্ত পরিষেবা শুরু করে starts এটি একটি ভাল ডিফল্ট আচরণ এবং অনেক ব্যবহারকারীর পক্ষে যথেষ্ট sufficient initramfs উন্নত প্রয়োজনীয়তা সহ ব্যবহারকারীদের জন্য; মূল পার্টিশন মাউন্ট হওয়ার আগেই ব্যবহারকারীদের যত তাড়াতাড়ি সম্ভব কাজগুলি করা প্রয়োজন।

আপনি initramfs দিয়ে কী করতে পারেন তার কয়েকটি উদাহরণ এখানে রয়েছে:

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

-1

আপনি যা করেন তা কোনও ব্যাপার নয়, আপনার আছে initramfsএটি ছাড়া কোনও কাজ নেই - এটি আপনার উপর চাপানো একমাত্র ফাইল সিস্টেম। কার্নেল.অর্গ থেকে :

রুটফস কী?

Rootfsএকটি বিশেষ দৃষ্টান্ত হল ramfs(অথবা tmpfs, যদি যে সক্ষম করা থাকে), যা সবসময় 2.6 সিস্টেম উপস্থিত রয়েছে। আপনি আন-মাউন্ট করতে পারবেন নাrootfs প্রায় একই কারণে আপনি আর ডি প্রক্রিয়াটি মেরে ফেলতে পারবেন না; খালি তালিকার জন্য পরীক্ষা করতে ও পরিচালনা করার জন্য বিশেষ কোড না রাখার চেয়ে কার্নেলের পক্ষে নির্দিষ্ট তালিকা খালি না হয়ে যেতে পারে তা নিশ্চিত করা এটি আরও সহজ এবং সহজ।

বেশিরভাগ সিস্টেমগুলি অন্য একটি ফাইল সিস্টেমকে মাউন্ট করে rootfsএবং এটিকে উপেক্ষা করে। র‌্যামফের খালি দৃষ্টান্তটি যে স্থান গ্রহণ করে তা খুব সামান্য

তাহলে * CONFIG_TMPFS * সক্ষম হলে, rootfsব্যবহার করবে tmpfsপরিবর্তে ramfsডিফল্ট ভাবে। বলপূর্বক ramfs, যোগ "rootfstype=ramfs"Kernel কমান্ড-লাইনের।

ইন্স্রামফ কী?

সমস্ত ২.6 লিনাক্স কার্নেলগুলিতে একটি গিজিপযুক্ত"cpio"ফর্ম্যাট সংরক্ষণাগারথাকেযা কার্নেল বুট হয়ে rootfsগেলে প্রবেশ করা হয়। আহরণের পর কার্নেল চেক কিনা তা দেখতেrootfsএকটি ফাইল রয়েছে"init" , এবং তাই এটি এটা executes যেন PID, 1. এটি পাওয়া গেলে, এইinitপ্রক্রিয়া, সিস্টেম উপায় আপ বাকি আনয়ন লোকেটিং এবং বাস্তব root ডিভাইস মাউন্ট সহ জন্য দায়ী ( যদি কোন). rootfsএতেinitএম্বেড থাকাcpioসংরক্ষণাগারটি বের করারপরে যদিকোনওপ্রোগ্রামনা থাকেতবে কার্নেলটি একটি মূল বিভাজন সনাক্ত এবং মাউন্ট করার জন্য পুরানো কোডের মধ্যে পড়ে যাবে, তারপরে এর কিছু বৈকল্পিক/sbin/initকার্যকর করবে।

এই সমস্ত কিছু বিভিন্ন উপায়ে পুরানো আরআরডি থেকে পৃথক:

  • পুরানো initrd সর্বদা একটি পৃথক ফাইল ছিল, যখন initramfs সংরক্ষণাগারটি লিনাক্স কার্নেল চিত্রের সাথে যুক্ত রয়েছে। (ডিরেক্টরি লিনাক্স - * / usr নির্মাণের সময় এই সংরক্ষণাগারটি তৈরি করতে উত্সর্গীকৃত))

  • পুরানো আরআরআরডি ফাইলটি একটি জিজেপড ফাইলসিস্টেম চিত্র ছিল (কিছু ফাইল ফর্ম্যাটে যেমন ext2, যার জন্য কার্নেলের মধ্যে নির্মিত ড্রাইভারের দরকার ছিল), যখন নতুন initramfs সংরক্ষণাগারটি একটি জিজেপড সিপিও সংরক্ষণাগার (যেমন কেবল কেবল সরল, সিপিও দেখুন (1) এবং ডকুমেন্টেশন / প্রারম্ভিক-ইউজারস্পেস / বাফার-ফরম্যাট.txt)। কার্নেলের সিপিও এক্সট্রাকশন কোডটি কেবলমাত্র খুব ছোট নয়, এটি পাঠ্য এবং ডেটাও itআইনিট করুন যা বুট প্রক্রিয়া চলাকালীন বাতিল করা যেতে পারে।

  • পুরানো initrd দ্বারা চালিত প্রোগ্রাম (যাকে বলা হত / initrd, / init নয়) কিছু সেটআপ করেছিল এবং তারপরে কার্নেলের কাছে ফিরে আসে, অন্যদিকে initramfs থেকে init প্রোগ্রাম কার্নেলের কাছে ফিরে আসবে বলে আশা করা যায় না। (যদি / আরআরটিকে নিয়ন্ত্রণ বন্ধ করার দরকার হয় তবে এটি একটি নতুন মূল ডিভাইসটি দিয়ে / কাটিয়ে উঠতে পারে এবং অন্য একটি এনআর প্রোগ্রাম চালায় below নীচে স্যুইচ_রোট ইউটিলিটি দেখুন))

  • অন্য কোনও রুট ডিভাইসটি স্যুইচ করার সময়, আরআরআরডি পিভট_রুট এবং তারপরে র‌্যামডিস্কটিকে সামঞ্জস্য করে। তবে initramfs হ'ল rootfs: আপনি পিভট_রুট রুটফগুলি নাও আনমাউন্ট করতে পারবেন না। স্থানটি ফাঁকা করার জন্য রুটফেসের বাইরে থাকা সমস্ত কিছু মুছুন (অনুসন্ধান করুন -xdev / -exec rm '{}' ';'), নতুন মূলের সাহায্যে ওভারমাউন্ট রুটফগুলি (সিডি / নিউমাউন্ট; মাউন্ট --মোভ; /; ক্রোট।), নতুন / dev / কনসোলের সাথে stdin / stdout / stderr সংযুক্ত করুন, এবং নতুন init চালনা করুন।

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

জনসংখ্যা

২.6 কার্নেল বিল্ড প্রক্রিয়া সর্বদা একটি জিজেপড সিপিও ফর্ম্যাট টি আরআরআমফএস সংরক্ষণাগার তৈরি করে এবং ফলস্বরূপ কার্নেল বাইনারিতে এটি লিঙ্ক করে। ডিফল্টরূপে, এই সংরক্ষণাগারটি খালি (x86 এ 134 বাইট গ্রহণ করা)।

কনফিগারেশন বিকল্প CONFIG_INITRAMFS_SOURCE (মেনুকনফিগের সাধারণ সেটআপে, এবং usr / Kconfig এ থাকা) ব্যবহার করা যেতে পারে initramfs সংরক্ষণাগারটির জন্য উত্স নির্দিষ্ট করতে, যা স্বয়ংক্রিয়ভাবে ফলাফল বাইনারিতে অন্তর্ভুক্ত হবে। এই বিকল্পটি একটি বিদ্যমান জিজেপড সিপিও আর্কাইভ, সংরক্ষণাগারভুক্ত করার জন্য ফাইল সম্বলিত একটি ডিরেক্টরি বা নিম্নোক্ত উদাহরণের মতো একটি পাঠ্য ফাইলের বিশদ উল্লেখ করতে পারে:

  dir /dev 755 0 0
  nod /dev/console 644 0 0 c 5 1
  nod /dev/loop0 644 0 0 b 7 0
  dir /bin 755 1000 1000
  slink /bin/sh busybox 777 0 0
  file /bin/busybox initramfs/busybox 755 0 0
  dir /proc 755 0 0
  dir /sys 755 0 0
  dir /mnt 755 0 0
  file /init initramfs/init.sh 755 0 0

উপরের ফাইল ফর্ম্যাটের ডকুমেন্টিংয়ের ব্যবহার বার্তা পেতে "usr / gen_init_cpio" (কার্নেল বিল্ডের পরে) চালান।

কনফিগারেশন ফাইলের একটি সুবিধা হ'ল নতুন আর্কাইভে অনুমতি সেট করতে বা ডিভাইস নোডগুলি তৈরি করতে রুট অ্যাক্সেসের প্রয়োজন হয় না। (দ্রষ্টব্য, এই দুটি উদাহরণ "ফাইল" এন্ট্রিগুলি "init.sh" এবং "ব্যস্তবক্স" নামক একটি ডিরেক্টরি "Linuxramfs" নামে একটি ডিরেক্টরিতে লিনাক্স-২. 2. এর অধীনে ফাইলগুলি খুঁজে পাওয়ার প্রত্যাশা করেছে। * ডিরেক্টরিতে ডকুমেন্টেশন / আর্লি-ইউজারস্পেস / README দেখুন আরো বিস্তারিত.)

কার্নেল বহিরাগত সিপিও সরঞ্জামগুলির উপর নির্ভর করে না। আপনি যদি কনফিগারেশন ফাইলের পরিবর্তে ডিরেক্টরি উল্লেখ করেন তবে কার্নেলের বিল্ড অবকাঠামো সেই ডিরেক্টরি থেকে একটি কনফিগারেশন ফাইল তৈরি করে (usr / Makefile কলগুলি স্ক্রিপ্টগুলি / Gen_initramfs_list.sh), এবং কনফিগারেশন ফাইলটি ব্যবহার করে ডিরেক্টরিটিকে প্যাকেজ করতে এগিয়ে যায় (এটিকে খাওয়ানোর মাধ্যমে) usr / gen_init_cpio, যা usr / gen_init_cpio.c থেকে তৈরি করা হয়েছে)। কার্নেলের বিল্ড-টাইম সিপিও তৈরির কোডটি সম্পূর্ণ স্ব-অন্তর্ভুক্ত এবং কার্নেলের বুট-টাইম এক্সট্র্যাক্টরটিও (স্পষ্টতই) স্ব-অন্তর্ভুক্ত।


1
আপনি একটি initramfs ছাড়া বুট করতে পারেন। আপনার উত্তরটি থ্রিমারফের গুণাবলী সম্পর্কে ব্যাখ্যা করে, তবে এটি সাধারণত এমবেডেড সিস্টেমগুলিতে প্রয়োগ হয় না এবং এমনকি ডেস্কটপ বা সার্ভারগুলিতেও যেখানে প্রবর্তন করা হয়, এটি বাধ্যতামূলক নয়।
গিলস

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

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

@ গিলস যদি এটি যথেষ্ট পরিমাণে ভাল না হয়: "২.6 কার্নেল বিল্ড প্রক্রিয়া সর্বদা একটি জিজিপড সিপিও ফর্ম্যাট টি আরআরআরফ সংরক্ষণাগার তৈরি করে এবং ফলস্বরূপ কার্নেল বাইনারিতে এটি লিঙ্ক করে default " আমি ভাল করতে পারি. উপরেরটি 2 বা 3 মিনিটের ওয়েব অনুসন্ধান ছিল।
মাইক্রোজার

3
আমি ডকুমেন্টেশন পড়েছি। আমি জীবিকা নির্বাহের জন্য এটি করি। এটা মতের বিষয় নয়। সর্বদা একটি ইনিরামফ থাকে, তবে এটি বুট করার জন্য অগত্যা ব্যবহৃত হয় না। আমি এই মামলার জন্য কার্নেল কাঠামোর একটি সুনির্দিষ্ট ব্যাখ্যা খুঁজে পাচ্ছি না, সম্ভবত এটি কারণ এটি এমন ক্লাসিক কেস যা ব্যাখ্যাটির নিশ্চয়তা দেয় না বলে মনে হয়। মূল যুক্তিটি হ'ল do_mounts.c- বিশেষত prepare_namespace, saved_root_nameএতে root=কমান্ড লাইন আর্গুমেন্ট সহ পপুলেশন আসে ।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.