হেডলেস উবুন্টু সার্ভার মেশিন কখনও কখনও GRUB মেনুতে আটকে থাকে


54

আমার উবুন্টু 10.10 সার্ভারটি একটি আধা-এমবেডড পরিবেশে একটি একক বোর্ড মেশিনে ইনস্টল করা আছে; কোনও কীবোর্ড বা স্ক্রিন নেই, এতে কেবল এসএসএইচ অ্যাক্সেস রয়েছে।

সুতরাং এটা সত্যিই হতাশাজনক যখন মাঝে মাঝে আপ বুট এবং GRUB মেনু আটকে পরার, একটি কীস্ট্রোক প্রথম বিকল্প নির্বাচন করতে জন্য অপেক্ষা করছে।

কোনও পরিস্থিতিতে কী-স্ট্রোকের জন্য অপেক্ষা না করে আমি কীভাবে GRUB কনফিগার করব?

আপডেট # 1: কোনও মেনু.লস্ট নেই, যেহেতু এটি গ্রাব 2 is তবে আমার কাছে একটি / ইত্যাদি / ডিফল্ট / গ্রাব রয়েছে যা এর মতো:

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_Toutout ফাংশন পরিবর্তন করে অক্ষম করা যেতে পারে:

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

এখন প্রস্থান করুন এবং গ্রাব কনফিগারেশন আপডেটের স্ক্রিপ্টটি পুনরায় রান করুন:

sudo update-grub2

এটি আমার কাছে কোনও ধারণা দেয় না যে উবুন্টু সার্ভারের জন্য কনসোল দ্বারা অ্যাক্সেস করা মেশিনগুলির জন্য তৈরি পণ্যটি এই আচরণটি ডিফল্ট হবে।


1
তোমার /boot/grub/menu.lstচেহারা কেমন?
শেন ম্যাডেন

7
সম্পাদনা হিসাবে পরিবর্তে আপনার নিজের প্রশ্নের উত্তর হিসাবে আপনার অনুসন্ধানগুলি পোস্ট করার জন্য আপনাকে স্বাগতম। এইভাবে, আমরা যদি আপনার উত্তরটি পছন্দ করি তবে তা উত্তোলন করার সুযোগ রয়েছে।
স্কাইহক

উত্তর:


41

উবুন্টু 12.04 এলটিএসের জন্য একটি নির্দিষ্ট বিকল্প রয়েছে যা সেট করা যেতে পারে /etc/default/grub

উদাহরণস্বরূপ, আপনি যদি 2 সেকেন্ডের মেয়াদ উত্তীর্ণ হতে চান (এইভাবে অপ্রত্যাশিত রিবুটগুলির জন্য হ্যাং এড়ানো) কেবলমাত্র নিম্নলিখিত লাইনটি এতে যুক্ত করুন /etc/default/grub:

GRUB_RECORDFAIL_TIMEOUT=2

তার update-grubপরে দৌড়াতে ভুলবেন না ...


এটি আমার অন্তর্নিহিত সমস্যাটি সমাধান করেছে, যা ওপিগুলির মতো ছিল তবে এখন আমি লক্ষ্য করেছি যে বিরল উপলক্ষে যখন আমি আমার সার্ভারকে একটি মনিটরে সংযুক্ত করি তখন কিছুই দেখি না। মনিটর এমনকি সংযোগ পায় না, কিন্তু এসএসএইচ এখনও ঠিক কাজ করে। এটি কি প্রত্যাশিত?
দোলাররা

18

এখানে উবুন্টু ১০.১০ এর জন্য নির্দেশাবলী রয়েছে যা পূর্ববর্তী সংস্করণগুলির থেকে কিছুটা আলাদা। ফাইল /etc/grub.d/00_header এ পূর্বের বুট ব্যর্থতার জন্য নির্বোধ চেক মন্তব্য করে:

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

তারপরে আপডেট করুন:

sudo update-grub

জেনে রাখুন যে লিনাক্স সংযুক্ত করে যদি দ্বিতীয় ড্রাইভ থাকে তবে গ্রুব 2 এটি খুঁজে পেতে পারে এবং আপনাকে কোনটি বুট করতে চাইবে সে সম্পর্কে জিজ্ঞাসা করুন। "আপডেট-গ্রাব" চালানোর আগে সমস্ত অতিরিক্ত ড্রাইভ সরান।

Https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544 দেখুন


6

আমি উবুন্টু সার্ভার 9.10 এর সাথে গভীরভাবে অপ্রীতিকর ডিজাইনের নজরদারি পেরিয়ে এসেছি। আপনার সংশোধন আমাকে প্রচুর সাহায্য করেছে। আমি কেবল উল্লেখ করতে চেয়েছিলাম যে 9.10 এর জন্য প্রয়োজনীয় ফিক্সটি আলাদা কারণ একই ফাইলটিতে "মেক_টাইমআউট ()" ফাংশন নেই।

উবুন্টু 9.10 এর জন্য, একই ফাইলের শেষে (00_ Header) যান এবং নিম্নলিখিতটি পরিবর্তন করুন:

যদি [\ $ {রেকর্ডফেইল} = 1]; তারপর
  সময়সীমা নির্ধারণ = -1
আর
  সময়সীমা নির্ধারণ করুন = $ {GRUB_TIMEOUT}
ফাই
ফাইলের শেষে

প্রতি

যদি [\ $ {রেকর্ডফেইল} = 1]; তারপর
  সময়সীমা নির্ধারণ করুন = $ {GRUB_TIMEOUT}
আর
  সময়সীমা নির্ধারণ করুন = $ {GRUB_TIMEOUT}
ফাই
ফাইলের শেষে

আগের মত, তারপর চালান:

sudo আপডেট-grub2

উজ্জ্বল সমাধান, কীভাবে এটি করবেন তা ভাবছেন, নিখুঁতভাবে কাজ করে! দ্রষ্টব্য: আপনি গ্রাব আপডেট করার সময় আপনার কেবল চালানো দরকার: "সুডো আপডেট গ্রাব" আপনার গ্রাবের যে কোনও সংস্করণই চলুক না।

এটি সবেমাত্র আমার বেকনকে বাঁচিয়েছে - আমার সার্ভারটি প্রতিটি রিবুটের গ্রাব মেনুতে এক সপ্তাহের জন্য বসে ছিল - কোনটি ভুল ছিল তা সম্পর্কে কোনও ধারণা ছিল না এবং সবকিছু চেষ্টা করেছিলাম। এটি এবং প্রশ্নের টিপটি এটি করেছে। অনেক ধন্যবাদ.
ড্যারেন গ্রেভেস

1

সিরিয়াল অ্যাক্সেসের জন্য GRUB কনফিগার করুন (এবং এটির সময়ে আপনার বুটলোডার) এবং এই দৃষ্টান্তগুলির জন্য একটি উন্মুক্ত সিরিয়াল পোর্ট, নাল-মডেম কেবল এবং ইউএসবি-থেকে-আরএস 232 রূপান্তরকারী রাখুন। আমি একটি হেডলেস সার্ভার এবং একটি গুরুপলগ পরিচালনা করি এবং এটি অন্য কোনও উপায়ে নাও চাই।


1

আমি রেকর্ডফেইলের জন্য কেবল একটি দীর্ঘ সময়সীমা নির্ধারণ করেছি:

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

মানে আপনি বুট করার সময় 30 সেকেন্ড সময়সীমা পেয়েছেন, যদি আগের বুটটি ব্যর্থ হয়। (অন্য ওএস এটি কী করে তার বিপরীতে নয় ...)

এটি (এবং আইএমএইচও হওয়া উচিত) এমনকি সেখানে / etc / ডিফল্ট / গ্রাবের মধ্যে একটি সেটিংস হতে পারে।


1

আমি সত্যিই জানি না কেন এটি একটি ডিফল্ট ক্রিয়া, বিশেষত কোনও সার্ভারের জন্য, তবে এটিই আমি আমার সার্ভার সেটআপ স্ক্রিপ্টগুলিতে প্রয়োগ করেছি।

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

1

এই পদ্ধতিরটি কিছুটা পরিষ্কার - কেবল /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
}

ব্যর্থতা কীভাবে রেকর্ড করা হয়েছে তাতে খনন করা আরও উত্তম উত্তর পেতে পারে কিনা তা নিয়ে আমি কিছুটা কৌতূহল বোধ করছি।


এই প্রশ্নটি মূলত আলোচনার পর থেকে GRUB_RECordFAIL_TIMEOUT পরামিতি যুক্ত করা হয়েছে। আজকাল, হ্যাঁ, এটি আরও ভাল পদ্ধতি।
মাইকপুরভিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.