Atur kernel default di GRUB

49

Bagaimana saya bisa memilih kernel GRUB2 mana yang harus dimuat secara default? Saya baru-baru ini menginstal kernel linux realtime dan sekarang memuat secara default. Saya ingin memuat yang biasa secara default.

Sejauh ini saya hanya berhasil memilih OS default .. dan untuk beberapa alasan yang /boot/grub.cfgsudah mengasumsikan bahwa saya ingin memuat rt-kernel dan memasukkannya ke dalam entri menu linux generik (dalam kasus saya Arch Linux).

TomTom
sumber
2
grub2-set-default <title atau number>?
taliezin
1
Tapi bagaimana saya tahu nomornya? Angka-angka grub.cfghanya sesuai dengan OS dan bukan kernel.
TomTom
Dalam beberapa kasus ini berfungsi: askubuntu.com/questions/216398/… Anda dapat menemukan nama menu dengan melihat melalui file ini: /boot/grub/grub.cfg
TekOps

Jawaban:

43

Saya pikir sebagian besar distribusi telah memindahkan kernel tambahan ke sub menu opsi lanjutan pada saat ini, seperti yang ditemukan TomTom dengan Arch-nya.

Saya tidak ingin mengubah struktur menu tingkat atas saya untuk memilih kernel sebelumnya sebagai default. Saya menemukan jawabannya di sini:

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

Untuk meringkas:

1) Temukan $menuentry_id_pilihan untuk submenu:

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

2) Temukan $menuentry_id_optionentri menu untuk kernel yang ingin Anda gunakan:

$ 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) Komentari grub default Anda saat ini /etc/default/grubdan ganti dengan sub-menu $menuentry_id_optiondari langkah pertama, dan kernel yang dipilih $menuentry_id_optiondari langkah kedua dipisahkan oleh >.

Dalam kasus saya yang dimodifikasi GRUB_DEFAULTadalah:

#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) Perbarui grub untuk melakukan perubahan. Untuk Debian ini dilakukan seperti ini:

$ sudo update-grub

Selesai. Sekarang ketika Anda boot, menu lanjutan harus memiliki tanda bintang dan Anda harus boot ke kernel yang dipilih. Anda dapat mengonfirmasi ini dengan uname.

$ 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

Mengubah ini ke kernel terbaru adalah semudah mengomentari baris baru dan menghapus komentar #GRUB_DEFAULT=0, lalu jalankan kembali update-grub.

William LK
sumber
31

Setelah berjuang selama 2 jam, saya telah menemukan cara yang lebih mudah untuk mencapai ini. Saya hanya RTFM. ;)

Tambahkan dua baris ke / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Lakukan sudo update-grub, reboot, masuk ke menu grub Anda dan pilih menu atau submenu item mana saja yang Anda butuhkan. Pilihan akan disimpan dan lain kali komputer Anda akan boot ke dalamnya secara otomatis.

Jimmy Falcon
sumber
2
Hebat! Sangat sederhana!
Egor Skriptunoff
Oh, jauh lebih sederhana. Terima kasih.
user207863
21

Seperti disebutkan dalam komentar, Anda dapat mengatur kernel default untuk boot menggunakan grub-set-default Xperintah, di mana X adalah jumlah kernel yang ingin Anda boot. Dalam beberapa distribusi Anda juga dapat mengatur nomor ini dengan mengedit /etc/default/grubfile dan pengaturan GRUB_DEFAULT=X, dan kemudian menjalankannya update-grub.

Angka tersebut adalah indeks ke array pengaturan kernel / kernel yang ditunjukkan dalam menu GRUB saat boot, dengan 0 sebagai entri pertama (teratas). Anda biasanya dapat menemukan nomor yang tepat dengan mencari menuentrygaris dalam /boot/grub/grub.cfg, seperti:

grep menuentry /boot/grub/grub.cfg

Anda akan melihat setiap kernel terdaftar dengan nama yang ditampilkan di menu boot GRUB. Yang pertama adalah 0, yang kedua adalah 1, dan seterusnya.

jkt123
sumber
1
Di Fedora 21 itu /boot/grub2/grub.cfg.
somethingSomething
3
Ini tidak bekerja untuk saya. Kernel terbaru dalam instalasi saya adalah 4.4.0-64-generic (menuentry 0) tetapi saya ingin 4.4.0-59-generic (menuentry 9) menjadi kernel boot default. Aku berlari grub-set-default 9lalu kembali grub-update. Saya membiarkan grub boot dengan kernel default dan masih melakukan boot dengan 4.4.0-64-generic . Saya juga mencoba mengedit /etc/default/grubdan mengatur GRUB_DEFAULT=9dan menjalankan grub-update. Pada reboot tidak ada perubahan, sistem masih menjalankan boot dengan 4.4.0-64-generik . Mungkin saya melewatkan sesuatu, ada yang bisa membantu saya?
Dronacharya
Ini juga tidak berhasil untuk saya. Saya menghapus kernel yang tidak diinginkan seperti dijelaskan di sini: askubuntu.com/a/764242/456247
Luis
8

Cukup melakukan grep 'menuentry' /boot/grub/grub.cfgdaftar entri tambahan yang tidak terkait dengan kernel atau versi OS yang sebenarnya. Misalnya, daftar

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

Saya ingin mengusulkan sedikit peningkatan pada metode pencarian file itu: gunakan 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' {

Dengan perintah di bawah ini dan hasilnya, Anda dapat melihat awkkode cocok dengan versi OS yang sebenarnya, dan memberi Anda nomor yang kemudian dapat Anda gunakan dalam /etc/default/grubfile.

Selain mengedit /etc/default/grubfile dengan tangan, saya sarankan menggunakan sed. Pada perintah di bawah, ganti X dengan nomor yang sesuai yang Anda dapatkan dari perintah awk di atas:

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

Sergiy Kolodyazhnyy
sumber
2
Ini bukan jawaban. Bunyinya seperti komentar. Sebuah jawaban harus mengatakan, "Ini adalah bagaimana mengatur entri default di GRUB", bukan "biarkan saya membuat lampiran untuk jawaban lain". Anda dapat dengan mudah mengedit ini menjadi jawaban yang tepat, tetapi mungkin lebih pintar untuk meninggalkan komentar pada jawaban jkt123 tentang menggunakan awk alih-alih grep.
Aleksandr Dubinsky
2

jkt123 akan bekerja untuk sebagian besar distribusi kurasa. Namun untuk Arch Linux tidak berfungsi, setidaknya tidak dengan paket yang saya miliki.

Indeks yang dapat Anda atur grub-set-defaulthanya sesuai dengan entri menu utama. Namun opsi kernel berada dalam submenu. Jadi, apakah Anda memindahkan entri kernel dari submenu ke menu utama atau Anda meletakkan entri di atas daftar submenu dan pilih submenu.

Menu Grub saya

  • Arch Linux
  • Opsi lanjutan untuk Arch Linux
    • Kernel 1
    • Kernel 2
  • Windows

Agar dapat mem-boot Kernel 2 Anda harus menukarnya dengan Kernel 1 atau meletakkannya di luar submenu pada level yang sama dengan Arch Linux atau Windows. Dan kemudian mengatur nomor default ke salah satu indeks menu utama. Sebagai contoh dalam menu di atas "0" boot "Arch Linux" dan "1" boot Kernel 1.

Untuk mengubah hierarki dan swap, buka /boot/grub/grub.cfgdan pindahkan entri yang ingin Anda pindahkan. Entri bisa terlihat seperti ini

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

Maka Anda perlu menerapkan perubahan Anda. Dalam kasus saya dengan grub-mkconfig. Tetapi ini mungkin berbeda dari satu sistem ke sistem lainnya.

TomTom
sumber
0

Baru-baru ini terlihat seperti CentOS-6.6 grub.conf seperti ini dapat diedit secara manual untuk mengubah pilihan default:

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

Peregangan Debian:

Daripada bermain-main dengan file konfigurasi, buat folder di /noot(sebut saja apa yang Anda inginkan), tinggalkan kernel yang Anda inginkan, bersama dengan konfigurasi yang sesuai dan file sistem, masuk /bootdan pindahkan sisanya ke folder baru ini.

Lari update-grub.

Periksa /bootfolder yang versi kernel dan konfigurasi yang sesuai dan file sistem masih ada di sana (jika Anda menyalin sesuatu yang seharusnya tidak Anda miliki) dan reboot.

Pinkie Perie
sumber