कुछ हालिया अपडेट के बाद, मेरा कंप्यूटर अब बूट नहीं है! यहाँ मैं निर्धारित कर सकता हूँ:
- यह एक बहुत ही हालिया कंप्यूटर है जो मुझे कॉर्पोरेट आईटी द्वारा प्रदान किया गया था। इसमें हाल ही में Intel CPU (Skylake जनरेशन) है।
- कंप्यूटर Ubuntu 16.04 चलाता है।
- कंप्यूटर ने मार्च में कुछ समय सही ढंग से बूट किया। समस्या संभवतः सॉफ़्टवेयर अद्यतन या हार्डवेयर बग के कारण है।
- मेरे पास एक और कंप्यूटर 16.04 चल रहा है जिसमें बहुत ही समान सॉफ्टवेयर इंस्टॉल किए गए हैं (मैंने इस्तेमाल किया
apt-clone
), और यह ठीक काम करता है। इसमें अलग-अलग हार्डवेयर हैं (amd64, लेकिन अलग-अलग सीपीयू, अलग-अलग GPU, आदि)। - कर्नेल शुरू होता है, initrd सही तरीके से काम करता है। जब मैं ग्राफिक्स मोड में एक स्प्लैश स्क्रीन के साथ बूट करता हूं, तो मुझे मेरे डीएम-क्रिप्ट वॉल्यूम के लिए पासवर्ड के लिए संकेत मिलता है, और आखिरी चीज जो मैं देखता हूं वह यह है कि यह सफलतापूर्वक घुड़सवार है।
- लॉगिन प्रॉम्प्ट प्राप्त करने से पहले हैंग होता है। जब कंप्यूटर हैंग होता है, तो यह एक मुश्किल हैंग होता है। यहां तक कि Alt+ SysRqकोई जवाब नहीं देता। सीपीयू जाहिर तौर पर 100% पर आ गया है क्योंकि प्रशंसकों को पूर्ण विस्फोट होता है।
- मेरे पास अभी भी वह कर्नेल है जिसे मैं रिबूट करने से पहले चला रहा था। जब मैं ग्रब मेनू में इस कर्नेल का चयन करता हूं, तो मुझे वही लॉकअप मिलता है। तो ऐसा लगता है कि यह एक पहले से मौजूद कर्नेल बग है, जो किसी और चीज से ट्रिगर हो जाता है - लेकिन क्या?
- यदि मैं स्प्लैश स्क्रीन को बंद कर देता हूं ( ग्रब में कमांड लाइन
splash
से हटाताlinux
हूं), तो मुझे कई सेवाएं शुरू होती हैं, फिर यह लॉक हो जाता है। ग्रब में कमांड लाइन
init=/bin/sh
को जोड़कर मैं एक रूट शेल प्राप्त कर सकता हूंlinux
। मैं भी जोड़कर आगे बढ़ सकता हूंsystemd.unit=basic.target systemd.shell
यह कई सेवाओं को शुरू करता है और tty9 पर एक रूट शेल चलाता है।
- यदि मैं
systemctl start multi-user.target
उस मूल शेल से चलाता हूं , तो कंप्यूटर लॉक हो जाता है। तो संभवतः समस्या इन सेवाओं में से एक द्वारा शुरू हो रही है। - मैं
systemctl list-dependencies multi-user.target
यह देखने के लिए दौड़ा कि क्या सेवाएं शुरू होंगी। मैंने मैन्युअल रूप से सूचीबद्ध निर्भरता को एक-एक करके शुरू किया, और सब कुछ ठीक होने लगा।
तो यह हार्डवेयर बग की तरह दिखता है (क्योंकि यह एक कंप्यूटर पर होता है लेकिन दूसरे पर नहीं) जो किसी सॉफ्टवेयर द्वारा ट्रिगर हो जाता है। लेकिन क्या सॉफ्टवेयर? चूंकि कंप्यूटर इतनी मेहनत से बंद होता है, मुझे कोई लॉग नहीं मिल सकता है। मुझे कोई उपयोगी कंसोल आउटपुट भी नहीं मिल सकता है।
उपयोगी डिबगिंग तकनीक:
- Alt+ SysRq: जादू SysRq कुंजी , जो आपको आपातकालीन रिबूट जैसी चीजें करने देती है। यह कर्नेल को बहुत कम स्तर पर एक्सेस करता है, इसलिए यह सभी लेकिन सबसे खराब क्रैश में काम करता है। मेरे मामले में, Alt+ SysRqजवाब नहीं देता है, जो दर्शाता है कि दुर्घटना कितनी गहरी है।
- बूट मापदंडों को संशोधित करने के लिए, Shiftपावर को स्विच करने के बाद कुछ सेकंड दबाकर रखें । BIOS को कीबोर्ड को इनिशियलाइज़ करने के बाद, लेकिन ऑपरेटिंग सिस्टम के बूट से पहले आपको इसे दबाना होगा। इससे ग्रब मेनू दिखाई देता है।
- ग्रब मेनू पर, eमेनू प्रविष्टि के लिए कमांड लाइन संपादित करने के लिए दबाएँ । लिनक्स बूट मापदंडों को बदलने के लिए, उस रेखा पर नेविगेट करें जो इसके साथ शुरू होती है
linux
। एक आधुनिक उबंटू पर, आपको "उबंटू के लिए उन्नत विकल्प" के तहत पुरानी गुठली मिलेगी। कमांड लाइन में वांछित परिवर्तन करने के बाद, बूट करने के लिए Ctrl+ दबाएँ x। आपके द्वारा यहां किए गए कोई भी परिवर्तन केवल इस बूट के लिए हैं, वे डिस्क पर सहेजे नहीं गए हैं। linux
कमांड लाइन पर कुछ उपयोगी विकल्प :quiet nosplash
लगभग सभी बूट संदेश छुपाता है। बूट के दौरान कंसोल पर संदेश प्राप्त करने के लिए उन्हें हटा दें, जिससे समस्याओं का निदान करने का कोई भी मौका होना आवश्यक है।recovery
आपको लगभग बिना सेवाओं के एक रूट शेल देता है। आपको रूट पासवर्ड जानना होगा। "पुनर्प्राप्ति मोड" मेनू प्रविष्टि इसका उपयोग करती है।init=/bin/sh
आपको बिना किसी सेवाओं के साथ एक रूट शेल देता है। सामान्य बूट को फिर से शुरू करने के लिए, चलाएंexec init
। आप इस बिंदु पर systemd विकल्प पास कर सकते हैं, जैसेexec init --unit=basic.target
init और कुछ सेवाएं शुरू करने के लिए (ध्यान दें कि यह लॉग इन करने का कोई तरीका शुरू नहीं करता है, इसलिए आपके पास एक और कंसोल पर चलने वाला शेल बेहतर होगा)। ध्यान दें कि रूट फाइलसिस्टम को केवल पढ़ने के लिए माउंट किया गया है;mount -o remount,rw /
इसे लिखने में सक्षम होने के लिए दौड़ें ।systemd.unit=basic.target
सेवाओं का एक बहुत ही बुनियादी सेट शुरू करता है। ध्यान दें कि इसमें लॉग इन करने का कोई तरीका शामिल नहीं है!systemctl set-default basic.target
रूट प्रॉम्प्ट पर चलाकर आप इसे डिफ़ॉल्ट बना सकते हैं । मूल डिफ़ॉल्ट लक्ष्य को पुनर्स्थापित करने के लिए, चलाएंsystemctl set-default graphical.target
(याsystemctl set-default multi-user.target
बिना GUI वाले सर्वर के लिए)।systemd.debug-shell
tty9 पर एक रूट शेल शुरू करता है।systemctl enable debug-shell
रूट प्रॉम्प्ट पर चलाकर आप इसे प्रत्येक बूट के लिए सक्षम कर सकते हैं । समस्या को हल करने के बाद इसे अक्षम करना न भूलेंsystemctl disable debug-shell
। T9 पर स्विच करने के लिए Alt+ दबाएँ F9।- फेडोरा सिस्टमड टिप्स , आर्क लिनक्स बूट समस्या युक्तियां भी देखें ।