रिबूट के बिना कर्नेल के विभिन्न संस्करण के बीच स्विच करें


11

मैं रिबूट के बिना अपने सिस्टम पर स्थापित कर्नेल के विभिन्न संस्करण के बीच स्विच करना चाहता हूं।

यह कहना है कि यदि मेरे पास 3.0.0-16-genericवर्तमान में चल रहा है और मेरे पास पुराना कर्नेल 3.0.0-14-genericभी है, तो मैं 3.0.0-14-genericरिबूट किए बिना (अन्य कर्नेल) स्विच करने में सक्षम हो सकता हूं ।

(मुझे लाइव कर्नेल डिबगिंग करने और बदलाव करने की आवश्यकता है ताकि ऐसा करने के लिए मैं रिबूट न ​​कर सकूं)

जवाबों:


8

दो पूर्ण कर्नेल को स्वैप करने का कोई तरीका नहीं है। मुझे यकीन है कि आप लिनक्स की तरह एक अखंड कर्नेल के महत्व को समझ सकते हैं और क्यों इसे केवल प्रतिस्थापित करना असंभव बनाता है।

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

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


बस अपना एडिट देखा। Ksplice शायद मदद करने के लिए नहीं जा रहा है अगर आप मैन्युअल रूप से हैकिंग कर रहे हैं और "सर्विस" के रूप में डिबगिंग के लिए अपने खुद के कर्नेल का निर्माण कर रहे हैं, तो यह है कि वे विशेष अपडेट प्रदान करते हैं और वे कुछ ऐसा नहीं है जो आप अपने आप उत्पन्न कर सकते हैं।

यदि आप केवल एक आधिकारिक कर्नेल के खिलाफ चीजों का निर्माण कर रहे हैं , तो यह अभी भी काम कर सकता है।


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


1
लेकिन मैं अपनी बूट निर्देशिका में दो अलग-अलग गुठली के बीच स्विच करना चाहता हूं
कोडर

1
हाँ, आप दो गुठली के बीच मनमाने ढंग से स्विच करने में सक्षम नहीं होंगे। मैंने एक और विचार के साथ एक और संपादन जोड़ा है जो आपके लिए काम कर सकता है।
ओली

2

जैसा कि ओली ने कहा, आपका सबसे अच्छा शॉट शायद वर्चुअलाइजेशन है।

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

ArchWiki kexecपृष्ठ से लिया गया :

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

ध्यान दें कि उपरोक्त सभी सेवाएँ अभी भी पुनः आरंभ होंगी , जिसमें आपका init सिस्टम, डिस्प्ले सर्वर, नेटवर्किंग, इत्यादि शामिल हैं, हालांकि, यदि आप एक तेज़ पर्याप्त init सिस्टम का उपयोग करते हैं, जैसे systemd, तो आप 2-3 सेकंड में अपने नए कर्नेल में बूट कर सकते हैं, क्योंकि आप BIOS / UEFI और बूटलोडर को दरकिनार कर रहे हैं।


इसी तरह का विवरण RapidReboot Ubuntu Wiki पृष्ठ पर पाया जा सकता है ।


0

मुझे लगता है कि इन उत्तरों को अद्यतन करने की आवश्यकता है।

नहीं है kpatch अब जो अधिक से अधिक निवासी है, ksplice एट अल।

यह स्पष्ट कारणों से इन-कर्नेल डेटा संरचनाओं में परिवर्तन नहीं कर सकता है, इसलिए यह सुरक्षा हॉटपैच के लिए ज्यादातर उपयोगी है।

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

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