टूटी हुई लिनक्स स्थापना को पुनर्प्राप्त करने के लिए चेरोट तैयार करने का उचित तरीका क्या है?


52

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


एक वसूली प्रक्रिया के लिए एक चिरोट वातावरण तैयार करने के लिए उचित कदम क्या हैं ?

में कई स्थितियों , एक टूट लिनक्स स्थापना की मरम्मत सबसे अच्छा स्थापना के भीतर से किया जाता है। लेकिन अगर सिस्टम बूट नहीं होगा, तो आप इसे भीतर से कैसे ठीक करेंगे?

मान लें कि आप एक वैकल्पिक प्रणाली में बूट करने के लिए प्रबंधन करते हैं। एक बार वहाँ, आप इसे ठीक करने के लिए अपने टूटे हुए स्थापना का उपयोग करने की जरूरत है। कई पुनर्प्राप्ति हाउ-टोस कार्यक्रमों को चलाने के लिए चेरोट का उपयोग करने की सलाह देते हैं जैसे कि आप वास्तव में टूटी हुई स्थापना में बूट होते हैं।

  • मूल प्रक्रिया क्या है?
  • क्या पालन करने के लिए सर्वोत्तम प्रथाओं को स्वीकार किया जाता है?
  • किसी विशेष पुनर्प्राप्ति कार्य के लिए मूल तैयारी चरणों को अनुकूलित करने के लिए किन चर पर विचार करने की आवश्यकता है?

जैसा कि यह कम्युनिटी विकी है, इस सवाल को संपादित करने के लिए बेझिझक इसे सुधारें।

जवाबों:


72

यहाँ कुछ संसाधन हैं:

"चेंजिंग रूट" या "चेरोटिंग" आपके फाइलसिस्टम के हिस्से पर ज़ूम करने के लिए एक विधि है, इसलिए, उदाहरण के लिए, /pathजो पूर्व में सुलभ था , का उल्लेख करेगा /mnt/path। "रूट" अभिव्यक्ति "चेरोट" रूट फाइलसिस्टम को संदर्भित करता है /, रूट उपयोगकर्ता को नहीं। (हालांकि आम तौर पर आपको रूट उपयोगकर्ता विशेषाधिकारों की आवश्यकता होगी ताकि क्रॉच करें।)

तैयारी

  • इस गाइड के सभी चरणों को रूट उपयोगकर्ता के रूप में प्रदर्शन करना होगा।

  • हमें लगता है कि आपकी हार्ड डिस्क / dev / sda1 पर है और इसका फ़ाइल एक्सटेंशन ext3 है। यदि आपको अपनी डिस्क का स्थान और फ़ाइल प्रकार पता नहीं है, तो इसका आउटपुट पढ़ें fdisk -l

  • सुनिश्चित करें कि आपके द्वारा बूट किए गए सिस्टम के आर्किटेक्चर (जैसे कि यह एक 32 बिट लाइवसीडी) है और आप जिस सिस्टम में प्रवेश करना चाहते हैं (जैसे यह आपकी हार्ड ड्राइव पर 32 बिट का इंस्टॉलेशन है) मैच। आप उपयोग करके बूट किए गए आर्किटेक्चर को निर्धारित कर सकते हैं uname -m

  • सुनिश्चित करें कि आपके द्वारा आवश्यक किसी भी कर्नेल मॉड्यूल लोड किए गए हैं।

  • यदि आपको इसकी आवश्यकता है तो अपना नेटवर्क सेट करें (जैसे, अपडेट किए गए पैकेजों को स्थापित करने के लिए)।

  • यदि आवश्यक हो तो अपने स्वैप विभाजन को प्रारंभ करें (जैसे, swapon /dev/sda3)।

चुरोट का प्रदर्शन

cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev

यदि आपकी /bootनिर्देशिका आपके से भिन्न विभाजन पर है /, और आप उस पर फ़ाइलों में हेरफेर करना चाहते हैं (जैसे, यदि आप GRUB के साथ काम कर रहे हैं, तो कर्नेल अपग्रेड करना, आदि), आपको उस विभाजन को माउंट करने की भी आवश्यकता होगी। यदि यह / dev / sda2 पर है और इसका फ़िलाइट ext2 है, तो करें:

mount -t ext2 /dev/sda2 /mnt/boot

इसी तरह आपके फाइलसिस्टम के किसी भी अन्य हिस्से ( /var, /usr) के लिए जो अलग-अलग विभाजनों पर रहते हैं , लेकिन जिनकी आपको पहुंच की आवश्यकता होती है। आम तौर पर जब आप कुछ ठीक करने के लिए चुरोटिंग कर रहे होते हैं, तो आपको / घर तक पहुंच की आवश्यकता नहीं होगी, इसलिए आपको इससे परेशान होने की आवश्यकता नहीं है।

(आपके द्वारा क्रियोट किए जाने के बाद फाइलसिस्टम माउंट करना भी संभव है, लेकिन यह पहले से करने के लिए अधिक स्मार्ट है। इसका कारण यह है कि जब आप इसे करते हैं, तो बाहर के / कर्नेल वातावरण को माउंट किए गए फाइल सिस्टम के बारे में नहीं पता होगा, इसलिए यदि आप भूल जाते हैं चेरोट से बाहर निकलने से पहले उन्हें umount कर दें, सिस्टम को पता नहीं चलेगा कि उन्हें बंद करना है या तो वह बंद हो जाता है या तो। यह उन फाइल सिस्टम को नुकसान पहुंचा सकता है।)

यदि आप अपना नेटवर्क सेटअप कर चुके हैं और इसे क्रॉओटेड सिस्टम में उपयोग करना चाहते हैं, /etc/resolv.confतो कॉपी करें ताकि आप डोमेन नामों को हल कर सकें:

cp -L /etc/resolv.conf /mnt/etc/resolv.conf

अब आप माउंटेड फाइल सिस्टम में जाने के लिए तैयार हैं:

chroot /mnt /bin/bash

(यदि यह एक त्रुटि देता है chroot: cannot run command '/bin/bash': Exec format error, तो यह आमतौर पर इंगित करता है कि आपने एक आर्किटेक्चर (जैसे x86_32) के साथ बूट किया है और दूसरे (जैसे x86_64) में घूमने की कोशिश कर रहे हैं। समाधान एक LiveCD का उपयोग करना है जिसमें उसी आर्किटेक्चर का उपयोग करना है जिस सिस्टम को आप चाहते हैं। चुरोट में।)

इस बिंदु पर, आप अभी भी उस कर्नेल को चला रहे हैं जिसे आपने बूट किया था, लेकिन सभी रास्तों /pathका उल्लेख होगा कि क्या उपयोग किया जाता है /mnt/path

यदि आप GRUB के साथ कुछ भी कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता होगी कि आपकी /etc/mtabफ़ाइल अद्यतित है:

grep -v rootfs /proc/mounts > /etc/mtab

यह इस बिंदु पर सहायक भी हो सकता है:

source /etc/profile
export PS1="(chroot) $PS1"  # add a reminder to your prompt

अपना गंदा काम करो

इस बिंदु पर, आप जो भी समस्या निवारण कर सकते हैं, उसे आप कर सकते हैं:

  • अपने डिस्क के MBR पर GRUB का आकार दें
  • एक भूल पासवर्ड रीसेट करें
  • कर्नेल अपग्रेड करें (या डाउनग्रेड करें)
  • अपने initramdisk का पुनर्निर्माण करें
  • अपने / etc / fstab को ठीक करें
  • अपने पैकेज प्रबंधक का उपयोग करके संकुल को पुनर्स्थापित करें
  • जो कुछ

सफाई करना

जब आप समाप्त कर लें, तो सुनिश्चित करें कि सभी चल रहे कार्यक्रम बंद हो गए हैं। फिर चुरोट से बाहर निकलें:

exit

अब आपके द्वारा लगाए गए सभी विभाजनों को अनमाउंट करें:

umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}

अंत में अपनी हार्ड ड्राइव को अनमाउंट करने का प्रयास करें:

umount /mnt

यदि आपको यह कहते हुए कोई त्रुटि मिलती है कि / mnt (या कोई अन्य विभाजन) व्यस्त है, तो इसका मतलब दो चीजों में से एक हो सकता है:

  • एक कार्यक्रम चुरोट के अंदर चल रहा था।

  • या अधिक बार: इस माउंट पर अभी भी एक माउंट पॉइंट मौजूद है। उदाहरण के लिए, / mnt / usr को अभी भी माउंट किया गया है जब अनमाउंट / mnt की कोशिश कर रहा है।

उत्तरार्द्ध मामले में, पहले अपमानजनक माउंट बिंदु को अनमाउंट करें। सभी वर्तमान माउंट बिंदुओं का अनुस्मारक प्राप्त करने के लिए, mountबिना किसी पैरामीटर के साथ चलाएँ ।

आखिरकार:

reboot

10
तैयारी के रूप में, मैं अपने द्वारा उपयोग किए जाने chroot.shवाले प्रत्येक सिस्टम के मूल में एक स्क्रिप्ट को छोड़ने के लिए कहता हूं, जिसकी सामग्री कम या ज्यादा ऊपर मेल खाती है। जब मुझे लाइवसीडी या किसी चीज से उस सिस्टम में चेरोट करने की आवश्यकता होती है, तो मैं बस रूट फाइलसिस्टम को माउंट करता हूं और चेरोट स्क्रिप्ट चलाता हूं। सही आदेशों के लिए और अधिक उन्मत्त गुगली नहीं।
रयान थॉम्पसन

4
आप, श्रीमान, मेरी बेकन - शानदार लेखन को बचाया। इस तरह की स्थितियों में, मुझे लगता है कि SO का +1000 बटन था।
16

1
इसका उपयोग करें: SHELL=/bin/bash chroot /mntयदि livecd का डिफॉल्ट SHELL क्रोम्ड एनवायरनमेंट (systemrescuecd का डिफाल्ट zsh एक उदाहरण है) जैसे !Vim में ठीक करने के लिए नहीं है।
एलोइस महदाल

मुझे पता चला कि आपको /runइन दिनों के साथ माउंट करने की भी आवश्यकता है mount --bind /run /mnt/run
सेंगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.