Bagaimana cara mengatur entri menu default GRUB 2 yang tepat?

27

Saya menjalankan GRUB 2.00 di sistem Gentoo Linux.

Saya mengkompilasi kernel saya sendiri secara manual, dan kemudian saya menginstalnya /bootdengan make install. Saya memiliki kernel berikut di /bootsaat ini:

# 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

Menjalankan grub2-mkconfighasil dalam output berikut:

# 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

Jika saya sekarang membaca /boot/grub2/grub.cfgfile yang dihasilkan , saya perhatikan bahwa entri berikut telah dibuat:

  • Entri default utama yang dimulai vmlinuz-3.7.4-gentoo-third
  • Submenu dengan semua entri lainnya (termasuk yang pemulihan), dalam urutan yang sama dengan grub2-mkconfigperintah

Masalahnya adalah bahwa pada saat boot saya ingin memuat secara default revisi kelima dari kernel saya ( vmlinuz-3.7.4-gentoo-5), bukan yang ketiga ( vmlinuz-3.7.4-gentoo-third). Saya juga memilih untuk tidak mengakses submenu karena memilih kernel yang tepat untuk dimuat.

Bagaimana saya bisa mengubah perilaku ini? Bagaimana saya bisa memberi tahu GRUB bahwa saya ingin menjalankan revisi kelima dari kernel saya secara default dan bukan revisi ketiga yang lebih lama? Secara umum, bagaimana saya bisa mengubah baris entri default agar sesuai dengan kernel yang saya inginkan dan bukan yang tampaknya dipilih secara acak oleh GRUB?

Saya juga mencoba meletakkan baris berikut di /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Ini tidak memperbaiki masalah seperti yang saya inginkan. Tetapi setidaknya GRUB tampaknya mengingat kernel terbaru yang saya boot dari dan secara otomatis memilihnya dari submenu. Hanya saja saya tidak suka mengakses submenu.

Francesco Turco
sumber
Saya perhatikan Anda menentukan -o /boot/grub2/grub.cfgsebagai file output. Apakah direktori tersebut /boot/grub/masih ada?
ott--

Jawaban:

12

Untuk memilih entri menu di bawah sub-menu "Opsi lanjutan" atur GRUB_DEFAULT = "1> 3". Anda sekarang dapat menjalankan grub2-mkconfig untuk menghasilkan file konfigurasi grub. Pada reboot berikutnya vmlinuz-3.7.4-gentoo-5 seharusnya boot.

Catatan : Ini tidak akan mengubah entri default di menu grub, yaitu entri default masih akan menunjukkan entri yang sama seperti yang Anda miliki sekarang. Tetapi gambar yang akan di-boot secara default akan menjadi gambar ke-4 di bawah "Opsi lanjutan". Untuk menjadikan vmlinuz-3.7.4-gentoo-5 sebagai entri default di menu grub, urutan gambar harus sedemikian rupa sehingga vmlinuz-3.7.4-gentoo-5 harus menjadi gambar pertama ketika Anda menjalankan grub2-mkconfig .

anaken78
sumber
2
Perhatikan bahwa tanda kutip itu penting. Yaitu GRUB_DEFAULT = 1> 3 tidak akan berfungsi.
ctuffli
7

Jika Anda memiliki submenu di grub.cfg, Anda harus menggunakan dua digit seperti ini:

grub-reboot '1>3'

Yang pertama adalah indeks menu, dan yang kedua adalah indeks submenu.

Misalnya, untuk mem-boot entri terakhir dari konfigurasi seperti ini:

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' {

kamu harus menggunakan:

grub-reboot '1>5'

dan reboot.

AstraSerg
sumber
Aneh. indeks submenu mulai dengan 0, sedangkan menu utama dari 1
VarunAgw
5

Anda mungkin juga menggunakan GRUB_DEFAULT=saved. Dalam hal ini yang akan Anda gunakan

$ 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.

atau hanya untuk boot berikutnya:

$ 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.
Matthias Hahn
sumber
2

Mencoba

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

Ini memindahkan semua kernel yang tidak digunakan ke direktori cadangan, sekarang:

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

Ini hanya menambah pilihan r5ke menu Anda. Setelah melakukannya, baca tautan ini dan ulang semua kernel di direktori cadangan selain vmlinuz jika Anda bersikeras untuk menyimpannya

eyoung100
sumber
2

Dengan centos7 (atau RHEL7) dan grub2:

grub menggunakan entri 'Saved_entry' dari grubenv sebagai default untuk boot, sniplet dari /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

untuk memeriksa apa yang 'diselamatkan' sekarang adalah build saya:

grub2-editenv list

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

untuk mengubahnya misalnya ke build debug saya:

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

Apa yang saya lakukan untuk mencapai hasil yang diinginkan adalah:

  • atur GRUB_DEFAULT=savedseperti yang diuraikan dalam grub-set-defaultbantuan

    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.

  • Tetapkan nilai default

    grub-set-default "1>2"

    Itu menciptakan file baru di / boot / grub bernama grubenv dengan info yang diperlukan.

  • Setelah itu saya membuat ulang file konfigurasi

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

Dan saya telah melihat bahwa konfigurasi diubah untuk menggunakan status tersimpan:

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

Alex
sumber
0

Anda dapat mengatur pilihan default dengan nilai numerik. Jika Anda mengatur

`GRUB_DEFAULT=3` 

di /etc/default/grub
Anda akan menetapkan default ke entri gentoo-5.
GRUB_DEFAULTadalah offset nol, sehingga 3 akan memilih entri keempat sesuai keinginan.

bsd
sumber
2
Saya tidak tahu mengapa, tetapi sepertinya itu tidak berhasil. Saya menetapkan GRUB_DEFAULT=3seperti yang Anda katakan, lalu jalankan kembali grub2-mkconfig. Tetapi pada saat boot entri default masih vmlinuz-3.7.4-gentoo-third.
Francesco Turco
1
Cobalah berkomentar. GRUB_SAVEDEFAULT=trueSeharusnya tidak masalah, tetapi tidak diperlukan dengan angka.
bsd
2
Saya tidak memiliki opsi itu di /etc/default/grubfile saya .
Francesco Turco
0

Saya menduga bahwa grub2-mkconfigkernel diurutkan dalam urutan terbalik, dengan asumsi bahwa mereka terutama mengandung nomor versi yang meningkat secara monoton. Jadi mulailah memilih tag Anda agar sesuai dengan konvensi itu.

cpugeniusmv
sumber
0

mv file-file versi baru / tidak digunakan di / boot ke direktori cadangan misalnya / boot / kembali 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-generic

reboot sistem ke mode penyelamatan, lalu pilih grub di dialog penyelamatan, maka semuanya akan beres.

itu metode yang paling cocok menurut saya. Saya menggunakan ubuntu 14.04.

johnvuong1999
sumber