Definir o kernel padrão no GRUB

49

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

Até agora, só consegui escolher o sistema operacional padrão .. e, por alguma razão, o /boot/grub.cfgjá pressupõe que eu quero carregar o rt-kernel e colocá-lo na entrada de menu genérica do linux (no meu caso, Arch Linux).

TomTom
fonte
2
grub2-set-default <título ou número>?
taliezin
1
Mas como eu sei o número? Os números grub.cfgcorrespondem apenas aos sistemas operacionais e não aos kernels.
TomTom
Em alguns casos, isso funciona: askubuntu.com/questions/216398/… Você pode encontrar os nomes dos menus
consultando

Respostas:

42

Eu acho que a maioria das distribuições transferiu kernels adicionais para o submenu de opções avançadas neste momento, como a TomTom descobriu que era o caso de seu Arch.

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

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

Para resumir:

1) Encontre a $menuentry_id_opção 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 a $menuentry_id_optionentrada 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 /etc/default/grube substitua-o pelos submenus $menuentry_id_optionda etapa um e os kernel selecionados $menuentry_id_optionda etapa dois separados por >.

No meu caso, o modificado GRUB_DEFAULTé:

#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, isso é feito da seguinte maneira:

$ sudo update-grub

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

Mudar isso para o kernel mais recente é tão simples quanto comentar a nova linha e descomentar #GRUB_DEFAULT=0, e depois executar novamente update-grub.

William LK
fonte
31

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

Adicione duas linhas ao / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Faça o sudo update-grub, reinicie, entre no menu do grub e selecione o item de menu ou submenu necessário. A escolha será salva e da próxima vez que o computador for inicializado automaticamente.

Jimmy Falcon
fonte
2
Maravilhoso! Tão simples!
Egor Skriptunoff 29/03
Oh, muito mais simples. Obrigado.
user207863 31/10
21

Conforme mencionado nos comentários, você pode configurar o kernel padrão para inicializar usando o grub-set-default Xcomando, onde X é o número do kernel no qual você deseja inicializar. Em algumas distribuições, você também pode definir esse número editando o /etc/default/grubarquivo e a configuração GRUB_DEFAULT=Xe executando update-grub.

O número é o índice de uma matriz de configurações de kernels / kernel mostrada no menu GRUB durante a inicialização, com 0 sendo a primeira entrada (a mais alta). Geralmente, você pode encontrar o número certo procurando menuentrylinhas /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.

jkt123
fonte
1
No Fedora 21 é /boot/grub2/grub.cfg.
somethingSomething
3
Isso não está funcionando para mim. O kernel mais recente da minha instalação é o 4.4.0-64-generic (menuentry 0), mas quero que o 4.4.0-59-generic (menuentry 9) seja o kernel de inicialização padrão. Eu corri grub-set-default 9e depois grub-updatereiniciei. Deixei o grub inicializar com o kernel padrão e ele ainda é inicializado com o 4.4.0-64-generic . Eu também tentei editar, /etc/default/grubdefinir GRUB_DEFAULT=9e executar grub-update. Na reinicialização, nada muda, o sistema ainda é inicializado com o 4.4.0-64-genérico . Talvez eu tenha perdido alguma coisa, alguém pode me ajudar?
Dronacharya
Isso também não funcionou para mim. Eu apaguei o kernel indesejado, como explicado aqui: askubuntu.com/a/764242/456247
Luis
8

Basta fazer uma grep 'menuentry' /boot/grub/grub.cfglista de entradas adicionais que não estão relacionadas às versões reais do kernel ou do sistema operacional. Por exemplo, lista

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

Eu gostaria de propor uma pequena melhoria no método de busca nesse 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 awkcódigo corresponder à versão real do sistema operacional e fornecer o número que você pode usar em /etc/default/grubarquivo.

Além de editar o /etc/default/grubarquivo manualmente, sugiro usar sed. No comando abaixo, substitua X pelo número apropriado obtido no comando awk acima:

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

Sergiy Kolodyazhnyy
fonte
2
Esta não é uma resposta. Parece um comentário. Uma resposta deve dizer: "Isto é como definir a entrada padrão no GRUB", não "deixe-me fazer um adendo para outra resposta". Você pode facilmente editar isso em uma resposta adequada, mas pode ser mais inteligente deixar um comentário na resposta do jkt123 sobre o uso do awk em vez do grep.
Aleksandr Dubinsky
2

Acho que o jkt123 funciona para a maioria das distribuições. 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 grub-set-defaultcorrespondem apenas às entradas do menu principal. As opções do kernel estão no entanto em um submenu. Então, você move a entrada do kernel do submenu para o menu principal ou coloca a entrada no topo da lista de submenus e seleciona o submenu.

My Grub Menu

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

Para poder inicializar o Kernel 2, você deve trocá-lo pelo Kernel 1 ou colocá-lo fora do submenu no mesmo nível do Arch Linux ou Windows. E 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 alterar a hierarquia e trocar, abra /boot/grub/grub.cfge mova a entrada que deseja mover. Uma entrada pode ser assim

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.

TomTom
fonte
0

Tão recentemente quanto o CentOS-6.6, o grub.conf parecia que isso poderia ser editado manualmente para alterar a seleção padrão:

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

Extensão do Debian:

Em vez de mexer nos arquivos de configuração, crie uma pasta /noot(chame como quiser), deixe o kernel desejado, juntamente com os arquivos de configuração e de sistema correspondentes, /boote mova o restante para essa nova pasta.

Corra update-grub.

Verifique duas vezes a /bootpasta em que a sua versão do kernel e os arquivos de configuração e sistema correspondentes ainda estão lá (caso você tenha copiado algo que não deveria ter) e reinicie.

Pinkie Perie
fonte