วิธีการตั้งค่ารายการเมนูเริ่มต้น GRUB 2 ที่ถูกต้องอย่างถูกต้อง?


27

ฉันกำลังใช้ GRUB 2.00 บนระบบ Gentoo Linux

ผมรวบรวมเมล็ดของตัวเองด้วยตนเองและจากนั้นผมติดตั้งไว้ในที่มี/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 ว่าฉันต้องการรันการแก้ไขที่ห้าของเคอร์เนลโดยค่าเริ่มต้นไม่ใช่การแก้ไขที่สามที่เก่ากว่าได้อย่างไร โดยทั่วไปแล้วฉันจะเปลี่ยนบรรทัดรายการเริ่มต้นให้ตรงกับเคอร์เนลที่ฉันต้องการและไม่สุ่มเลือกที่ดูเหมือนว่าจะเลือกโดย GRUB ได้อย่างไร

ฉันพยายามใส่บรรทัดต่อไปนี้ใน/etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

สิ่งนี้ไม่ได้แก้ปัญหาตามที่ฉันต้องการ แต่อย่างน้อยด้วงดูเหมือนว่าจะจำเคอร์เนลล่าสุดที่ฉันบูทจากและเลือกโดยอัตโนมัติจากเมนูย่อย แค่ฉันไม่ชอบเข้าถึงเมนูย่อย


ฉันสังเกตเห็นคุณระบุ-o /boot/grub2/grub.cfgว่าเป็นไฟล์ที่ส่งออก ไดเรกทอรี/boot/grub/ยังคงอยู่หรือไม่?
ott--

คำตอบ:


12

ในการเลือกรายการเมนูภายใต้เมนูย่อย "ตัวเลือกขั้นสูง" ให้ตั้งค่า GRUB_DEFAULT = "1> 3" ตอนนี้คุณสามารถรัน grub2-mkconfig เพื่อสร้างไฟล์ config grub ในการรีบูตครั้งต่อไป vmlinuz-3.7.4-gentoo-5 ควรบู๊ต

หมายเหตุ : สิ่งนี้จะไม่เปลี่ยนรายการเริ่มต้นในเมนูด้วงนั่นคือรายการเริ่มต้นจะยังคงระบุรายการเดียวกันกับที่คุณมีในขณะนี้ แต่อิมเมจที่จะบู๊ตเป็นค่าเริ่มต้นจะเป็นอิมเมจที่ 4 ภายใต้ "ตัวเลือกขั้นสูง" ในการทำให้ vmlinuz-3.7.4-gentoo-5 เป็นรายการเริ่มต้นในเมนูด้วงการเรียงลำดับภาพควรเป็นเช่นนั้น vmlinuz-3.7.4-gentoo-5 ควรเป็นอิมเมจแรกเมื่อคุณรัน grub2-mkconfig .


2
โปรดทราบว่าเครื่องหมายคำพูดมีความสำคัญ เช่น GRUB_DEFAULT = 1> 3 จะไม่ทำงาน
ctuffli

7

หากคุณมีเมนูย่อยใน grub.cfg คุณควรใช้ตัวเลขสองหลักดังนี้:

grub-reboot '1>3'

อันแรกคือดัชนีเมนูและอันที่สองคือดัชนีเมนูย่อย

ตัวอย่างเช่นหากต้องการบูตรายการสุดท้ายจาก config เช่นนี้:

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
VarunAgw

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

ด้วย centos7 (หรือ RHEL7) และ grub2:

grub ใช้รายการ 'hidden_entry' จาก grubenv เป็นค่าเริ่มต้นในการบูต sniplet จาก /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

เพื่อตรวจสอบว่า 'save_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"

    มันสร้างไฟล์ใหม่ใน / boot / grub เรียกว่า 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
Francesco Turco

1
ลองแสดงความคิดเห็นGRUB_SAVEDEFAULT=trueมันไม่สำคัญ แต่ก็ไม่จำเป็นกับตัวเลข
bsd

2
ฉันไม่มีตัวเลือกนั้นใน/etc/default/grubไฟล์ของฉัน
Francesco Turco

0

ฉันสงสัยว่าgrub2-mkconfigเรียงลำดับเมล็ดในลำดับกลับกันโดยสมมติว่าพวกเขามีหมายเลขรุ่นที่เพิ่มขึ้นอย่างน่าเบื่อ ดังนั้นเริ่มเลือกแท็กของคุณให้พอดีกับการประชุมที่


0

mv ไฟล์เวอร์ชันใหม่ / ไม่ใช้ใน / boot ไปยังไดเร็กทอรีสำรองเช่น / boot / back initrd.img-3.13.0-xx-generic
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-XX-ทั่วไป

รีบูตระบบเข้าสู่โหมดช่วยเหลือแล้วเลือกด้วงในกล่องโต้ตอบช่วยเหลือแล้วทุกอย่างจะโอเค

เป็นวิธีที่เหมาะสมที่สุดที่ฉันคิด ฉันใช้ Ubuntu 14.04


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.