Initramfs रूट फाइलसिस्टम को केवल पढ़ने के लिए क्यों माउंट करता है


12

रूट फ़ाइल सिस्टम roinitramfs (और initrd) में आरोहित होने का कारण क्या है ।

उदाहरण के लिए Gentoo initramfs गाइड मूल फाइल सिस्टम के साथ mounts:

mount -o ro /dev/sda1 /mnt/root

निम्नलिखित क्यों नहीं?

mount -o rw /dev/sda1 /mnt/root

मैं देख सकता हूं कि शायद एक अच्छा कारण है (और इसमें शामिल है switchroot), हालांकि यह कहीं भी प्रलेखित नहीं लगता है।

जवाबों:


19

प्रारंभिक रैमडिस्क (initrd) आम तौर पर जड़ युक्त ही नहीं है जो यह करने के लिए बूटिंग बंद वास्तविक जड़ फाइल सिस्टम और हाथ माउंट करने के लिए की जरूरत है फाइल सिस्टम के एक छीन नीचे संस्करण है।

Initrd मौजूद है क्योंकि आधुनिक सिस्टम में, बूट लोडर को स्मार्ट नहीं बनाया जा सकता है ताकि रूट फाइल सिस्टम को मज़बूती से खोजा जा सके। बूट लोडर को कवर करने के लिए इस तरह के एक छोटे से कार्यक्रम के लिए बहुत अधिक संभावनाएं हैं। एनएफएस रूट, गैर-मानक RAID कार्ड आदि पर विचार करें, बूट लोडर को केवल BIOS प्लस का उपयोग करके अपना काम करना होगा जो भी बूट क्षेत्र में कोड हो सकता है।

Initrd को बूट लोडर कहीं मिल सकता है, और यह इतना छोटा है कि इसमें जितना अतिरिक्त स्थान लगता है उतना आमतौर पर किसी को भी परेशान नहीं करता है। (छोटे एम्बेडेड सिस्टम में, आमतौर पर कोई "वास्तविक" रूट नहीं होता है, बस initrd है।)

Initrd अनमोल है: इसकी सामग्री को सभी शर्तों के तहत संरक्षित किया जाना है, क्योंकि यदि initrd टूट जाता है, तो सिस्टम बूट नहीं हो सकता है। यह सुनिश्चित करने के लिए कि इसके लोडर को केवल रीड-ओनली लोड करने के लिए डिज़ाइन किया गया है। ऐसे अन्य सिद्धांत हैं जो इस ओर काम करते हैं, जैसे कि छोटे सिस्टम के मामले में जहां "वास्तविक" जड़ नहीं है, आप अभी भी अलग-अलग माउंट करते हैं /tmp, /var/cacheऔर इस तरह की चीजों को संग्रहीत करने के लिए। Initrd को बदलना केवल शायद ही कभी किया जाता है, और फिर बहुत सावधानी से किया जाना चाहिए।

सामान्य मामले, जहां के लिए वापस हो रही है एक असली जड़ फाइल सिस्टम, इसे शुरू किया गया है पढ़ने के लिए माउंट सिर्फ इसलिए initrd था। इसे तब तक केवल पढ़ने के लिए रखा जाता है जब तक कि अधिक समान कारणों के लिए संभव हो। वास्तविक रूट पर किसी भी लेखन को करने की आवश्यकता होती है, जब तक कि सिस्टम बूट नहीं किया जाता है, वरीयता द्वारा, या कम से कम जब तक बूट प्रक्रिया में देर हो जाती है जब तक कि वरीयता को संतुष्ट नहीं किया जा सकता है।

इस रीड-ओनली चरण के दौरान सबसे महत्वपूर्ण बात यह है कि रूट फाइल सिस्टम को यह देखने के लिए जांचा जाता है कि क्या वह साफ-सुथरा था। यह कुछ ऐसा है जिसे बूट लोडर निश्चित रूप से टिट्रोड पर छोड़ने के बजाय कर सकता है, लेकिन तब क्या होता है जब रूट फाइलसिस्टम साफ सुथरा नहीं था ? फिर इसे fsckजांचने के लिए कॉल करना होगा और संभवतः इसे ठीक करना होगा। तो, अगर इस कदम के लिए "वास्तविक" रूट को हैंडऑफ होने तक इंतजार करने के बजाय अगर यह जिम्मेदार था, तो कहां initrdमिलेगा fsck? आप कह सकते हैं कि आप कॉपी करने की जरूरत fsckमें initrdजब यह निर्माण, लेकिन अब यह बड़ा है। और उसके ऊपर, जिसे fsck आप कॉपी करेंगे? लिनक्स सिस्टम नियमित रूप से एक दर्जन या तो विभिन्न फाइल सिस्टम का उपयोग करते हैं। क्या आप उस समय केवल वास्तविक रूट के लिए आवश्यक एक की नकल करते हैंinitrdबनाया गया है? क्या आप initrdसभी उपलब्ध fsck.fooकार्यक्रमों को कॉपी करके आकार को गुब्बारा करते हैं, यदि मूल फाइल सिस्टम बाद में किसी अन्य फाइलसिस्टम प्रकार में माइग्रेट हो जाता है, और कोई initrd का पुनर्निर्माण करना भूल जाता है?

लिनक्स बूट सिस्टम आर्किटेक्ट ने इन समस्याओं के साथ initrd को बोझ नहीं करने के लिए बुद्धिमानी से चुना। उन्होंने वास्तविक रूट फाइलसिस्टम की वास्तविक रूट फाइलसिस्टम की जाँच को निर्धारित किया, क्योंकि यह एक बेहतर स्थिति में है जो कि initrd की तुलना में ऐसा करता है।

एक बार जब बूट प्रक्रिया इतनी आगे बढ़ जाती है कि ऐसा करना सुरक्षित होता है, तो initrd वास्तविक रूट के नीचे से स्वैप हो जाता है pivot_root(8), और फाइल-सिस्टम रीड-राइट मोड में रिमाउंट हो जाता है।


4
Initramfs केवल पढ़ने के लिए मुहिम नहीं की जाती है; कर्नेल इसे पढ़ने / लिखने वाले tmpfs में अनपैक करता है जिसे / के रूप में माउंट किया गया है। इसके अलावा pivot_root () का उपयोग अब मूल्यह्रास initrd में किया जाता है, लेकिन एक initramfs नहीं है, जो कि अधिकांश सिस्टम इन दिनों का उपयोग करते हैं (भले ही फ़ाइल अभी भी initrd नाम हो)। Initrd के साथ, pivot_root / sbin / init को निष्पादित करने से पहले हुआ था, जो कि fsck और rount / w पर गया था। एक initramfs के साथ, यह सिर्फ initramfs की सभी फ़ाइलों को हटा देता है, फिर असली रूट में chroots और / sbin / init निष्पादित करता है।
psusi

0

क्योंकि बूटअप के दौरान रूट फाइलसिस्टम हमेशा शुरू में केवल रीड-माउंटेड होता है। एक बार विभिन्न आत्म-परीक्षण पूर्ण हो जाने के बाद, यह रूट फाइल सिस्टम को पढ़ने / लिखने के रूप में बताता है और अन्य फाइल सिस्टम को माउंट करना शुरू कर देता है।


0

एक कारण मैं सोच सकता हूं कि किसी तरह के भ्रष्टाचार को रोकना है। उदाहरण के लिए, आप ext4 फाइलसिस्टम को ext2 (या इसके विपरीत) के रूप में माउंट कर सकते हैं और यह आरओ-मोड में सुरक्षित है, लेकिन इनट्राम से आरडब्ल्यू को माउंट करने पर असंगत प्रारूप में बदलाव हो सकता है।

ओह, और इसका एक और कारण है: initramfs में संभवतः fsck नहीं है, लेकिन आरडब्ल्यू को माउंट करने से पहले आपको फ़ाइल सिस्टम की जांच करने की आवश्यकता हो सकती है।

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