जैसा कि आपने कहा, initramfs का उद्देश्य "वास्तविक" रूट फाइलसिस्टम को माउंट करना है (यह अन्य चीजें भी कर सकता है, लेकिन यह सामान्य कार्य है)।
Initramfs के बिना, कर्नेल सामान्य रूप से एक विभाजन को रीड-ओनली के रूप में माउंट करेगा और फिर नियंत्रण को पास करेगा /sbin/init
। इनट्राम्राम्स इस कार्य को केवल कर्नेल से लेता है, आमतौर पर जब रूट फाइल सिस्टम सामान्य विभाजन नहीं होता है (mdraid, lvm, एन्क्रिप्टेड, आदि)।
अब, initramfs पर पृष्ठभूमि से अलग, /etc/fstab
आपका रूट फाइल सिस्टम पर रहता है। जैसे, जब initramfs लॉन्च किया जाता है, तो वह रूट फाइलसिस्टम नहीं होता है, और इसलिए यह fstab (चिकन और अंडे की समस्या) तक नहीं पहुंच सकता है।
इसके बजाय हमें initramfs का उपयोग करने के लिए कर्नेल बूट तर्कों में एक पैरामीटर पास करना होगा। आम तौर पर यह कुछ इस तरह है root=/dev/sdX
। हालाँकि, यह यह भी पता लगाने के लिए कुछ कर सकता है कि आपका रूट डिवाइस कहाँ है, और इसलिए इसका कोई पैरामीटर नहीं है। चूंकि यह सिर्फ सॉफ्टवेयर है (आमतौर पर एक स्क्रिप्ट), यह वास्तव में कुछ भी कर सकता है जो रूट डिवाइस को माउंट करना चाहता है।
अब, जैसा कि पहले कहा गया है, कर्नेल वास्तविक जड़ को केवल-पढ़ने के लिए माउंट करेगा। Initramfs को ठीक यही करना चाहिए। एक बार initramfs हो जाने के बाद, सिस्टम ठीक उसी तरह बूट होता है जैसे कि कोई initramfs नहीं था, और /sbin/init
शुरू होता है। यह init तब आपके सभी सामान्य बूट स्क्रिप्ट को शुरू करता है, और यह इन स्क्रिप्ट्स में से एक का काम है /etc/fstab
, पढ़ने के लिए रूट स्विच करना, पढ़ना-लिखना और अपने सभी अन्य फाइल सिस्टम को माउंट करना।