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

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

यह काम किस प्रकार करता है

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

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

यह लगभग आपके सिस्टम पर फाइलें कैसे रखी जाएंगी, सामान्य विभाजन पर सामान्य फाइलों के रूप में बस बैठेगी, जब तक कि हम उन्हें कुछ विशेष बनाने के लिए "chroot" का उपयोग न करें, तब तक किसी अन्य फाइल के समान व्यवहार करें।

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

उदाहरण के लिए, यदि आप / mnt / guest में chrooted हैं और "ls" टाइप करते हैं, तो यह उस chrooted वातावरण के अंदर से "ls" कमांड पढ़ रहा है, मेजबान सिस्टम पर "ls" कमांड से पूरी तरह से अनजान है। यदि आप "फ़ायरफ़ॉक्स" टाइप करते हैं, तो यह फ़ायरफ़ॉक्स को नई रूट के अंदर से चलाता है, भले ही आपने होस्ट पर फ़ायरफ़ॉक्स इंस्टॉल किया हो या नहीं।

अतिथि Distro प्राप्त करना और उपयोग करना

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

ये कदम एक सज्जन प्रणाली के लिए सभी मूल फाइलों को डाउनलोड करने जा रहे हैं, उन्हें हमारी लक्षित निर्देशिका में निकालें (मैं / mnt / guest का उपयोग करूँगा लेकिन आप अपनी पसंद की किसी भी चीज का उपयोग कर सकते हैं) और उसके बाद उस निर्देशिका में घुसपैठ कर सकते हैं, इसलिए इसे माना जाता है नई रूट (/) निर्देशिका। आपको निम्न में से कुछ आदेशों के लिए रूट (सुडो) अनुमतियों की आवश्यकता हो सकती है।

 mkdir / mnt / guest cd / mnt / guest wget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2 tar -jxvf stage3-x86-2008.0.tar.bz2 chroot / mnt / अतिथि 

लाइन नंबर के क्रम में, वे आदेश निम्न चरणों का पालन करते हैं:

  1. हमारे अतिथि सिस्टम के लिए रहने के लिए जगह बनाएं
  2. उस जगह में ले जाएं
  3. Gentoo सिस्टम फ़ाइलों को डाउनलोड करें
  4. उन्हें निकालें
  5. रूट (/) निर्देशिका के रूप में इस नई जगह का इलाज करें

निम्नलिखित स्क्रीनशॉट को यह दिखाने में मदद करनी चाहिए कि एक बार जब हमने रूट के रूप में हमारी नई निर्देशिका को जोड़ने के लिए क्रोट का उपयोग किया है, तो यह अब फाइल सिस्टम पेड़ में पिछली शाखाओं से अलग है।

स्क्रीनशॉट को समझाने के लिए, हम मेजबान सिस्टम पर एक सामान्य कमांड प्रॉम्प्ट से शुरू कर रहे हैं। मैं अपनी वर्तमान निर्देशिका को प्रदर्शित करने के लिए पीडब्ल्यूडी का उपयोग कर रहा हूं, जहां सभी जेनेटू की फाइलें सादे पुरानी फाइलों के रूप में नहीं हैं, जिनका कोई विशेष अर्थ नहीं है। मैं फिर इस निर्देशिका को नई रूट के रूप में इलाज करने के लिए क्रोट का उपयोग करता हूं, और अब आप दृष्टि से देख सकते हैं कि मेरा प्रॉम्प्ट बदल गया है क्योंकि कमांड लाइन अब जेंटू के रूट वातावरण के भीतर से अपनी सभी जानकारी (प्रॉम्प्ट को आकर्षित करने के तरीके सहित) खींच रही है। उस नए आदेश पेड़ के भीतर मौजूद उन आदेशों पर निर्भर करते हुए मेरे द्वारा किए गए सभी आदेश और क्रियाएं। जब मैं फिर से pwd टाइप करता हूं, तो यह अब / mnt / guest नहीं कहता है, क्योंकि जहां तक ​​वह खोल जानता है, उस पेड़ के अंदर जो कुछ भी देखता है उसके अलावा कुछ भी मौजूद नहीं है।

मन में रखने के लिए चीजें

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

यह विधि निश्चित रूप से वर्चुअलाइजेशन के प्रतिस्थापन नहीं है, और वीएम सॉफ़्टवेयर सब कुछ नहीं कर सकता है। अतिथि प्रणाली वास्तव में कभी भी "बूट" या इनिट स्क्रिप्ट चलाती नहीं है, और यह संभव है कि आपके अतिथि ओएस को आपके होस्ट कर्नेल की पेशकश की कुछ विशेषताओं की आवश्यकता हो।

किस लिए?

जब मैंने अतीत में लोगों को इस तकनीक का उल्लेख किया है, तो उन्होंने अक्सर "यह अच्छा है, लेकिन आप इसके लिए क्या उपयोग करेंगे?" के आधार पर कुछ कहा है। व्यक्तिगत रूप से मुझे chroot के लिए कई उपयोग मिल गए हैं:

  • एक प्राचीन पर्यावरण में परीक्षण विकास सॉफ्टवेयर
  • एक और वितरण के लिए सॉफ्टवेयर चलाएं
  • सॉफ़्टवेयर चलाएं जिसके लिए आपके वर्तमान डिस्ट्रो के पुराने या नए संस्करण की आवश्यकता है
  • रिबूट किए बिना किसी भिन्न विभाजन पर लिनक्स अधिष्ठापन तक पहुंचें
  • एक लाइव सीडी बूट करें और अपनी स्थापना या GRUB की मरम्मत के लिए chroot का उपयोग करें
  • उस ड्राइव तक पहुंचें जहां आप उपयोगकर्ता / पास भूल गए हैं
  • 64-बिट वातावरण में 32-बिट ऐप चलाएं

और मुझे यकीन है कि वहां बहुत कुछ है जो मैंने कभी नहीं किया है। क्या आपने कभी कई distros चलाने के लिए chroot इस्तेमाल किया है? लाइव सीडी से लिनक्स सिस्टम की मरम्मत कैसे करें? हमें टिप्पणियों में बताएं।