सही GRUB 2 डिफ़ॉल्ट मेनू प्रविष्टि को सही तरीके से कैसे सेट करें?


27

मैं एक Gentoo लिनक्स सिस्टम पर GRUB 2.00 चला रहा हूं।

मैं अपने ही कर्नेल मैन्युअल संकलन, और फिर मैं उन्हें में स्थापित /bootके साथ make install। मेरे पास इस समय निम्नलिखित गुठली है /boot:

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

grub2-mkconfigनिम्नलिखित आउटपुट में परिणाम चल रहे हैं :

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

यदि मैं अब परिणामी /boot/grub2/grub.cfgफ़ाइल पढ़ता हूं, तो मैं देखता हूं कि निम्नलिखित प्रविष्टियां बनाई गई हैं:

  • एक मुख्य डिफ़ॉल्ट प्रविष्टि जो शुरू होती है vmlinuz-3.7.4-gentoo-third
  • grub2-mkconfigकमांड के रूप में एक ही क्रम में सभी अन्य प्रविष्टियों (वसूली वाले सहित) के साथ एक सबमेनू

समस्या यह है कि बूट समय पर मैं अपने कर्नेल ( vmlinuz-3.7.4-gentoo-5) के पांचवें संशोधन को डिफ़ॉल्ट रूप से लोड करना चाहूंगा , तीसरा नहीं ( vmlinuz-3.7.4-gentoo-third)। मैं लोड करने के लिए सही कर्नेल चुनने के लिए सबमेनू का उपयोग नहीं करना पसंद करता हूं।

मैं इस व्यवहार को कैसे बदल सकता हूं? मैं GRUB को कैसे बता सकता हूं कि मैं डिफ़ॉल्ट रूप से अपने कर्नेल के पांचवें संशोधन को चलाना चाहता हूं न कि पुराने तीसरे संशोधन को? सामान्य तौर पर, मैं उस कर्नेल से मिलान करने के लिए डिफ़ॉल्ट प्रविष्टि लाइन को कैसे बदल सकता हूं जो जीआरयूबी द्वारा उठाए गए एक प्रतीत होता है कि यादृच्छिक नहीं है?

मैंने निम्नलिखित पंक्तियाँ डालने की भी कोशिश की /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

यह समस्या को मेरी इच्छा के अनुसार ठीक नहीं करता है। लेकिन कम से कम GRUB मुझे नवीनतम कर्नेल को याद करता है जो इससे बूट किया गया है और स्वचालित रूप से इसे सबमेनू से चुनता है। यह सिर्फ इतना है कि मुझे सबमेनू एक्सेस करना पसंद नहीं है।


मैंने देखा कि आपने -o /boot/grub2/grub.cfgआउटपुट फ़ाइल के रूप में निर्दिष्ट किया है। क्या निर्देशिका /boot/grub/अभी भी मौजूद है?
ott--

जवाबों:


12

उप-मेनू "उन्नत विकल्प" के तहत एक मेनू प्रविष्टि का चयन करने के लिए GRUB_DEFAULT = "1> 3" सेट करें। अब आप grub2-mkconfig को grub config फाइल जनरेट करने के लिए चला सकते हैं। अगले रिबूट पर vmlinuz-3.7.4-gentoo-5 को बूट करना चाहिए।

ध्यान दें : यह ग्रब मेनू में डिफ़ॉल्ट प्रविष्टि को नहीं बदलेगा, अर्थात, डिफ़ॉल्ट प्रविष्टि अभी भी उसी प्रविष्टि को इंगित करेगी जो आपके पास अभी है। लेकिन जो छवि डिफ़ॉल्ट रूप से बूट की जाएगी वह "उन्नत विकल्प" के तहत 4 वीं छवि होगी। ग्राम मेनू में डिफ़ॉल्ट प्रविष्टि के रूप में vmlinuz-3.7.4-gentoo-5 बनाने के लिए, छवियों का क्रम ऐसा होना चाहिए कि जब आप gub2-mkconfig चलाते हैं तो vmlinuz-3.7.4-gentoo-5 पहली छवि होनी चाहिए ।


2
ध्यान दें कि उद्धरण चिह्न महत्वपूर्ण हैं। यानी GRUB_DEFAULT = 1> 3 काम नहीं करेगा।
ctuffli

7

यदि आपके grub.cfg में एक सबमेनू है तो आपको इस तरह से दो अंकों का उपयोग करना चाहिए:

grub-reboot '1>3'

पहले मेनू सूचकांक है, और दूसरा सबमेनू सूचकांक है।

उदाहरण के लिए, इस तरह से विन्यास से अंतिम प्रविष्टि बूट करने के लिए:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

आपको उपयोग करना चाहिए:

grub-reboot '1>5'

और रिबूट।


अजीब। सबमेनू इंडेक्स 0 से शुरू होता है, जबकि मुख्य मेनू 1 से
वरुणअगव

5

आप भी उपयोग कर सकते हैं GRUB_DEFAULT=saved। इस मामले में आप उपयोग करेंगे

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

या यदि यह केवल अगले बूट के लिए है:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

2

प्रयत्न

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

यह आपकी सभी अप्रयुक्त गुठली को अब एक बैकअप निर्देशिका में ले जाता है:

grub2-mkconfig -o /boot/grub/grub.cfg

यह केवल r5आपके मेनू में विकल्प जोड़ता है । ऐसा करने के बाद, इस लिंक को पढ़ें और फिर बैकअप निर्देशिका में सभी गुठली रगड़ें, vmlinuz के अलावा कुछ और अगर आप उन्हें रखने पर जोर देते हैं


2

सेंटोस 7 (या आरएचईएल 7) और ग्रब 2 के साथ:

ग्रब ग्रुएनव से 'सेव्ड_ेंट्री' एंट्री का उपयोग डिफ़ॉल्ट रूप से बूट करने के लिए करता है, /boot/grub2/grub.cfg से स्निपलेट:

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

अब 'build_entry' क्या है, इसकी जाँच करने के लिए मेरी बिल्ड:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

इसे मेरे डीबग बिल्ड में बदलने के लिए:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'

1

वांछित परिणाम प्राप्त करने के लिए मैंने क्या किया:

  • मदद GRUB_DEFAULT=savedमें उल्लिखित सेट करेंgrub-set-default

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

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

    grub-set-default "1>2"

    यह आवश्यक जानकारी के साथ grubenv नामक एक नई फ़ाइल / बूट / ग्रब बनाता है।

  • इसके बाद मैं कॉन्फिग फाइल को रीक्रिएट करता हूं

    grub-mkconfig > /boot/grub/grub.cfg

और मैंने देखा है कि सहेजे गए राज्य का उपयोग करने के लिए कॉन्फ़िगरेशन को बदल दिया गया था:

if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="${saved_entry}" fi


0

आप संख्यात्मक मान द्वारा डिफ़ॉल्ट विकल्प सेट कर सकते हैं। यदि आप सेट करते हैं

`GRUB_DEFAULT=3` 

, /etc/default/grub
आप gentoo-5 प्रविष्टि के लिए डिफ़ॉल्ट सेट करेंगे।
GRUB_DEFAULTशून्य ऑफ़सेट है, इसलिए 3 आपकी इच्छानुसार चौथी प्रविष्टि का चयन करेगा।


2
मुझे पता नहीं क्यों, लेकिन ऐसा लगता है कि यह काम नहीं करता है। मैंने GRUB_DEFAULT=3जैसा आपने कहा था, फिर से चला grub2-mkconfig। लेकिन बूट समय पर डिफ़ॉल्ट प्रविष्टि अभी भी है vmlinuz-3.7.4-gentoo-third
फ्रांसेस्को तुर्को

1
टिप्पणी करने की कोशिश करें GRUB_SAVEDEFAULT=trueयह बात नहीं होनी चाहिए, लेकिन संख्यात्मक के साथ इसकी आवश्यकता नहीं है।
bsd

2
मेरी /etc/default/grubफ़ाइल में वह विकल्प नहीं है ।
फ्रांसेस्को तुर्को

0

मुझे संदेह है कि grub2-mkconfigगुठली को रिवर्स ऑर्डर में क्रमबद्ध करता है, यह मानते हुए कि वे मुख्य रूप से नीरस रूप से बढ़ते संस्करण संख्या में हैं। तो उस कन्वेंशन को फिट करने के लिए अपने टैग चुनना शुरू करें।


0

उन नई / उपयोग नहीं की गई संस्करण फ़ाइलों को / बूट में बूट निर्देशिका में उदाहरण के लिए / बूट / बैक initrd.img-3.13.0-xx-जेनेरिक
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx-सामान्य

रिबूट प्रणाली बचाव मोड में, फिर बचाव संवाद में ग्रब चुनें, फिर सब कुछ ठीक हो जाएगा।

मेरे विचार से यह सबसे उपयुक्त तरीका है। मैं ubuntu 14.04 का उपयोग कर रहा हूं।


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