Como configurar corretamente a entrada de menu padrão correta do GRUB 2?

27

Estou executando o GRUB 2.00 em um sistema Gentoo Linux.

Eu compilar meus próprios kernels manualmente, e então eu instalá-los em /bootcom make install. Eu tenho os seguintes kernels no /bootmomento:

# 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

A execução grub2-mkconfigresulta na seguinte saída:

# 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

Se agora eu ler o /boot/grub2/grub.cfgarquivo resultante , aviso que as seguintes entradas foram criadas:

  • Uma entrada padrão principal que inicia vmlinuz-3.7.4-gentoo-third
  • Um submenu com todas as outras entradas (incluindo as de recuperação), na mesma ordem que o grub2-mkconfigcomando

O problema é que, no momento da inicialização, eu gostaria de carregar por padrão a quinta revisão do meu kernel ( vmlinuz-3.7.4-gentoo-5), não a terceira (vmlinuz-3.7.4-gentoo-third ). Também prefiro não acessar o submenu para escolher o kernel correto para carregar.

Como posso mudar esse comportamento? Como posso dizer ao GRUB que quero executar a quinta revisão do meu kernel por padrão e não a terceira revisão mais antiga? Em geral, como posso alterar a linha de entrada padrão para corresponder ao kernel desejado e não ao aparentemente aleatório escolhido pelo GRUB?

Eu também tentei colocar as seguintes linhas /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Isso não resolve o problema da maneira que desejo. Mas pelo menos o GRUB parece se lembrar do kernel mais recente do qual iniciei e o seleciona automaticamente no submenu. Só que não gosto de acessar o submenu.

Francesco Turco
fonte
Notei que você especificou -o /boot/grub2/grub.cfgcomo arquivo de saída. O diretório /boot/grub/ainda existe?
#

Respostas:

12

Para selecionar uma entrada de menu no submenu "Opções avançadas", defina GRUB_DEFAULT = "1> 3". Agora você pode executar o grub2-mkconfig para gerar o arquivo de configuração do grub. Na próxima reinicialização, o vmlinuz-3.7.4-gentoo-5 deve inicializar.

Nota : Isso não altera a entrada padrão no menu grub, ou seja, a entrada padrão ainda indica a mesma entrada que você tem agora. Mas a imagem que será inicializada por padrão será a quarta imagem nas "Opções avançadas". Para tornar o vmlinuz-3.7.4-gentoo-5 como a entrada padrão no menu grub, a ordem das imagens deve ser tal que o vmlinuz-3.7.4-gentoo-5 seja a primeira imagem ao executar o grub2-mkconfig .

anaken78
fonte
2
Observe que as aspas são importantes. Ou seja, GRUB_DEFAULT = 1> 3 não funcionará.
precisa saber é o seguinte
7

Se você possui um submenu no seu grub.cfg, use dois dígitos como este:

grub-reboot '1>3'

O primeiro é o índice do menu e o segundo é o índice do submenu.

Por exemplo, para inicializar a última entrada da configuração como esta:

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

você deveria usar:

grub-reboot '1>5'

e reinicie.

AstraSerg
fonte
Esquisito. índice do submenu começa com 0, enquanto o menu principal de 1
VarunAgw 19/09/17
5

você também pode usar GRUB_DEFAULT=saved. Nesse caso, você usaria

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

ou se for apenas para a próxima inicialização:

$ 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
fonte
2

Experimentar

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

Isso move todos os seus kernels não utilizados para um diretório de backup, agora:

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

Isso apenas adiciona opções r5ao seu menu. Após fazer isso, leia este este link e depois Reame todos os kernels no diretório algo backup diferente do vmlinuz se você insistir em mantê-los

eyoung100
fonte
2

Com centos7 (ou RHEL7) e grub2:

O grub usa a entrada 'saved_entry' do grubenv como padrão para inicializar, extraia de /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

para verificar o que é 'save_entry' agora é minha compilação:

grub2-editenv list

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

para alterá-lo, por exemplo, para minha compilação de depuração:

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

O que eu fiz para alcançar o resultado desejado foi:

  • defina o GRUB_DEFAULT=saveddescrito na grub-set-defaultajuda

    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.

  • Defina o valor padrão

    grub-set-default "1>2"

    Ele cria um novo arquivo em / boot / grub chamado grubenv com as informações necessárias.

  • Depois, recrio o arquivo de configuração

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

E vi que a configuração foi alterada para usar o estado salvo:

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
fonte
0

Você pode definir a opção padrão por valor numérico. Se você definir

`GRUB_DEFAULT=3` 

in /etc/default/grub
Você definirá o padrão para a entrada do gentoo-5.
GRUB_DEFAULTé o deslocamento zero, então 3 selecionará a quarta entrada como desejar.

bsd
fonte
2
Não sei por que, mas parece que não funciona. Eu ajustei GRUB_DEFAULT=3como você disse e depois execute novamente grub2-mkconfig. Mas no momento da inicialização, a entrada padrão ainda é vmlinuz-3.7.4-gentoo-third.
Francesco Turco 27/01
11
Tente comentar GRUB_SAVEDEFAULT=trueNão deve importar, mas não é necessário com números.
BSD
2
Eu não tenho essa opção no meu /etc/default/grubarquivo.
Francesco Turco
0

Suspeito que grub2-mkconfigclassifique os kernels em ordem inversa, supondo que eles contenham principalmente números de versão monotonicamente crescentes. Então comece a escolher suas tags para se encaixar nessa convenção.

cpugeniusmv
fonte
0

mv esses arquivos de versão novos / não usados ​​em / boot em um diretório de backup, por exemplo / 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

reinicie o sistema no modo de recuperação, escolha grub na caixa de diálogo de recuperação e tudo ficará bem.

é o método mais adequado, eu acho. Estou usando o ubuntu 14.04.

johnvuong1999
fonte