क्यों कुछ लिनक्स सिस्टम पर, रूट फाइलसिस्टम mtab में / dev / <real device node> के बजाय / dev / root के रूप में दिखाई देता है?


11

मैंने विभिन्न लिनक्स सिस्टमों पर देखा है, जहां वास्तविक डिवाइस नोड (उदाहरण के लिए /dev/sda1) के /dev/rootबजाय, रूट डिवाइस वास्तविक फाइल सिस्टम के रूप में या प्रकट होता है , mtabकहते हैं कि यह एक फाइलसिस्टम कहलाता है rootfs(जो वास्तविक फाइलसिस्टम के रूप में प्रकट होता है /proc/filesystems, लेकिन में कोड नहीं है <linux-kernel-source-tree>/fs)। वास्तविक रूट डिवाइस नोड (जैसे कि rdev, और क्रोमियम OS रूटदेव) को निर्धारित करने के लिए कुछ विशेषताओं का उपयोग करने के लिए विभिन्न उपयोगिताओं को बनाया गया है। मुझे यह पढ़ने के अलावा कहीं और कोई तार्किक स्पष्टीकरण नहीं मिल सकता है कि बहुत छोटे एम्बेडेड उपकरणों को हमेशा /devअपने रूट डिवाइस के लिए एक डिवाइस नोड नहीं होना चाहिए। (क्या यह सच है, और यदि ऐसा है, तो क्या यह मेरे सवाल का जवाब है?) Mtab कभी-कभी क्यों कहता है /dev/root(और मुझे लगता है कि मैंने इसे देखा होगाrootdevएक बार) असली डिवाइस नोड के बजाय, और मैं इसे हमेशा वास्तविक डिवाइस नोड कैसे कह सकता हूं? कर्नेल सबसे पहले rootcmdline में पैरामीटर का पालन ​​करते हुए रूट डिवाइस को मापता है, फिर init/systemdइसे fstabसही के अनुसार मापता है ? यदि ऐसा है, तो मैं initबनाए रखता हूं mtab। यदि मेरा सिद्धांत सही है, तो मैं initवास्तविक रूट डिवाइस नोड को कैसे लिख सकता हूं mtab? मैंने देखा कि /etc/mtabवास्तव में यह एक प्रतीकात्मक कड़ी है /proc/mounts, जिसका अर्थ mtabहै कि कर्नेल द्वारा बनाए रखा जाएगा । तो मैं कैसे एक कर्नेल को कॉन्फ़िगर / पैच करता हूं, यह कहने के बजाय कि रूट डिवाइस नोड पथ है /dev/root, mtabमें वास्तविक डिवाइस नोड है?

जवाबों:


4

यह आमतौर पर एक इनट्राम्राम्स का उपयोग करने की एक कलाकृति है।

गिरी प्रलेखन से ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

रूटफुट क्या है?

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

अधिकांश सिस्टम रूटफुट पर बस एक और फाइल सिस्टम को माउंट करते हैं और इसे अनदेखा करते हैं। अंतरिक्ष की मात्रा का एक खाली उदाहरण जो छोटा होता है, वह छोटा होता है।

इस प्रकार rootfsरूट फाइलसिस्टम है जो कि इनट्रैमफ्स के लिए बनाया गया था, और इसे अनमाउंट नहीं किया जा सकता है।

के संबंध में /dev/root, मैं इस पर कम निश्चित हूं, लेकिन अगर मुझे /dev/rootinitrd का उपयोग करते समय सही ढंग से याद किया जाता है (initramfs के समान नहीं)।


mountइस सेटअप के साथrootfs on / type rootfs (rw) initrd और /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)ext2 हार्ड डिस्क के लिए देता है ।
सिरो सेंटिल्ली 冠状 iro iro 法轮功 ''

/dev/rootinitramfs के कुछ कार्यान्वयन द्वारा उपयोग किया जाता है, लेकिन अन्य नहीं - इन मामलों में यह कर्नेल के कारण नहीं है। जब इनट्रामाफ़्स का उपयोग नहीं किया जाता है, तो यह कर्नेल द्वारा उपयोग किया जाने वाला प्लेसहोल्डर मान प्रतीत होता है। (शायद इसे बाद के कुछ कर्नेल संस्करण में हटाया जा सकता है)। stackoverflow.com/questions/37310046/…
sourcejedi


2

लिनक्स में /dev/root, यदि मौजूद है, तो बूट समय पर बनाए गए वास्तविक डिवाइस के लिए एक सिमलिंक है।

आप बूट किए गए कर्नेल के पैरामीटर को readlink /dev/rootया तो उपयोग करते हैं या cat /proc/cmdlineदेख सकते हैं root, और इस प्रकार इसके पीछे के वास्तविक उपकरण का पता लगा सकते हैं।

आदमी से dracut(8)

हालाँकि, एक सफल बूट के साथ जारी रखने के लिए, उद्देश्य आपके रूट वॉल्यूम का पता लगाना और एक सिमलिंक / डेव / रूट बनाना है जो फ़ाइल सिस्टम को इंगित करता है।


मैं पूरी तरह से निश्चित नहीं हूं कि क्या /dev/rootरेडहैट आधारित वितरण का एक गुण है।
रुई एफ रिबेरो

खैर, मेरे डेबियन 8 नहीं है /dev/root/। एक पुराने CentOS पर यह एक सिम्लिंक के बजाय एक वास्तविक डिवाइस नोड लगता है।
इलकाचू

1
खैर, OpenEmbedded की base-filesरेसिपी काfstab उल्लेख है /dev/root, इसलिए यह Red Hat से उत्पन्न डिस्ट्रोस नहीं है जो इसका उपयोग कर रहे हैं।
पावती
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.