प्राचीन समय में, कर्नेल को डिवाइस के रूट एफ / एफ की बड़ी / छोटी संख्या जानने के लिए हार्ड कोडित किया गया था और सभी डिवाइस ड्राइवरों को आरम्भ करने के बाद उस डिवाइस को माउंट किया गया था, जो कर्नेल में बनाए गए थे। rdev
उपयोगिता यह पुन: संयोजित किए बिना गिरी छवि में जड़ डिवाइस संख्या को संशोधित करने के लिए इस्तेमाल किया जा सकता है।
आखिरकार बूट लोडर साथ आए और कर्नेल को कमांड लाइन दे सकते हैं। यदि root=
तर्क पारित किया गया था, तो उस कर्नेल को बताया जहां मूल fs के बजाय मूल्य में बनाया गया था। ड्राइवरों को एक्सेस करने की आवश्यकता थी जो अभी भी कर्नेल में बनाए जाने थे। हालांकि तर्क /dev
निर्देशिका में एक सामान्य डिवाइस नोड की तरह दिखता है , जाहिर है /dev
कि रूट एफएस माउंट होने से पहले कोई निर्देशिका नहीं है, इसलिए कर्नेल वहां एक देव नोड नहीं देख सकता है। इसके बजाय, कुछ अच्छी तरह से ज्ञात डिवाइस नाम कर्नेल में कठिन कोडित हैं ताकि स्ट्रिंग को डिवाइस नंबर में अनुवाद किया जा सके। इस वजह से, कर्नेल चीजों को पहचान सकता है /dev/sda1
, लेकिन अधिक विदेशी चीजें जैसे कि /dev/mapper/vg0-root
या वॉल्यूम यूयूआईडी नहीं।
बाद initrd
में, तस्वीर में आया। कर्नेल के साथ, बूट लोडर initrd
छवि को लोड करेगा , जो कुछ प्रकार की संपीड़ित फाइलसिस्टम छवि थी (gzipped ext2 image, gzipped romfs image, squashfs अंत में प्रमुख बन गई)। कर्नेल इस छवि को एक रैमडिस्क में विघटित कर देगा और रूटडिस्क के रूप में रैमडिस्क को माउंट करेगा। इस छवि में असली के बजाय कुछ अतिरिक्त ड्राइवर और बूट स्क्रिप्ट थे init
। इन बूट लिपियों ने हार्डवेयर को पहचानने, छापेखाने और एलवीएम जैसी चीजों को सक्रिय करने, यूयूआईडी का पता लगाने और असली रूट को खोजने के लिए कर्नेल कमांड लाइन को पार्स करने के लिए विभिन्न कार्य किए, जो अब यूयूआईडी, वॉल्यूम लेबल और अन्य उन्नत चीजों द्वारा निर्दिष्ट किए जा सकते हैं। यह तो असली जड़ FS घुड़सवार /initrd
, तो मार डाला pivot_root
सिस्टम कॉल गिरी स्वैप करने के लिए /
और/initrd
, तब /sbin/init
असली जड़ पर अमल करें, जो तब बेकाबू हो जाएगा /initrd
और रैमडिस्क को मुक्त कर देगा।
अंत में, आज हमारे पास है initramfs
। यह एक समान है initrd
, लेकिन एक संपीड़ित फाइलसिस्टम छवि होने के बजाय जो कि रैमडिस्क में लोड है, यह एक संकुचित cpio संग्रह है। एक tmpfs को रूट के रूप में माउंट किया जाता है, और संग्रह को वहां निकाला जाता है। उपयोग करने के बजाय pivot_root
, जिसे एक गंदे हैक के रूप में माना जाता था, initramfs
बूट स्क्रिप्ट वास्तविक रूट को माउंट करते हैं /root
, सभी फाइलों को tmpfs रूट में हटाते हैं , और फिर निष्पादित chroot
करते हैं ।/root
/sbin/init