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.377 ]

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

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

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

Prey Project - Localizando seu notebook roubado

Deixando a Área de Trabalho animada com slides no GNOME

Configuração inicial no FreeBSD 8.0-Release

Leitura recomendada

Comando: journalctl - Monitoramento de LOGs

Arch Linux com LVM e encriptação na raiz - Instalação

Brackets - Editor Open Source no Linux Mint e Ubuntu

Asterisk: Entendendo o arquivo extensions.conf

Como atualizar/instalar o X.org em seu 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