Definir o kernel padrão no GRUB

30

Como posso escolher qual kernel o GRUB2 deve carregar por padrão? Eu recentemente instalei um kernel linux em tempo real e agora ele carrega por padrão. Eu gostaria de carregar o normal por padrão.

Até agora eu só consegui escolher o sistema operacional padrão .. e por alguma razão o /boot/grub.cfg já assume que eu quero carregar o rt-kernel e colocá-lo na entrada do menu genérico do Linux (no meu caso Arch Linux) .

    
por TomTom 22.04.2015 / 23:04

6 respostas

2

O jkt123 funcionará para a maioria das distribuições, eu acho. No entanto, para o Arch Linux, não funcionou, pelo menos não com os pacotes que tenho disponíveis.

Os índices que você pode definir com grub-set-default correspondem apenas às entradas do menu principal. As opções do kernel, no entanto, estão em um submenu. Então ou você move a entrada do kernel para fora do submenu no menu principal ou coloca a entrada no topo da lista do submenu e seleciona o submenu.

Meu menu do Grub

  • Arch Linux
  • Opções avançadas para o Arch Linux
    • Kernel 1
    • Kernel 2
  • Windows

Para poder inicializar o Kernel 2, você deve trocá-lo pelo Kernel 1 ou colocá-lo fora do submenu no mesmo nível que o Arch Linux ou o Windows. Em seguida, defina o número padrão para um dos índices do menu principal. Por exemplo, no menu acima, "0" inicializa "Arch Linux" e "1" inicializa o Kernel 1.

Para mudar a hierarquia e trocar, abra /boot/grub/grub.cfg e mova a entrada que você deseja mover. Uma entrada poderia se parecer com isso

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

Então você precisa aplicar suas alterações. No meu caso com grub-mkconfig . Mas isso pode variar de sistema para sistema.

    
por 23.04.2015 / 10:30
27

Acho que a maioria das distribuições migraram kernels adicionais para o submenu de opções avançadas neste ponto, como a TomTom descobriu que foi o caso de Arco.

Eu não queria alterar minha estrutura de menu de nível superior para selecionar um kernel anterior como padrão. Eu encontrei a resposta aqui:

link

Para resumir:

1) Encontre a $menuentry_id _option para o 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) Encontre o $menuentry_id_option para a entrada de menu do kernel que você deseja usar:

$ 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) Comente seu grub padrão atual em /etc/default/grub e substitua-o pelo $menuentry_id_option do sub-menu do passo um, e o $menuentry_id_option do kernel selecionado do segundo passo separado por > .

No meu caso, o GRUB_DEFAULT modificado é:

#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) Atualize o grub para fazer as alterações. Para o Debian isto é feito da seguinte forma:

$ sudo update-grub

Concluído. Agora, quando você inicializa, o menu avançado deve ter um asterisco e você deve inicializar no kernel selecionado. Você pode confirmar isso com 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

Alterar isso para o kernel mais recente é tão simples quanto comentar a nova linha e descomentar #GRUB_DEFAULT=0 , em seguida, reexecutando update-grub .

    
por 03.12.2016 / 00:46
20

Como mencionado nos comentários, você pode configurar o kernel padrão para inicializar usando o comando grub-set-default X , onde X é o número do kernel no qual você quer inicializar. Em algumas distribuições, você também pode definir esse número editando o arquivo /etc/default/grub e definindo GRUB_DEFAULT=X e, em seguida, executando update-grub .

O número é o índice para uma matriz de configurações de kernels / kernel mostradas no menu do GRUB durante a inicialização, com 0 sendo a primeira (a mais superior) entrada. Geralmente, você pode encontrar o número certo procurando menuentry linhas em /boot/grub/grub.cfg , assim:

grep menuentry /boot/grub/grub.cfg

Você verá cada kernel listado com o nome que é mostrado no menu de inicialização do GRUB. O primeiro é 0, o segundo é 1 e assim por diante.

    
por 23.04.2015 / 01:37
12

Depois de lutar por duas horas, encontrei uma maneira muito mais fácil de conseguir isso. Eu apenas RTFM. ;)

Adicione duas linhas ao arquivo / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Faça o sudo update-grub , reinicialize, entre no seu menu grub e selecione qualquer item de menu ou submenu que você precisar. A escolha será salva e, da próxima vez, o computador inicializará automaticamente.

    
por 03.02.2018 / 15:48
8

Basta fazer o grep 'menuentry' /boot/grub/grub.cfg listar entradas adicionais que não estejam relacionadas ao kernel real ou às versões do sistema operacional. Por exemplo, lista

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

Gostaria de propor uma pequena melhoria ao método de pesquisa desse arquivo: use 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' {

Com o comando abaixo e sua saída, você pode ver o código awk emparelhado com a versão atual do sistema operacional e fornecer o número que você pode usar no arquivo /etc/default/grub .

Além de editar o arquivo /etc/default/grub manualmente, sugiro usar sed . No comando abaixo, substitua X pelo número apropriado que você obteve do comando awk acima:

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

    
por 21.08.2015 / 20:55
0

Tão recentemente quanto o CentOS-6.6 o grub.conf parecia que esta lata poderia ser editada manualmente para mudar a seleção padrão:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    
por 19.05.2017 / 22:14