GRUB में डिफ़ॉल्ट कर्नेल सेट करें


49

मैं किस कर्नेल GRUB2 को डिफ़ॉल्ट रूप से लोड कर सकता हूं? मैंने हाल ही में एक linux realtime कर्नेल स्थापित किया है और अब यह डिफ़ॉल्ट रूप से लोड होता है। मैं नियमित रूप से डिफ़ॉल्ट रूप से लोड करना चाहूंगा।

अब तक मैं केवल डिफ़ॉल्ट ओएस को चुनने में कामयाब रहा हूं .. और किसी कारण से /boot/grub.cfgपहले ही मान लिया है कि मैं आरटी-कर्नेल को लोड करना चाहता हूं और इसे जेनेरिक लिनक्स मेनू प्रविष्टि (मेरे मामले में आर्क लिनक्स) में डाल देना चाहता हूं।


2
grub2-set-default <title या number>?
तालीज़िन

1
लेकिन मुझे नंबर कैसे पता चलेगा? grub.cfgकेवल संख्याएँ OS के अनुरूप होती हैं, न कि गुठली की।
टॉमटॉम

कुछ मामलों में यह काम करता है: askubuntu.com/questions/216398/… आप इस फ़ाइल को देखकर मेनू के नाम पा सकते हैं: /boot/grub/grub.cfg
TekOps

जवाबों:


41

मुझे लगता है कि अधिकांश वितरणों ने इस बिंदु पर अतिरिक्त विकल्प उप मेनू में अतिरिक्त कर्नेल को स्थानांतरित कर दिया है, क्योंकि टॉमटॉम ने अपने आर्क के मामले में पाया था।

मैं डिफ़ॉल्ट के रूप में पिछले कर्नेल का चयन करने के लिए अपने शीर्ष स्तर मेनू संरचना को बदलना नहीं चाहता था। मुझे यहाँ उत्तर मिला:

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

संक्षेप में:

1) $menuentry_idसबमेनू के लिए _option खोजें :

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2) $menuentry_id_optionआप जिस कर्नेल का उपयोग करना चाहते हैं उसके लिए मेनू प्रविष्टि के लिए खोजें :

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3) अपने वर्तमान डिफ़ॉल्ट ग्रब में टिप्पणी करें /etc/default/grubऔर इसे उप-मेनू के $menuentry_id_optionचरण एक से बदलें , और चयनित कर्नेल के $menuentry_id_optionचरण दो से अलग हो जाएं >

मेरे मामले में संशोधित GRUB_DEFAULTहै:

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4) परिवर्तन करने के लिए ग्रब अपडेट करें। डेबियन के लिए ऐसा किया जाता है:

$ sudo update-grub

किया हुआ। अब जब आप बूट करते हैं, तो उन्नत मेनू में तारांकन चिह्न होना चाहिए और आपको चयनित कर्नेल में बूट करना चाहिए। आप इस बात की पुष्टि अनाम के साथ कर सकते हैं।

$ uname -a
Linux NAME 4.18.0-0.bpo.1-amd64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

इसे सबसे हाल के कर्नेल में बदलना नई लाइन के बारे में टिप्पणी करना और पुनर्मूल्यांकन करने के लिए सरल है #GRUB_DEFAULT=0, फिर पुनर्जन्म update-grub


31

2 घंटे तक संघर्ष करने के बाद, मैंने इसे हासिल करने का बहुत आसान तरीका ढूंढ लिया है। मैं सिर्फ आरटीएफएम। ;)

/ Etc / default / grub में दो लाइनें जोड़ें

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

sudo update-grubरिबूट करें, अपने ग्रब मेनू में जाएं और जो भी मेनू या सबमेनू आइटम आपको चाहिए उसका चयन करें। विकल्प सहेजा जाएगा और अगली बार आपका कंप्यूटर अपने आप इसमें बूट हो जाएगा।


2
आश्चर्यजनक! बहुत आसन!
ईगोर स्क्रीप्टनऑफ

ओह, इतना सरल। धन्यवाद।
user207863

21

जैसा कि टिप्पणियों में बताया गया है, आप grub-set-default Xकमांड का उपयोग करने के लिए डिफ़ॉल्ट कर्नेल को बूट करने के लिए सेट कर सकते हैं , जहां एक्स उस कर्नेल की संख्या है जिसे आप बूट करना चाहते हैं। कुछ डिस्ट्रीब्यूशन में आप इस नंबर को /etc/default/grubफाइल को एडिट करके सेट कर सकते हैं GRUB_DEFAULT=Xऔर फिर रनिंग कर सकते हैं update-grub

संख्या बूट के दौरान GRUB मेनू में दिखाए गए कर्नेल / कर्नेल सेटिंग्स की एक सरणी का सूचकांक है, जिसमें 0 पहली (शीर्ष-सबसे) प्रविष्टि है। आप आमतौर पर menuentryलाइनों की तलाश में सही संख्या पा सकते हैं /boot/grub/grub.cfg, जैसे:

grep menuentry /boot/grub/grub.cfg

आपको प्रत्येक कर्नेल उस नाम के साथ सूचीबद्ध दिखाई देगा जो GRUB बूट मेनू में दिखाया गया है। पहले एक 0 है, दूसरा 1 है, और इसी तरह।


1
फेडोरा 21 में यह है /boot/grub2/grub.cfg
कुछ समय

3
यह मेरे लिए काम नहीं कर रहा है। मेरी स्थापना में नवीनतम कर्नेल 4.4.0-64-जेनेरिक (मेनेंट्री 0) है, लेकिन मैं चाहता हूं कि 4.4.0-59-जेनेरिक (मेनेंट्री 9) डिफ़ॉल्ट बूट कर्नेल हो। मैं दौड़ कर गया grub-set-default 9और फिर grub-updateफटकार लगाई। मैं डिफ़ॉल्ट कर्नेल के साथ बूट बूट करता हूं और यह 4.4.0-64-जेनेरिक के साथ बूट होता है । मैंने एडिटिंग की कोशिश भी की /etc/default/grubऔर सेट GRUB_DEFAULT=9और भाग गया grub-update। कुछ भी नहीं बदलने पर रिबूट करने पर, सिस्टम अभी भी 4.4.0-64-जेनेरिक के साथ बूट होता है । शायद मुझे कुछ याद आया, क्या कोई मेरी मदद कर सकता है?
द्रोणाचार्य

यह मेरे लिए भी काम नहीं किया। मैंने यहाँ बताए गए अवांछित कर्नेल को हटा दिया: askubuntu.com/a/764242/456247
लुइस

8

बस grep 'menuentry' /boot/grub/grub.cfgउन अतिरिक्त प्रविष्टियों को सूचीबद्ध करता है जो वास्तविक कर्नेल या OS संस्करणों से संबंधित नहीं हैं। उदाहरण के लिए, यह सूचीबद्ध करता है

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option

मैं उस फ़ाइल को खोजने की विधि में एक छोटे से सुधार का प्रस्ताव देना चाहूंगा: उपयोग करें awk

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

कमांड बलो और इसके आउटपुट के साथ, आप awkकोड मैच वास्तविक OS संस्करण देख सकते हैं , और आपको वह संख्या दे सकते हैं जिसे आप /etc/default/grubफ़ाइल में उपयोग कर सकते हैं ।

/etc/default/grubफ़ाइल को हाथ से संपादित करने के अलावा , मैं उपयोग करने का सुझाव देता हूं sed। कमांड बोलो में, ऊपर दिए गए awk कमांड से एक्स को उपयुक्त संख्या से बदलें:

sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; sudo update-grub


2
यह कोई जवाब नहीं है। यह एक टिप्पणी की तरह पढ़ता है। एक उत्तर में कहा जाना चाहिए, "यह है कि ग्रब में डिफ़ॉल्ट प्रविष्टि कैसे सेट करें", न कि "मुझे दूसरे उत्तर के लिए एक परिशिष्ट बनाने दें"। आप इसे आसानी से एक उचित उत्तर में संपादित कर सकते हैं, लेकिन यह सिर्फ grep के बजाय awk का उपयोग करने के बारे में jkt123 के उत्तर पर एक टिप्पणी छोड़ने के लिए हो सकता है।
अलेक्सांद्र डबिन्सकी

2

jkt123 की अधिकांश अनुमानों के लिए काम करूँगा जो मुझे लगता है। हालाँकि आर्क लिनक्स के लिए यह काम नहीं करता था, कम से कम मेरे द्वारा उपलब्ध पैकेज के साथ नहीं।

सूचकांकों को आप grub-set-defaultकेवल मुख्य मेनू प्रविष्टियों के अनुरूप कर सकते हैं। कर्नेल विकल्प हालांकि एक सबमेनू में हैं। तो या तो आप मेन मेनू में सबमेनू से कर्नेल प्रविष्टि को स्थानांतरित करते हैं या आप प्रविष्टि को सबमेनू सूची के ऊपर रखते हैं और सबमेनू का चयन करते हैं।

मेरा Grub मेनू

  • आर्क लिनक्स
  • आर्क लिनक्स के लिए उन्नत विकल्प
    • कर्नेल १
    • कर्नेल २
  • खिड़कियाँ

कर्नेल 2 को बूट करने में सक्षम होने के लिए आपको इसे कर्नेल 1 के साथ स्वैप करना होगा या आप इसे सबमेनू के बाहर आर्क लिनक्स या विंडोज के समान स्तर पर रख सकते हैं। और फिर मुख्य मेनू सूचकांकों में से एक को डिफ़ॉल्ट संख्या सेट करें। उदाहरण के लिए "0" बूट "आर्क लिनक्स" और "1" बूट कर्नेल 1 के ऊपर मेनू में।

पदानुक्रम और स्वैप को बदलने के लिए, /boot/grub/grub.cfgउस प्रविष्टि को खोलें और स्थानांतरित करें जिसे आप स्थानांतरित करना चाहते हैं। एक प्रविष्टि इस तरह दिख सकती है

menuentry 'ENTRY NAME'
   ... some code ...
}

फिर आपको अपने परिवर्तनों को लागू करने की आवश्यकता है। साथ मेरे मामले में grub-mkconfig। लेकिन यह सिस्टम से सिस्टम में भिन्न हो सकता है।


0

जैसे ही हाल ही में CentOS-6.6 grub.conf ने देखा कि डिफ़ॉल्ट चयन को बदलने के लिए इसे मैन्युअल रूप से संपादित किया जा सकता है:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

0

डेबियन स्ट्रेच:

कॉन्फिग फाइलों के साथ खिलवाड़ करने के बजाय, एक फ़ोल्डर बनाएं /noot(इसे आप क्या चाहते हैं) कॉल करें, जो आप चाहते हैं, कर्नेल को मिलान कॉन्फ़िगरेशन और सिस्टम फ़ाइलों के साथ छोड़ दें, /bootऔर शेष को इस नए फ़ोल्डर में ले जाएं।

भागो update-grub

/bootअपने कर्नेल संस्करण और मिलान कॉन्फ़िगरेशन और सिस्टम फ़ाइलों के डबल फ़ोल्डर की जाँच अभी भी कर रहे हैं (यदि आपने ऐसी कोई चीज़ कॉपी की है जो आपके पास नहीं होनी चाहिए) और रिबूट करें।

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