चुरोट में बूट करें?


13

मेरे पास एक हार्ड ड्राइव पर लिनक्स (डेबियन जेसी) स्थापित है। ड्राइव - sda1, ext4fs, और sda2- स्वैप

मेरे पास एक /chrootफोल्डर है। /chrootफ़ोल्डर में एक और सिस्टम स्थापित है ।

सवाल:

बूटमैनगर को कैसे बताएं, प्राथमिक प्रणाली को बूट करने के लिए (मुख्य, डेबियन जेसी), लेकिन सिस्टम में / चुरोट नहीं ? शायद, परिवर्तन /menu.lstऔर /chroot/etc/fstab? ( vmlinuz root=/dev/sda1/chroot?)

या प्रश्न का एक और प्रकार: क्या यह संभव है, कि लिनक्स को विभाजन की रूट डायरेक्टरी में नहीं, बल्कि फ़ोल्डर में स्थापित किया जाए? ( /another_linux/bin, /another_linux/home, /another_linux/etc, ...)


1
vmlinuz root=/dev/sda1/chrootकाम नहीं करेगा। एक शायद एक विधि के साथ इसका अनुकरण कर सकता है जो इसमें उपयोग किया जाता है initrd। जैसे देखें यहाँ । आप /new_rootवहाँ वर्णित के रूप में माउंट करते हैं, फिर cd /new_rootकरें cd /new_root/chrootऔर जारी रखें।
एन। 'सर्वनाम' मी।

जवाबों:


7

यह बूटलोडर या कर्नेल द्वारा नहीं किया जा सकता है। कर्नेल rootविकल्प के पैरामीटर जैसे कि root=/dev/sda1एक मानक यूनिक्स पाथनाम जैसा दिखता है, लेकिन वर्तमान में फ़ाइल सिस्टम के अनुसार ऐसे पाथनाम की व्याख्या की जाती है। जिस समय rootविकल्प की व्याख्या की जाती है, उस समय कोई माउंटेड फाइल सिस्टम नहीं होते हैं । खैर, लगभग कोई भी नहीं। कर्नेल इनिशियलाइज़ेशन के समय में न्यूनतम ramfsफ़ाइल सिस्टम का एक उदाहरण होता है जिसे rootfsप्रारंभिक प्रक्रिया के लिए रूट के रूप में माउंट किया जाता है start_kernel()rootविकल्प पैरामीटर की वास्तविक व्याख्या एक रूटीन में की जाती है जिसे कहा जाता है name_to_dev_t()। समर्थित सिंटैक्स में से एक /dev/nameप्रारूप है, जिसमें फ़ाइल सिस्टम के अस्थायी माउंट को करके नाम की व्याख्या की जाती sysfsहैrootfsरूट, और एक ब्लॉक डिवाइस प्रविष्टि मिलान नाम के तहत की तलाश में /sys/block। इस प्रक्रिया को यहां और अधिक विस्तार से समझाया गया है

वर्णित सेटअप को पहले न्यूनतम वातावरण में बूट करके किया जाना चाहिए जैसे कि एक द्वारा प्रदान किया गया है initrd, एक वास्तविक माउंट फाइल सिस्टम को /dev/sda1एक अस्थायी माउंटपॉइंट से माउंट करें , उदाहरण के लिए /mnt/rootfs, रूट निर्देशिका को बदलकर /mnt/rootfs/chrootउपयोग करें pivot_root(8)

यह कुछ इसी तरह से है कि LinuX कंटेनर ( LXC ) के लिए रूट फाइलसिस्टम कैसे सेटअप है। LXC लिनक्स के लिए एक ऑपरेटिंग सिस्टम-स्तरीय वर्चुअलाइजेशन कार्यान्वयन है। ऑपरेटिंग सिस्टम-स्तर वर्चुअलाइजेशन आमतौर पर वर्चुअल होस्टिंग वातावरण में एक हाइपरविजर द्वारा प्रबंधित पूर्ण वर्चुअलाइजेशन के हल्के विकल्प के रूप में उपयोग किया जाता है। ऑपरेटिंग सिस्टम-स्तरीय वर्चुअलाइजेशन में, एक एकल ऑपरेटिंग सिस्टम कर्नेल को कई अलग-अलग उपयोगकर्ता-अंतरिक्ष उदाहरणों के बीच साझा किया जाता है। प्रत्येक उदाहरण, जिसे अक्सर कंटेनर, जेल, वर्चुअल प्राइवेट सर्वर (वीपीई) या वर्चुअल एनवायरनमेंट (वीई) कहा जाता है, अनिवार्य रूप से एक अलग ऑपरेटिंग सिस्टम इंस्टॉलेशन है जिसे होस्ट सिस्टम पर स्वयं की निर्देशिका में रखा जाता है।


6

मैं एक ही समस्या का सामना करते आए और समाप्त हो गया इस लेखन यह विभिन्न प्रणालियों के पार दर्द काम करने के लिए (Debian, ubuntu वर्तमान में):

make_chroot_initrdमौजूदा एक से एक नई चिरोट-सक्षम इनिटर्ड छवि बनाने के लिए स्क्रिप्ट चलाएँ :

#  ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot

नई छवि बिल्कुल वैसी ही होगी, सिवाय अब वह एक chroot=बूट पैरामीटर को संभाल सकती है ।

Grub2 के साथ बूटलोडर के रूप में आप एक प्रविष्टि जोड़ सकते हैं /boot/grub/grub.cfg:
(या शायद बेहतर /etc/grub.d/40_custom)

menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
    insmod ext2                       # or whatever you're using ...
    set root='(hd0,7)'                # partition containing the chroot
    set chroot='/chroot/trusty'       # chroot path
    linux   $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
    initrd  $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}

(फ़ाइलों / विभाजनों को आपके मेल खाने के लिए बदलें)

सिस्टम-वाइड स्थापित

एक बार जब आप इसके साथ खुश हो जाते हैं तो आप परिवर्तनों को स्थायी बना सकते हैं
(जब तक कि initramfs-tools पैकेज अपग्रेड नहीं हो जाता)।
चिरोषित प्रणाली में:

# cd /usr/share/initramfs-tools
# cp -pdrv .  ../initramfs-tools.orig       # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u

अब से नियमित initrd छवि chroot बूटिंग का समर्थन करेगी।
एक अलग initrd.chroot का उपयोग करने की आवश्यकता नहीं है जो तब इसके साथ सिंक से बाहर निकल सकता है।

देखें boot_chroot जानकारी के लिए।


3

हां, आप Btrfs सबवॉल्म्स का उपयोग करके ट्रिक कर सकते हैं

पहले आपको यहाँ वर्णित के रूप में ext4 को btrfs में बदलने की आवश्यकता है

यदि यह अभी तक नहीं है, तो अपने क्रोकेट को उपविलेय में बदलें:

 sudo mv /path/to/chroot /path/to/chroot-tmp
 sudo btrfs subvol create /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot -r # for directories

अब आपके पास सबवोल्यूम है जिसका नाम पथ / से / चुरोट है । आप इससे जांच कर सकते हैंsudo btrfs subvol list /

अब आप ग्रब में सबवूमल रिकॉर्ड के लिए बूट बना सकते हैं। rootflags=subvol=path/to/chrootग्रब मेनू आइटम में बस लिनक्स कर्नेल लोड स्ट्रिंग में जोड़ें या स्वचालित रूप से जांच करने के लिए इसका उपयोग करें

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