क्या पूरे कर्नेल को बूट में मेमोरी में लोड किया गया है?


14

मैं इस लोकप्रिय आईबीएम डॉक्टर के माध्यम से पढ़ता हूं (मुझे लगता है कि इसे वेब पर काफी बार संदर्भित किया गया है) प्रारंभिक रैम डिस्क के कार्य को समझाता है।

हालांकि यह कैसे काम करता है, इसकी अवधारणा में मैंने एक दीवार पर प्रहार किया।

डॉक में यह कहता है

GRUB जैसे बूट लोडर, उस कर्नेल की पहचान करता है जिसे लोड किया जाना है और इस कर्नेल छवि और किसी भी संबंधित initrd को मेमोरी में कॉपी करता है

मैं पहले से ही उलझन में हूँ: क्या यह पूरे कर्नेल को मेमोरी में या उसके किसी हिस्से में कॉपी करता है? यदि पूरी कर्नेल मेमोरी में है तो हमें शुरुआती रैम डिस्क की भी आवश्यकता क्यों है?

मुझे लगा कि initrd का उद्देश्य एक छोटी सामान्यीकृत कर्नेल छवि रखने में सक्षम होना है और कर्नेल छवि लोड होने से पहले initrd इसमें सही मॉड्यूल स्थापित करेगा। लेकिन अगर पूरा कर्नेल पहले से ही मेमोरी में है तो हमें initrd की आवश्यकता क्यों है?

यह भी एक और बात सामने लाता है जो मुझे भ्रमित करता है - वे मॉड्यूल कहाँ हैं जो कर्नेल में स्थित हैं? सभी कर्नेल मॉड्यूल initrd के अंदर संग्रहीत होते हैं?


हाँ। संपूर्ण कर्नेल। और इसकी पहली जड़। लेकिन लिनक्स कर्नेल havent कई वर्षों में initrd का इस्तेमाल किया।
mikeserv

सही है कि मैं पढ़ रहा था। यह काफी हद तक initramfs द्वारा सही तरीके से बदल दिया गया है? और इसकी अभी भी initramfs के साथ एक समान प्रक्रिया सही है?
user1028270

1
यह 2.6 श्रृंखला के बाद से सभी गुठली के लिए पूरी तरह से बदल दिया गया है। लेकिन यह प्रक्रिया कुछ हद तक समान है सिवाय इसके कि इनट्रैम्फ्स कभी भी अनमाउंट नहीं होता है - इसके हमेशा और इसके हमेशा रूट भी। आपको वास्तव में अपने मूल देव को माउंट करना होगा। एक अलग ब्लॉक देव और समान का अनुकरण करने की आवश्यकता नहीं होने के भी लाभ हैं।
mikeserv

कूल मैं उस लेख को पढ़ने जा रहा हूं जिससे आप जुड़े थे। तो कर्नेल मॉड्यूल इनट्रैमफुट रूट्स में स्टोर होते हैं?
user1028270

1
@edwardtorvalds - सभी udevआमतौर पर, और हाँ, स्वचालित रूप से नियंत्रित करते हैं ।
मोकेसर

जवाबों:


17

संपूर्ण कर्नेल को बूट में लोड किया जाता है, आमतौर पर initramfsआजकल के साथ । (यह अभी भी संभव है initramfsकि डेस्कटॉप के बिना सर्वर पर बूट करने के लिए एक सिस्टम स्थापित किया जाए जो डेस्कटॉप और सर्वर पर असामान्य हो।)

initramfsकी भूमिका "असली" फ़ाइल सिस्टम माउंट और सिस्टम बूटिंग जारी रखने के लिए आवश्यक कार्यक्षमता प्रदान करना है। इसमें कर्नेल मॉड्यूल और विभिन्न बायनेरिज़ शामिल हैं: आपको कम से कम udev, शायद कुछ नेटवर्किंग की आवश्यकता होती है, और kmodजो मॉड्यूल लोड करता है।

मॉड्यूल को केवल बूट की तुलना में बाद में कर्नेल में लोड किया जा सकता है, इसलिए द्वारा कर्नेल की कोई विशेष तैयारी नहीं है initramfs। वे कहीं भी रखा जा सकता है: initramfs, /lib/modulesवास्तविक फाइल सिस्टम पर, एक विकास पेड़ में यदि आप एक मॉड्यूल विकसित कर रहे हैं ... initramfsकेवल मॉड्यूल जो रूट फाइल सिस्टम (जो बाकी शामिल हैं) माउंट करने के लिए आवश्यक हैं शामिल करने के लिए की जरूरत है।


ठीक है जो मेरे लिए समझ में आता है। मुझे लगता है कि मैं कर्नेल छवि और फ़ाइल सिस्टम का उपयोग कर रहा था, जो स्पष्ट रूप से पूरी तरह से अलग हैं।
user1028270

5

पूरे कर्नेल (लेकिन इसके मॉड्यूल नहीं) को मेमोरी में लोड किया जाएगा। यदि ऐसे मॉड्यूल हैं जो कर्नेल को किसी भी फाइल सिस्टम के उपलब्ध होने से पहले की आवश्यकता होगी (इसका आमतौर पर फाइल सिस्टम और उनके उपकरणों के लिए ड्राइवरों का मतलब है), तो वे मॉड्यूल इनट्रामरफ (मेमोरी में) में होंगे, और कर्नेल उन्हें वहां से लोड करेगा। अन्य मॉड्यूल को फ़ाइल सिस्टम से बाद में लोड किया जा सकता है।


3

आधुनिक लिनक्स सेटअप में कर्नेल भारी मॉड्यूल आधारित होता है, यानी, कर्नेल उचित (बूट में रैम पर लोड) में केवल नंगे न्यूनतम कार्यक्षमता शामिल है, बाकी सभी मॉड्यूल (रनटाइम पर लोड करने योग्य) के रूप में संकलित किए जाते हैं। इस काम को करने के लिए भी जब उदाहरण के लिए बूट के लिए आवश्यक डिवाइस या फाइलसिस्टम मॉड्यूल हैं, एक initramfsकर्नेल के साथ भरी हुई है (जैसा कि नाम से पता चलता है, यह एक रैम क्षेत्र है जो एक साधारण फाइल सिस्टम के साथ बूट पर मुहिम शुरू करता है)। यह अस्थायी फाइल सिस्टम चालू है /, और इसमें स्टार्टअप प्रोग्राम और आवश्यक मॉड्यूल शामिल हैं। एक बार स्टार्टअप चालू हो जाने के बाद initramfs, लिनक्स एक pivot_root(8)एग्जिक्यूट करता है , जो असली /और कंटेंट को टॉस करता है initramfs

इस जटिलता की बात यह है कि जैसे एक वितरण एक कर्नेल (न्यूनतम कर्नेल और मॉड्यूल का पूरा सेट) को संकलित कर सकता है , और कर्नेल की स्थापना पर initramfsलक्ष्य मशीन के हार्डवेयर और सेटअप के अनुरूप बनाता है । यह सब "व्यक्तिगत कंप्यूटर" के विभिन्न प्रकार के उपकरणों और कॉन्फ़िगरेशन के कारण आवश्यक है।


यह नहीं है pivot_root
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.