कुछ हालिया अपडेट के बाद, मेरा कंप्यूटर अब बूट नहीं है! यहाँ मैं निर्धारित कर सकता हूँ:
- यह एक बहुत ही हालिया कंप्यूटर है जो मुझे कॉर्पोरेट आईटी द्वारा प्रदान किया गया था। इसमें हाल ही में 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.targetinit और कुछ सेवाएं शुरू करने के लिए (ध्यान दें कि यह लॉग इन करने का कोई तरीका शुरू नहीं करता है, इसलिए आपके पास एक और कंसोल पर चलने वाला शेल बेहतर होगा)। ध्यान दें कि रूट फाइलसिस्टम को केवल पढ़ने के लिए माउंट किया गया है;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-shelltty9 पर एक रूट शेल शुरू करता है।systemctl enable debug-shellरूट प्रॉम्प्ट पर चलाकर आप इसे प्रत्येक बूट के लिए सक्षम कर सकते हैं । समस्या को हल करने के बाद इसे अक्षम करना न भूलेंsystemctl disable debug-shell। T9 पर स्विच करने के लिए Alt+ दबाएँ F9।- फेडोरा सिस्टमड टिप्स , आर्क लिनक्स बूट समस्या युक्तियां भी देखें ।