Đặt kernel mặc định trong GRUB


49

Làm cách nào tôi có thể chọn kernel GRUB2 nên tải theo mặc định? Gần đây tôi đã cài đặt kernel linux realtime và bây giờ nó tải theo mặc định. Tôi muốn tải cái thường xuyên theo mặc định.

Cho đến nay tôi chỉ có thể chọn hệ điều hành mặc định .. và vì một số lý do, tôi /boot/grub.cfgđã giả định rằng tôi muốn tải rt-kernel và đưa nó vào mục nhập menu linux chung (trong trường hợp của tôi là Arch Linux).


2
grub2-set-default <title hoặc number>?
Taliezin

1
Nhưng làm thế nào để tôi biết số? Các số grub.cfgchỉ tương ứng với các HĐH chứ không phải các hạt nhân.
TomTom

Trong một số trường hợp, cách này có hiệu quả: Askubfox.com/questions/216398/, Bạn có thể tìm thấy tên menu bằng cách xem qua tệp này: /boot/grub/grub.cfg
TekOps

Câu trả lời:


41

Tôi nghĩ rằng hầu hết các bản phân phối đã chuyển các hạt nhân bổ sung vào menu phụ tùy chọn nâng cao vào thời điểm này, vì TomTom tìm thấy là trường hợp với Arch của anh ta.

Tôi không muốn thay đổi cấu trúc menu cấp cao nhất của mình để chọn kernel trước đó làm mặc định. Tôi tìm thấy câu trả lời ở đây:

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

Để tóm tắt:

1) Tìm $menuentry_id_option cho menu con:

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

2) Tìm $menuentry_id_optionmục nhập cho menu bạn muốn sử dụng:

$ 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) Nhận xét /etc/default/grubmạng lưới mặc định hiện tại của bạn và thay thế nó bằng menu phụ $menuentry_id_optiontừ bước một và hạt nhân được chọn $menuentry_id_optiontừ bước hai cách nhau >.

Trong trường hợp của tôi, sửa đổi GRUB_DEFAULTlà:

#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) Cập nhật grub để thực hiện các thay đổi. Đối với Debian, việc này được thực hiện như vậy:

$ sudo update-grub

Làm xong. Bây giờ khi bạn khởi động, menu nâng cao sẽ có dấu hoa thị và bạn nên khởi động vào kernel đã chọn. Bạn có thể xác nhận điều này với 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

Thay đổi điều này thành kernel gần đây nhất cũng đơn giản như bình luận ra dòng mới và không chú ý #GRUB_DEFAULT=0, sau đó chạy lại update-grub.


31

Sau khi vật lộn trong 2 giờ, tôi đã tìm thấy một cách dễ dàng hơn nhiều để đạt được điều này. Tôi chỉ RTFM. ;)

Thêm hai dòng vào / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Thực hiện sudo update-grub, khởi động lại, vào menu grub của bạn và chọn bất kỳ menu hoặc mục menu con nào bạn cần. Lựa chọn sẽ được lưu và lần sau máy tính của bạn sẽ tự động khởi động vào nó.


2
Tuyệt vời! Quá đơn giản!
Egor Skriptunoff

Ồ, đơn giản hơn nhiều. Cảm ơn bạn.
dùng207863

21

Như đã đề cập trong các bình luận, bạn có thể đặt kernel mặc định để khởi động bằng cách sử dụng grub-set-default Xlệnh, trong đó X là số kernel bạn muốn khởi động. Trong một số bản phân phối, bạn cũng có thể đặt số này bằng cách chỉnh sửa /etc/default/grubtệp và cài đặt GRUB_DEFAULT=X, rồi chạy update-grub.

Số này là chỉ mục cho một mảng các cài đặt kernel / kernel được hiển thị trong menu GRUB trong khi khởi động, với 0 là mục nhập đầu tiên (trên cùng). Bạn thường có thể tìm đúng số bằng cách tìm các menuentrydòng trong /boot/grub/grub.cfg, như vậy:

grep menuentry /boot/grub/grub.cfg

Bạn sẽ thấy mỗi hạt nhân được liệt kê với tên được hiển thị trong menu khởi động GRUB. Cái đầu tiên là 0, cái thứ hai là 1, v.v.


1
Trong Fedora 21, nó /boot/grub2/grub.cfg.
một cái gì đó

3
Điều này không làm việc cho tôi. Hạt nhân mới nhất trong cài đặt của tôi là 4.4.0-64-generic ( menuentry 0) nhưng tôi muốn 4.4.0-59-generic ( menuentry 9) là kernel khởi động mặc định. Tôi chạy grub-set-default 9và sau đó grub-updatekhởi động lại. Tôi để grub khởi động với kernel mặc định và nó vẫn khởi động với 4.4.0-64-generic . Tôi cũng đã thử chỉnh sửa /etc/default/grubvà thiết lập GRUB_DEFAULT=9và chạy grub-update. Khi khởi động lại không có gì thay đổi, hệ thống vẫn khởi động với 4.4.0-64-generic . Có lẽ tôi đã bỏ lỡ điều gì đó, bất cứ ai có thể giúp tôi?
Dronacharya

Điều này cũng không làm việc cho tôi. Tôi đã xóa kernel không mong muốn như được giải thích ở đây: Askubfox.com/a/764242/456247
Luis

8

Đơn giản chỉ cần thực hiện grep 'menuentry' /boot/grub/grub.cfgliệt kê các mục bổ sung không liên quan đến các phiên bản kernel hoặc hệ điều hành thực tế. Ví dụ, nó liệt kê

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

Tôi muốn đề xuất một cải tiến nhỏ cho phương pháp tìm kiếm tệp đó: sử dụng 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' {

Với lệnh dưới đây và đầu ra của nó, bạn có thể thấy awkmã khớp với phiên bản HĐH thực tế và cung cấp cho bạn số mà sau đó bạn có thể sử dụng trong /etc/default/grubtệp.

Ngoài việc chỉnh sửa /etc/default/grubtập tin bằng tay, tôi đề nghị sử dụng sed. Trong lệnh dưới đây, thay thế X bằng số thích hợp bạn nhận được từ lệnh awk ở trên:

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


2
Đây không phải là một câu trả lời. Nó đọc như một bình luận. Một câu trả lời sẽ nói: "Đây là cách đặt mục nhập mặc định trong GRUB", chứ không phải "để tôi thực hiện một phụ lục cho câu trả lời khác". Bạn có thể dễ dàng chỉnh sửa câu trả lời này thành một câu trả lời thích hợp, nhưng có thể thông minh hơn nếu chỉ để lại nhận xét về câu trả lời của jkt123 về việc sử dụng awk thay vì grep.
Alexanderr Dubinsky

2

Tôi đoán jkt123 sẽ làm việc cho hầu hết các bản phân phối. Tuy nhiên, đối với Arch Linux thì nó không hoạt động, ít nhất là không phải với các gói tôi có sẵn.

Các chỉ số bạn có thể đặt grub-set-defaultchỉ tương ứng với các mục menu chính. Các tùy chọn kernel là tuy nhiên trong một menu con. Vì vậy, hoặc bạn di chuyển mục nhân ra khỏi menu phụ vào menu chính hoặc bạn đặt mục nhập lên trên danh sách menu phụ và chọn menu con.

Menu Grub của tôi

  • Arch Linux
  • Tùy chọn nâng cao cho Arch Linux
    • Hạt nhân 1
    • Hạt nhân 2
  • các cửa sổ

Để có thể khởi động Kernel 2, bạn phải trao đổi nó với Kernel 1 hoặc bạn đặt nó bên ngoài menu con ở cùng cấp độ với Arch Linux hoặc Windows. Và sau đó đặt số mặc định thành một trong các chỉ mục menu chính. Ví dụ: trong menu ở trên "0" khởi động "Arch Linux" và "1" khởi động Kernel 1.

Để thay đổi cấu trúc phân cấp và trao đổi, hãy mở /boot/grub/grub.cfgvà di chuyển mục bạn muốn di chuyển. Một mục có thể trông như thế này

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

Sau đó, bạn cần phải áp dụng những thay đổi của bạn. Trong trường hợp của tôi với grub-mkconfig. Nhưng điều này có thể thay đổi từ hệ thống để hệ thống.


0

Như gần đây vì CentOS-6.6 grub.conf trông như thế này có thể được chỉnh sửa thủ công để thay đổi lựa chọn mặc định:

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

0

Debian kéo dài:

Thay vì loay hoay với các tập tin cấu hình, hãy tạo một thư mục trong /noot(gọi nó là những gì bạn muốn), để lại kernel bạn muốn, cùng với các tập tin cấu hình và hệ thống phù hợp, /bootvà chuyển phần còn lại sang thư mục mới này.

Chạy đi update-grub.

Kiểm tra kỹ /bootthư mục rằng phiên bản kernel của bạn và các tệp hệ thống và cấu hình phù hợp vẫn còn đó (trong trường hợp bạn đã sao chép thứ gì đó bạn không nên có) và khởi động lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.