सवाल हेडलेस उबंटू सर्वर मशीन कभी-कभी GRUB मेनू पर फंस जाती है


मेरे पास उबंटू 10.10 सर्वर अर्ध-एम्बेडेड वातावरण में सिंगल-बोर्ड मशीन पर स्थापित है; कोई कीबोर्ड या स्क्रीन नहीं, बस एसएसएच तक पहुंच।

तो यह वास्तव में निराशाजनक होने पर यह कभी-कभी बूट हो जाता है और GRUB मेनू पर फंस जाता है, पहले विकल्प का चयन करने के लिए कीस्ट्रोक की प्रतीक्षा करता है।

किसी भी परिस्थिति में किसी कुंजीस्ट्रोक की प्रतीक्षा करने के लिए मैं GRUB को कैसे कॉन्फ़िगर कर सकता हूं?

अद्यतन # 1: कोई मेनू नहीं है। Lst, क्योंकि यह GRUB 2 है। लेकिन मेरे पास एक / etc / default / grub है जो ऐसा है:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

अपडेट # 2: मैंने इसे समझ लिया। बूट पर जो असफल बूट का पालन करते हैं, GRUB अपना टाइमआउट अक्षम करता है। चूंकि मेनू दिखाने से बूट असफल हो जाता है, यह एक अपरिहार्य पाश है। यह व्यवहार /etc/grub.d/00_header फ़ाइल को संपादित करके और make_timeout फ़ंक्शन को बदलकर अक्षम किया जा सकता है:

make_timeout ()
{
    echo "set timeout=0"
}

अब बाहर निकलें और ग्रब कॉन्फ़िगरेशन अद्यतनकर्ता स्क्रिप्ट को फिर से चलाएं:

sudo update-grub2

मुझे यह समझ में नहीं आता कि यह व्यवहार उबंटू सर्वर के लिए डिफ़ॉल्ट होगा, जो कि कंसोल द्वारा उपयोग की जाने वाली मशीनों के लिए एक उत्पाद है।


53
2018-03-04 18:17


मूल


तुम्हारा क्या /boot/grub/menu.lst हमशक्ल? - Shane Madden♦
संपादन के बजाए, अपने निष्कर्षों को अपने स्वयं के प्रश्न के उत्तर के रूप में पोस्ट करने के लिए आपका स्वागत है। इस तरह, अगर हमें यह पसंद है तो हमारे पास आपके उत्तर को ऊपर उठाने का अवसर है। - Skyhawk


जवाब:


उबंटू 12.04 एलटीएस के लिए एक विशिष्ट विकल्प है जिसे सेट किया जा सकता है /etc/default/grub

उदाहरण के लिए, यदि आप 2 सेकंड टाइमआउट चाहते हैं (इस प्रकार अनुपयुक्त रीबूट के लिए हैंग से बचें) तो बस निम्न पंक्ति जोड़ें /etc/default/grub:

GRUB_RECORDFAIL_TIMEOUT=2

चलाने के लिए याद रखें update-grub उसके बाद...


41
2018-02-24 17:54



इसने मेरी आंतरिक समस्या को ठीक किया, जो ओपी के समान था लेकिन अब मैंने देखा है कि दुर्लभ अवसर पर जब मैं अपने सर्वर को मॉनीटर से जोड़ता हूं तो मुझे कुछ भी दिखाई नहीं देता है। मॉनिटर को कनेक्शन भी नहीं मिलता है, लेकिन एसएसएच अभी भी ठीक काम करता है। क्या यह उम्मीद है? - Dowlers


यहां उबंटू 10.10 के लिए निर्देश दिए गए हैं, जो पूर्व संस्करणों से थोड़ा अलग हैं। फाइल में /etc/grub.d/00_header पूर्व बूट विफलता के लिए बेवकूफ जांच पर टिप्पणी करें:

##if [ \${recordfail} = 1 ]; then
##  set timeout=-1
##else
  set timeout=${2}
##fi

फिर अपडेट करें:

sudo update-grub

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

यह भी देखें https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544


18
2018-06-15 06:42





मैं उबंटू सर्वर 9 .10 के साथ इस गहरी अप्रिय डिजाइन निगरानी में आया। आपके फिक्स ने मुझे बहुत मदद की है। मैं बस यह इंगित करना चाहता था कि 9.10 के लिए आवश्यक फिक्स अलग है क्योंकि एक ही फ़ाइल में "make_timeout ()" फ़ंक्शन नहीं है।

उबंटू 9 .10 के लिए, उसी फ़ाइल (00_header) के अंत में जाएं और निम्न को बदलें:

अगर [\ $ {recordfail} = 1]; फिर
  समय समाप्ति = -1 सेट करें
अन्य
  सेट टाइमआउट = $ {GRUB_TIMEOUT}
फाई
EOF

सेवा मेरे

अगर [\ $ {recordfail} = 1]; फिर
  सेट टाइमआउट = $ {GRUB_TIMEOUT}
अन्य
  सेट टाइमआउट = $ {GRUB_TIMEOUT}
फाई
EOF

पहले की तरह, फिर चलाएं:

सुडो अद्यतन-grub2

6
2018-03-14 13:15



शानदार समाधान, यह सोच रहा है कि यह कैसे करें, पूरी तरह से काम करता है! नोट: जब आप ग्रब को अपडेट करते हैं, तो आपको केवल चलाने की आवश्यकता होती है: "sudo update grub" चाहे आप जो भी ग्रब चला रहे हैं उसके बावजूद।
इसने मेरे बेकन को अभी सहेजा है - मेरा सर्वर एक हफ्ते के लिए प्रत्येक रीबूट पर ग्रब मेनू पर बैठा है - यह नहीं पता था कि क्या गलत था और उसने सब कुछ करने की कोशिश की थी। इस और प्रश्न में टिप ने यह किया। बहुत बहुत धन्यवाद। - Darren Greaves


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


1
2018-04-20 17:37





मैंने रिकॉर्डफेल के लिए बस एक लंबा टाइमआउट सेट किया है:

if [ "\${recordfail}" = 1 ]; then
  set timeout=30
else
  set timeout=${2}

मतलब है कि जब आप बूट करते हैं, तो बूट होने पर आपको 30 सेकंड टाइमआउट मिलता है। (यह नहीं कि यह अन्य ओएस कैसे करता है ...)

यह (और IMHO चाहिए) / etc / default / grub में भी एक सेटिंग हो सकता है।


1
2017-07-28 14:20





मैं वास्तव में नहीं जानता कि यह डिफ़ॉल्ट कार्रवाई क्यों है, खासकर किसी सर्वर के लिए, लेकिन यही वह है जो मैंने अपने सर्वर सेटअप स्क्रिप्ट में लागू किया है।

sudo sed -i 's/set timeout=-1/set timeout=30/g' /etc/grub.d/00_header
sudo update-grub

1
2018-03-06 22:23





यह दृष्टिकोण थोड़ा क्लीनर है - बस संशोधित करें /etc/default/grub लाइन जोड़ने के लिए:

GRUB_RECORDFAIL_TIMEOUT=2

... जो प्रावधान में ऐसा कुछ कर सकता है:

if grep '^GRUB_RECORDFAIL_TIMEOUT=' /etc/default/grub ; then
   echo GOOD: /etc/default/grub
else
   echo FIXING: /etc/default/grub
   perl -pi.bak -e \
      's/^(GRUB_TIMEOUT=.*\n)/${1}GRUB_RECORDFAIL_TIMEOUT=2\n/' \
      /etc/default/grub
   update-grub
fi

यदि परिवर्तनीय GRUB_RECORDFAIL_TIMEOUT का उल्लेख किया गया है तो यह व्यवहार्य होना चाहिए /etc/grub.d/00_header (जैसा कि मैं 12.04 एलटीएस में देख रहा हूं) में:

make_timeout ()
{
    cat << EOF
if [ "\${recordfail}" = 1 ]; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1}
else
  set timeout=${2}
fi
EOF
}

मैं इस बारे में थोड़ा उत्सुक हूं कि विफलताओं को रिकॉर्ड करने के तरीके में खोदने से बेहतर जवाब मिल सकता है।


1
2018-05-13 06:45



GRUB_RECORDFAIL_TIMEOUT पैरामीटर जोड़ा गया है क्योंकि इस प्रश्न पर मूल रूप से चर्चा की गई थी। आजकल, हाँ, यह बेहतर तरीका है। - mikepurvis