पता करें कि लिनक्स में डिवाइस / देव / रूट क्या दर्शाता है?


17

लिनक्स पर, एक /dev/rootडिवाइस नोड है। यह एक अन्य डिवाइस नोड के समान ब्लॉक डिवाइस होगा, जैसे /dev/sdaX। मैं /dev/rootइस स्थिति में 'वास्तविक' डिवाइस नोड का समाधान कैसे कर सकता हूं , ताकि मैं उपयोगकर्ता को एक समझदार डिवाइस नाम दिखा सकूं?

उदाहरण के लिए, मैं इस स्थिति का सामना कर सकता हूं जब पार्सिंग किया जाता है /proc/mounts

मैं उन समाधानों की तलाश कर रहा हूं जो शेल / अजगर स्क्रिप्ट से काम करेंगे लेकिन सी नहीं।


क्या आपने यहाँ जाँच की है? linux-diag.sourceforge.net/Sysfsutils.html यह कर्नेल को सभी प्रकार के संलग्न उपकरणों के बारे में क्वेरी करने का तरीका सुझाता है, निश्चित रूप से, यदि आप इसकी तलाश कर रहे हैं तो नहीं!

जवाबों:


14

से root=पैरामीटर पार्स करें /proc/cmdline


वाह, बिजली की प्रतिक्रियाएं :-)

1
एक प्रतीकात्मक लिंक को dereferencing की तुलना में बहुत सुरक्षित। +1 :)
टिम पोस्ट

1
यह तीन डिस्ट्रोस (fc14, rhel5, ubuntu 11.04) पर काम करता है जिसे मैंने देखा है, थोड़े से कैविटी के साथ कि रूट = UUID = प्रकार के तर्कों से निपटने के लिए एक अतिरिक्त कदम की आवश्यकता है।
kdt

मुझे इस बात में दिलचस्पी है कि यह रीडलिंक समाधान से अधिक सुरक्षित क्यों है, क्या कोई विस्तृत कर सकता है?
ओपेलो

रीडलिंक हमेशा काम नहीं करता है, मैं अभी इस समस्या पर काम कर रहा हूं और एक ऐसा उपयोगकर्ता पाया गया जिसका सिस्टम कोई परिणाम नहीं दिखाता है: रीडलिंक / देव / रूट - जो कि मैं जिस कार्यक्रम में काम कर रहा हूं, उसमें एक गड़बड़ है, जिसके कारण मैं आया था इस धागे को। सही परीक्षण पहले करना है: रीडलिंक / देव / रूट, फिर यदि अशक्त, इसे / proc / cmdline में ढूंढें, लेकिन पार्सिंग / proc / cmdline बेहतर समाधान के रूप में आसान नहीं है, इसलिए मैं देखता रहूंगा।
छिपकली

12

जिन प्रणालियों को मैंने देखा है, /dev/rootवे वास्तविक डिवाइस के लिए एक सिमलिंक है, इसलिए readlink /dev/root(या readlink -f /dev/rootयदि आप पूर्ण पथ चाहते हैं), तो यह करेंगे।


या बस ls -l /dev/root- टाइप करने के लिए कम :)
rozcietrzewiacz

@jankes, लेकिन फिर आपको ls(एक स्क्रिप्ट में उपयोग करने के लिए कुछ के लिए कहा) के आउटपुट को पार्स करना होगा ।
cjm

आह, माफ करना - कि अनदेखी की।
rozcietrzewiacz

नहींं - मेरे RHEL5 मशीन पर यह निश्चित रूप से सिम्लिंक नहीं है, हालांकि FC14 या ubuntu 11.04 मशीन पर है।
kdt

1
आर्चलिनक्स पर काम नहीं करता है।
g33kz0r

7

खैर /dev/rootअसली डिवाइस के लिए सिर्फ एक प्रतीकात्मक लिंक है, इसलिए आप readlink(2)यह पता लगाने के लिए उपयोग कर सकते हैं कि यह एक प्रोग्राम से कहां इंगित करता है, या readlink(1)शेल स्क्रिप्ट से एक ही काम करना है।


नहीं। आर्कल्विनक्स पर काम नहीं करता है
g33kz0r

डेबियन पर भी नहीं,
खुले तौर

सूची में ubuntu जोड़ें।
छिपकली

3

शायद मुझे कुछ याद आ रहा है, लेकिन इसके बारे में क्या:

mount|grep ' / '|cut -d' ' -f 1

3

इसे शायद अपडेट किया जाना चाहिए, क्योंकि यहां दी गई बहुत सी जानकारी भ्रामक है, और वास्तव में कभी भी व्यापक रूप से सही नहीं हो सकती है।

https://bootlin.com/blog/find-root-device/

/ आरोह बिंदु के लिए, आपको बस यह बताया जाता है कि यह / dev / रूट से मेल खाती है, जो कि आपके द्वारा खोजा जाने वाला वास्तविक उपकरण नहीं है।

बेशक, आप कर्नेल कमांड लाइन को देख सकते हैं और देख सकते हैं कि किस रूट रूट फाइल सिस्टम लिनक्स को बूट करने के लिए निर्देश दिया गया था (रूट पैरामीटर):

$ बिल्ली / proc / cmdline मेम = 512M कंसोल = ttyS2,115200n8 रूट = / dev / mmcblk0p2 rw rootwait

हालांकि, इसका मतलब यह नहीं है कि आप जो देखते हैं वह वर्तमान रूट डिवाइस है। कई लिनक्स सिस्टम मध्यवर्ती रूट फाइल सिस्टम (initramdisks और initramfs की तरह) पर बूट होते हैं, जिनका उपयोग केवल अंतिम एक तक पहुंचने के लिए किया जाता है।

एक बात जो यह बताती है कि जरूरी नहीं है कि वास्तविक रूप से वास्तविक डिवाइस रूट / cmdline वास्तविक रूप से चालू हो।

यह व्यस्त लोगों में से है, जो मुझे लगता है कि वे जानते हैं कि वे बूट स्थितियों के बारे में क्या बात कर रहे हैं।

https://www.linuxquestions.org/questions/slackware-14/slackware-current-dev-root-688189/page2.html

दूसरा उपयोगी संसाधन जो मुझे मिला, वह पुराने थ्रेडवेयर थ्रेड के प्रश्न के बारे में है / dev / root, इस थ्रेड की आयु से, हम देख सकते हैं कि सभी वेरिएंट हमेशा मौजूद थे, लेकिन मेरा मानना ​​है कि 'सबसे' डिस्ट्रोस प्रतीकात्मक का उपयोग कर रहे थे लिंक विधि, लेकिन यह एक सरल कर्नेल संकलित स्विच था, यह एक बना सकता है, या एक नहीं बना सकता है अगर मैं पोस्टरों को सही ढंग से समझ गया, अर्थात, इसे एक तरह से स्विच करें, और रीडलिंक / देव / रूट वास्तविक डिवाइस नाम की रिपोर्ट करता है, इसे स्विच करें। अन्य, और यह नहीं है।

चूँकि उस धागे का मुख्य विषय यह था कि कैसे / देव / जड़ से छुटकारा पाना है, उन्हें वास्तव में क्या है, इसे क्या बनाना है, आदि, जिसका अर्थ है, उन्हें इससे छुटकारा पाने के लिए इसे समझना था।

gnashly इसे अच्छी तरह से समझाया:

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

/ dev / root हमेशा वर्चुअल माउंट पॉइंट के रूप में मौजूद रहा है, भले ही आपने इसे कभी नहीं देखा हो। तो रूटफुट है (इसकी तुलना विशेष वर्चुअल डिवाइस जैसे कि proc और tmpfs से करें जिनकी कोई पूर्ववर्ती / देव नहीं है)

/ dev / root एक वर्चुअल डिवाइस है जैसे 'proc' या / dev / tcp '। इन उपकरणों के लिए / dev में कोई डिवाइस नोड नहीं है-यह पहले से ही वर्चुअल डिवाइस के रूप में कर्नेल में है।

यह बताता है कि क्यों एक प्रतीकात्मक लिंक जरूरी नहीं है। मुझे आश्चर्य है कि मैंने अब से पहले इस मुद्दे को कभी नहीं मारा, यह देखते हुए कि मैं कुछ कार्यक्रमों को बनाए रखता हूं जिन्हें इस जानकारी को जानने की आवश्यकता है, लेकिन पहले से कहीं अधिक देर से बेहतर।

मेरा मानना ​​है कि यहां दिए गए कुछ समाधान solutions अक्सर ’काम करेंगे, और शायद मैं क्या करूंगा, लेकिन वे समस्या का वास्तविक वास्तविक समाधान नहीं हैं, जो कि व्यस्त लेखक के रूप में नोट किया गया है, एक बहुत ही कार्यान्वयन में काफी जटिल है मजबूत तरीके से।

[अद्यतन:} कुछ उपयोगकर्ता परीक्षण डेटा प्राप्त करने के बाद, मैं माउंट विधि के साथ जा रहा हूं, जो कम से कम कुछ मामलों के लिए ठीक लग रहा था। / Proc / cmdline उपयोगी नहीं था क्योंकि बहुत सारे संस्करण हैं। पहले उदाहरण में, आप पुरानी विधि देखते हैं। यह कम और कम सामान्य है क्योंकि इसका उपयोग करने के लिए इसे दृढ़ता से हतोत्साहित किया जाता है (मूल / देव / sdx [0-9] प्रकार वाक्यविन्यास) क्योंकि वे पथ गतिशील रूप से बदल सकते हैं (स्वैप डिस्क आदेश, नई डिस्क डालें, आदि, और अचानक / देव / sda1 बन जाता है / dev / sdb1)।

root=/dev/sda1
root=UUID=5a25cf4a-9772-40cd-b527-62848d4bdfda
root=LABEL=random string
root=PARTUUID=a2079bfb-02

वी.एस. बहुत साफ और आसान पार्स करने के लिए:

mount
/dev/sda1 on / type ext4 (rw,noatime,data=ordered)

Cmdline के मामले में, आप देखेंगे, सिद्धांत में एकमात्र 'सही जवाब' है, पहला, पदावनत एक, क्योंकि आपको रूट लक्ष्य जैसे / dev / sdxy को रूट नहीं करना चाहिए

अगले दो को उस स्ट्रिंग से प्रतीकात्मक लिंक प्राप्त करने की आगे की क्रिया करने की आवश्यकता है / dev / disk / by-uuid या / dev / डिस्क / बाय-लेबल

अंतिम की आवश्यकता है कि मुझे विश्वास है कि parted -l का उपयोग करके यह पता लगाने के लिए कि parted id क्या इंगित कर रही है।

उदाहरण के लिए केवल वही वेरिएंट हैं जिन्हें मैंने जाना है और देखा है, उदाहरण के लिए जीपीटीआईडी ​​जैसे अन्य भी हो सकते हैं।

तो मैं इसका उपयोग कर रहा समाधान है:

पहले, देखें कि क्या / dev / root एक प्रतीकात्मक लिंक है। यदि यह है, तो सत्यापित करें कि यह / देव / डिस्क / बाय-यूआईडी या बाय-लेबल नहीं है, यदि यह है, तो आपको अंतिम वास्तविक पथ प्राप्त करने के लिए प्रसंस्करण का दूसरा चरण करना होगा। आपके द्वारा उपयोग किए जाने वाले टूल पर निर्भर करता है।

यदि आपको कुछ नहीं मिला, तो माउंट पर जाएं, और देखें कि यह कैसा है। अंतिम गिरावट के मामले के रूप में, एक मैं उपयोग नहीं कर रहा हूं क्योंकि इसके खिलाफ दिए गए तर्क भी जरूरी नहीं कि वास्तविक विभाजन या प्रश्न में डिवाइस मेरे लिए पर्याप्त है कि मैं अपने कार्यक्रम के लिए उस समाधान को अस्वीकार कर दूं। माउंट पूरी तरह से मजबूत समाधान नहीं है, और मुझे यकीन है कि पर्याप्त नमूने दिए गए हैं, ऐसे मामलों को ढूंढना आसान होगा जहां यह बिल्कुल भी सही नहीं है, लेकिन मेरा मानना ​​है कि ये दो मामले 'सबसे' उपयोगकर्ताओं को कवर करते हैं, जो मुझे चाहिए।

सबसे अच्छा, सबसे साफ और सबसे विश्वसनीय समाधान कर्नेल के लिए होता है कि वह हमेशा प्रतीकात्मक कड़ी बनाए, जिससे किसी भी चीज या किसी को चोट न पहुंचे और इसे अच्छा कहें, लेकिन यह वास्तविक दुनिया में काम नहीं करता है। ।

मैं इनमें से किसी को भी 'अच्छे या मजबूत' समाधान के रूप में नहीं मानता, लेकिन माउंट विकल्प 'अच्छा पर्याप्त' को संतुष्ट करने के लिए प्रकट होता है, और यदि वास्तव में मजबूत समाधान की आवश्यकता होती है, तो उस सामान का उपयोग करें जो अनुशंसित बॉक्स में है।

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