Làm cách nào để thiết lập chính xác mục nhập mặc định GRUB 2 đúng?


27

Tôi đang chạy GRUB 2.00 trên hệ thống Gentoo Linux.

Tôi biên dịch hạt nhân của riêng tôi bằng tay, và sau đó tôi cài đặt chúng ở /bootvới make install. Tôi có các hạt nhân sau đây /boottại thời điểm này:

# 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

Chạy grub2-mkconfigkết quả trong đầu ra sau:

# 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

Nếu bây giờ tôi đọc /boot/grub2/grub.cfgtệp kết quả , tôi nhận thấy rằng các mục sau đây đã được tạo:

  • Một mục mặc định chính bắt đầu vmlinuz-3.7.4-gentoo-third
  • Một menu con với tất cả các mục khác (bao gồm cả các mục khôi phục), theo cùng thứ tự với grub2-mkconfiglệnh

Vấn đề là tại thời điểm khởi động, tôi muốn tải theo mặc định phiên bản thứ năm của kernel ( vmlinuz-3.7.4-gentoo-5), chứ không phải thứ ba ( vmlinuz-3.7.4-gentoo-third). Tôi cũng không muốn truy cập menu con để chọn kernel phù hợp để tải.

Làm thế nào tôi có thể thay đổi hành vi này? Làm cách nào tôi có thể nói với GRUB rằng tôi muốn chạy phiên bản thứ năm của kernel theo mặc định chứ không phải phiên bản thứ ba cũ hơn? Nói chung, làm cách nào tôi có thể thay đổi dòng nhập mặc định để khớp với kernel tôi muốn và không phải là dòng có vẻ ngẫu nhiên được GRUB chọn?

Tôi cũng đã thử đặt các dòng sau vào /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Điều này không khắc phục vấn đề theo cách tôi mong muốn. Nhưng ít nhất GRUB dường như còn nhớ hạt nhân mới nhất mà tôi đã khởi động và tự động chọn nó từ menu con. Chỉ là tôi không muốn truy cập menu con.


Tôi nhận thấy bạn chỉ định -o /boot/grub2/grub.cfglà tập tin đầu ra. Liệu thư mục /boot/grub/vẫn còn tồn tại?
ott--

Câu trả lời:


12

Để chọn một mục menu trong menu phụ "Tùy chọn nâng cao", đặt GRUB_DEFAULT = "1> 3". Bây giờ bạn có thể chạy grub2-mkconfig để tạo tệp cấu hình grub. Trong lần khởi động lại tiếp theo, vmlinuz-3.7.4-gentoo-5 sẽ khởi động.

Lưu ý : Điều này sẽ không thay đổi mục nhập mặc định trong menu grub, tức là, mục nhập mặc định vẫn sẽ chỉ ra mục tương tự như bạn có ngay bây giờ. Nhưng hình ảnh sẽ được khởi động theo mặc định sẽ là hình ảnh thứ 4 trong phần "Tùy chọn nâng cao". Để biến vmlinuz-3.7.4-gentoo-5 làm mục nhập mặc định trong menu grub, thứ tự hình ảnh phải sao cho vmlinuz-3.7.4-gentoo-5 phải là hình ảnh đầu tiên khi bạn chạy grub2-mkconfig .


2
Lưu ý rằng các dấu ngoặc kép là quan trọng. Tức là GRUB_DEFAULT = 1> 3 sẽ không hoạt động.
ctuffli

7

Nếu bạn có menu con trong grub.cfg, bạn nên sử dụng hai chữ số như thế này:

grub-reboot '1>3'

Đầu tiên là chỉ mục menu và thứ hai là chỉ mục menu con.

Ví dụ: để khởi động mục cuối cùng từ cấu hình như thế này:

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

bạn nên sử dụng:

grub-reboot '1>5'

và khởi động lại.


Kỳ dị. chỉ mục menu con bắt đầu bằng 0, trong khi menu chính từ 1
VarunAgw

5

bạn cũng có thể sử dụng GRUB_DEFAULT=saved. Trong trường hợp này bạn sẽ sử dụng

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

hoặc nếu nó chỉ dành cho lần khởi động tiếp theo:

$ 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

Thử

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

Điều này di chuyển tất cả các hạt nhân chưa sử dụng của bạn vào một thư mục sao lưu, ngay bây giờ:

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

Điều này chỉ thêm sự lựa chọn r5vào thực đơn của bạn. Sau khi làm như vậy, hãy đọc liên kết này và sau đó trích xuất tất cả các hạt nhân trong thư mục sao lưu, không phải là vmlinuz nếu bạn khăng khăng giữ chúng


2

Với centos7 (hoặc RHEL7) và grub2:

grub sử dụng mục nhập 'yet_entry' từ grubenv làm mặc định để khởi động, sniplet từ /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

để kiểm tra xem 'yet_entry' là gì bản dựng của tôi:

grub2-editenv list

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

để thay đổi nó, ví dụ như bản dựng gỡ lỗi của tôi:

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

1

Những gì tôi đã làm để đạt được kết quả mong muốn là:

  • thiết lập GRUB_DEFAULT=savednhư được nêu trong grub-set-defaulttrợ giúp

    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.

  • Đặt giá trị mặc định

    grub-set-default "1>2"

    Nó tạo ra một tệp mới trong / boot / grub gọi là grubenv với thông tin cần thiết.

  • Sau đó, tôi tạo lại tập tin cấu hình

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

Và tôi đã thấy rằng cấu hình đã được thay đổi để sử dụng trạng thái đã lưu:

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

Bạn có thể đặt lựa chọn mặc định theo giá trị số. Nếu bạn đặt

`GRUB_DEFAULT=3` 

trong /etc/default/grub
Bạn sẽ đặt mặc định cho mục gentoo-5.
GRUB_DEFAULTlà độ lệch bằng 0, vì vậy 3 sẽ chọn mục thứ tư theo ý muốn.


2
Tôi không biết tại sao, nhưng có vẻ như nó không hoạt động. Tôi đặt GRUB_DEFAULT=3như bạn nói, sau đó chạy lại grub2-mkconfig. Nhưng tại thời điểm khởi động, mục mặc định vẫn còn vmlinuz-3.7.4-gentoo-third.
Francesco Turco

1
Hãy thử bình luận GRUB_SAVEDEFAULT=trueKhông nên quan trọng, nhưng nó không cần thiết với số.
bsd

2
Tôi không có tùy chọn đó trong /etc/default/grubtập tin của mình .
Francesco Turco

0

Tôi nghi ngờ rằng grub2-mkconfigsắp xếp các hạt nhân theo thứ tự ngược lại, giả sử rằng chúng chủ yếu chứa số phiên bản tăng đơn điệu. Vì vậy, bắt đầu chọn thẻ của bạn để phù hợp với quy ước đó.


0

mv những tệp phiên bản mới / chưa được sử dụng trong / boot vào thư mục sao lưu ví dụ / 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-generic

khởi động lại hệ thống vào chế độ cứu hộ, sau đó chọn grub trong hộp thoại cứu hộ, sau đó mọi thứ sẽ ổn.

đó là phương pháp phù hợp nhất tôi nghĩ Tôi đang sử dụng Ubuntu 14.04.


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.