GRUB 2 - Monte você mesmo o menu

Venho mostrar como é de grande valia, você mesmo ter o poder sobre o GRUB 2, podendo fazer a edição que quiser, sem deixar com linhas duplicadas e sem grande escrita. Tendo, assim, um menu limpo e elegante.

[ Hits: 26.293 ]

Por: Glauber GF em 26/02/2014 | Blog: http://www.vivaolinux.com.br/~mcnd2


Obtendo informações



Essa experiência foi executada em um sistema Debian. Editando e acrescentando no menu do GRUB 2, os sistemas:
  • Debian 7
  • Mageia 4
  • Sabayon 14.03
  • Windows 7

Com o GRUB Legacy, era bem mais fácil fazer as edições (na época, nem tanto. rs!)

Lembrando:
Para começar, com o sistema Debian iniciado e com a certeza do GRUB 2 (pacotes grub-common, grub-pc, grub-pc-bin, grub2-common e os-prober) instalado, vamos obter informações para acrescentarmos na edição do menu.

Listaremos a tabela de partições, para sabermos os devices das partições do HDD. Poderemos executar o comando fdisk -l, caso já saiba o que pertence a cada partição.

Caso não saiba, e que nem eu você tem a mania de rotular as partições, poderemos, no caso do Debian, usar o comando blkid, que inclusive lista as UUID de cada partição:

Bom, já sabemos o que há em cada partição. Agora, vamos pegar as informações de kernel das distribuições em cada partição /boot, para podermos editar nosso arquivo do menu do GRUB 2.

Nas imagens abaixo, vemos o /boot do Debian, o /boot do Sabayon e o /boot do Mageia:
Linux: GRUB 2 - Monte você mesmo o menu   Linux: GRUB 2 - Monte você mesmo o menu   Linux: GRUB 2 - Monte você mesmo o menu

Com as informações das partições em mãos, sabendo cada kernel instalado em cada distribuição GNU/Linux, poderemos fazer a edição almejada.

Para executarmos o menu, vamos editar o arquivo 40_custom - um "template" (modelo de documento vazio para adicionar entradas personalizadas ao menu para outros S.Os.) - que fica no diretório /etc/grub.d.

O conteúdo do arquivo 40_custom antes da edição, sem nenhum conteúdo para subir o boot!

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

Vemos também, no diretório /etc/grub.d/, que temos outros arquivos (scripts) de execução para a leitura do GRUB 2 e, assim, subir o menu com as informações de cada script. Mas, não teremos todos eles com o poder de execução, assim, não sendo lidos pelo GRUB 2 e não carregados na tela do mesmo.

Então, tiraremos o poder de execução dos arquivos 10_linux, 20_memtest86+ e os-prober, com o comando chmod -x ....

Com a permissão de execução alterada dos arquivos referidos acima, agora, no arquivo 40_custom aberto, faremos a edição do menu para os sistemas instalados.

Como já sabemos, os devices (sda[x]), as UUIDs das partições e o caminho dos diretórios para o kernel instalado de cada distribuição, acrescentaremos essas informações no arquivo 40_custom e faremos nosso menu personalizado.

* Uma observação a ser analisada, caso tenha outros sistemas que queira inseridos no menu, é em relação aos devices. Se temos um único HDD conectado, ele é reconhecido pelo GRUB como "hd0" (sda). Caso tenha dois ou mais HDs conectados, o GRUB vai reconhecer como "hd1" (sdb), "hd2" (sdc), etc.

Os números das partições não são alterados, ficando o mesmo reconhecido no sda/sdb/sdc, como por exemplo:
  • hd0,1 = sda1
  • hd1,3 = sdb3
  • hd2,2 = sdc2

Tabela:
    
  Linux       (GRUB 2)
  /dev/sda1   (hd0,1)
  /dev/sda2   (hd0,2)
  /dev/sdb1   (hd1,1)
  /dev/sdb2   (hd1,2)
  /dev/sdb3   (hd1,3)
  /dev/sdc1   (hd2,1)
  /dev/sdc2   (hd2,2)


    Próxima página

Páginas do artigo
   1. Obtendo informações
   2. Criando o menu com as informações obtidas
   3. Finalizando / Observação
Outros artigos deste autor

"Wolfenstein: Enemy Territory" e "Hidden & Dangerous Deluxe" no Debian Lenny

Atualizando Mageia 5 para versão 6

Erro no KDM (temas) depois de update no Sabayon

Configuração do Compiz Fusion pós instalação

Modem USB 3G largado na gaveta! Nãããõooo...

Leitura recomendada

Gerenciamento remoto de servidores VMWare via SSH

Faça o GNU/Linux falar as horas para você

Kolourpaint - Um editor gráfico muito útil

Instalando o Ocomon 1.40 no FreeBSD 6.0

Mate Desktop no Slackware

  
Comentários
[1] Comentário enviado por removido em 26/02/2014 - 09:24h

Boa dica!
Será que teria como criar um script que automatize esse procedimento?

[2] Comentário enviado por removido em 26/02/2014 - 09:56h

Bom dia..

A VOL agradece a contribuição. apenas deixando uma contribuição... na linha da página número 2 onde diz:

set root='(/dev/sda,msdos6)' :: Device/partição - onde se encontra o sistema instalado.

Na verdade essa opção da configuração do grub.cfg refere-se a partição onde encontra-se os arquivos que iniciam (kernel e initrd) o sistema.

[3] Comentário enviado por mcnd2 em 26/02/2014 - 18:52h

@costapha, só quem entende de scripts poderá opinar sobre, mais uma coisa é certa, se tem como, deve dar um trabalhinho, rS!

@eabreu, quase a mesma referência, e como tentei ser breve saiu essas palavras. No caso quando disse que "onde se encontra o sistema instalado", foi a mesma intenção de chamar os arquivos que na partição estão, sendo eles lidos para subir o sistema.

Obrigado pelos feedback.

[4] Comentário enviado por removido em 26/02/2014 - 20:09h

Glauber, no arquivo "40_custom" completo, vi que colocou as entradas dos sistemas fora da ordem das partições.

Exemplo: a ordem é "sda6", "sda5", "sda7" e "sda2".

Pergunto se essa ordenação altera o tempo de boot ou é indiferente.

[5] Comentário enviado por mcnd2 em 26/02/2014 - 20:31h

Izaias, na minha concepção é indiferente a ordem.

Deixei desse jeito para ficar os sistemas em ordem alfabética: Debian > Mageia > Sabayon > Windows. Detalhe, rS!...

Nunca percebi demora no boot ao escolher o sistema, sobe o padrão de cada SO instalado sem demora.

Só estou com um probleminha no Mageia no boot mais nada haver com o Grub 2. O problema é com IPv6 ou algo relacionado com a ethernet.

...

[6] Comentário enviado por removido em 26/02/2014 - 20:54h

Ok, explicado.


Hoje em dia temos aplicativos (como o GRUB-Customizer) para gerenciar o GRUB, mas aprender sobre o arquivo-raiz da função, é outra coisa.

Ótima contribuição!

[7] Comentário enviado por mcnd2 em 26/02/2014 - 21:57h

Valeu Izaias...

[8] Comentário enviado por maran em 28/02/2014 - 21:03h

Belo artigo, é sempre bom saber fazer na raiz, afinal um dia você pode estar trabalhando e não ter estes recursos a seu favor.

Parabéns.
Abraço

[9] Comentário enviado por mcnd2 em 28/02/2014 - 21:19h

Fala @maran, tranquilidade? Tá meio sumido brother!

Com certeza é bom saber fazer na mão grande, pois como é de grande importância o gerenciamento do boot loader assim podendo iniciar o sistema desejado arrumando do seu jeito e não dependendo do sistema para isso.

Thank you.

[10] Comentário enviado por maran em 28/02/2014 - 21:50h

@mcnd2

É igual aquela camiseta brother mv social.life /dev/null

Tava complicado muito trampo, mais estou voltando pra comunidade,
espero que em breve possa já estar contribuindo com algumas coisas novas que aprendi desde o principio : )
Isso ai já faz algum tempo que venho acompanhando os artigos da galera antiga e os seus o nível técnico vem aumentado frequentemente.
Parabéns brother !

Abraço!

[11] Comentário enviado por ruantux em 01/03/2014 - 22:04h

Excelente artigo amigo, parabéns acho que da pra adicionar mais coisas e deixar o script mais automatizado mais mesmo assim excelente artigo abraços !

[12] Comentário enviado por mcnd2 em 02/03/2014 - 00:11h

Valeu @ruantux pelo comentário.

Abraço.

[13] Comentário enviado por pguarnierr em 27/04/2016 - 09:18h

Olá!
Gostei do tutorial!
Com base nele eu tentei resolver meu problema. Tenho dois sistemas instaldos, Ubuntu ( em sda1 )e Windows 7 ( em sda2 ), e ao formatar o Ubuntu por causa de um probelma que deu, não entrava mais o Windows. Apesar de ter só esses dois sistemas, tentei adaptar seu tutorial para o meu caso. Mas não sei se tá certo. Eu elaborei as seguintes entradas no arquivo 40_custom:

## Entrada para Ubuntu
menuentry "Ubuntu 14" --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos1)'
search --no-floppy --fs-uuid --set=root 59e2676f-ccc1-4a1a-9469-1be120bdef8b
linux /boot/vmlinuz-3.16.0-30-generic root=UUID=59e2676f-ccc1-4a1a-9469-1be120bdef8b ro quiet acpi_osi=linux
acpi_backlight=vendor splash
initrd /boot/initrd.img-3.16.0-30-generic
}

## Entrada para Windows em /dev/sda2
menuentry "Windows 7" --class windows --class os {
insmod part_msdos
insmod ntfs
set root
search --no-floppy --fs-uuid --set=root 6543D5821B566ECE
chainloader +1
}

Note que eu modifiquei as UUID das partições e para o meu caso.
O que me deixou em dúvida são os arquivos vmlinux e o initdr.img, pois no meu terminal listou vários arquivos desses, eu não sabia o qual eu ia escolher, não tinha nenhum igual aos descritos pelo seu tutorial. E também fiquei em dúvida com o final "ro quiet acpi_osi=linux", copiei como está ali, mas em todo sistema que eu vejo, essa expressão muda de pc para pc.

Agora eu vi que ficou faltando colocar em "set root" (/dev/sda,msdos2) da entrada para Windows, eu vi agora que tinha que colocar, na parte onde era para copiar os códigos não havia.

Vamos ao resultado:
Apareceu o GRUB na inicialização com os dois sitemas descritos, o que já é bom. Ao selecionar o Windows, não entra, cai em um aviso de erro, mas numa tela roxa, não preta. O Ubuntu entra normalmente. Depois verei se é por causa do complemento que ficou faltando em "set root".


[14] Comentário enviado por pguarnierr em 28/04/2016 - 09:21h

Deu certo agora! Eu não tinha percebido, mas sem querer eu copiei a string UUID da partição spa3, ao invés da partição spa2. Eu corrigi ali e agora ao selecionar a entrada Windows também entra!
Incrível esse tutorial!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts