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

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


Criando o menu com as informações obtidas



Dentro do arquivo 40_custom, vamos começar acrescentando o menu do Debian.

Copie e cole o código abaixo e logo tentarei, de uma maneira breve, explicar do que se trata cada linha:

## Entrada para Debian em /dev/sda6
menuentry "Debian 7 (Wheezy)" --class gnu-linux --class gnu --class os {
    insmod part_msdos
    insmod ext2
    set root='(/dev/sda,msdos6)'
    search --no-floppy --fs-uuid --set=root 2e0726d9-1231-42de-bedc-ae2bdf8ebc8e
    linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=2e0726d9-1231-42de-bedc-ae2bdf8ebc8e ro quiet acpi_osi=linux
acpi_backlight=vendor splash
    initrd /boot/initrd.img-3.2.0-4-amd64
}

O mesmo procedimento faremos com o Sabayon, Mageia e Windows, mudando apenas o nome de entrada do menu como os devices, UUID, e setar o caminho do kernel de boot de cada distribuição.

Explicando cada linha:
  • ## Entrada para Debian em /dev/sda6 :: opcional - Para identificação mais eficaz.
  • menuentry "Debian 7 (Wheezy)" --class gnu-linux --class gnu --class os { :: Nome que aparecerá no menu do GRUB este estando entre as aspas "".
  • insmod part_msdos :: Tabela de partição do HDD - no meu caso, e acho que da maioria também, MS-DOS.
  • insmod ext2 :: Sistema de arquivo "file system" da partição - ext2 = ext3/ext4.
  • set root='(/dev/sda,msdos6)' :: Device/partição - onde se encontra o sistema instalado.
  • search --no-floppy --fs-uuid --set=root 2e0726d9-1231-42de-bedc-ae2bdf8ebc8e :: Parâmetro que identifica root com a UUID.
  • linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=2e0726d9-1231-42de-bedc-ae2bdf8ebc8e ro quiet acpi_osi=linux acpi_backlight=vendor splash :: Parâmetros que procuram a UUID para ser chamado o kernel do boot.
  • initrd /boot/initrd.img-3.2.0-4-amd64 :: Caminho para carregar o sistema de arquivos na memória do processo de inicialização.
  • } :: Sem espaço depois da chave - fechamento dos parâmetros do menu do grub.

Depois de acrescentado o menu das outras distribuições GNU/Linux (Sabayon e Mageia), da mesma forma que foi acrescentado o do Debian, com as informações obtidas anteriormente, agora, vamos acrescentar o menu do Windows 7.

Copie e cole o código abaixo:

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

A diferença em relação ao código das distribuições GNU/Linux é quase nenhuma, apenas, retire as linhas linux e initrd e acrescente no final, a linha chainloader +1, que chama o carregador de boot do Windows, deixando a esse, a tarefa de iniciar o sistema.

Pronto!

Depois de ter feito na mão o menu, o arquivo 40_custom ficou conforme o abaixo:

#!/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.

## Entrada para Debian em /dev/sda6

menuentry "Debian 7 (Wheezy)" --class gnu-linux --class gnu --class os {
    insmod part_msdos
    insmod ext2
    set root='(/dev/sda,msdos6)'
    search --no-floppy --fs-uuid --set=root 2e0726d9-1231-42de-bedc-ae2bdf8ebc8e
    linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=2e0726d9-1231-42de-bedc-ae2bdf8ebc8e ro quiet acpi_osi=linux
acpi_backlight=vendor splash
    initrd /boot/initrd.img-3.2.0-4-amd64
}
## Entrada para Mageia em /dev/sda5
menuentry "Mageia 4 (Thornicroft)" --class gnu-linux --class gnu --class os {
    insmod part_msdos
    insmod ext2
    set root='(/dev/sda,msdos5)'
    search --no-floppy --fs-uuid --set=root d38287e5-ceb0-44ec-a0bc-66bfdbbff76d
    linux /boot/vmlinuz-desktop BOOT_IMAGE=linux root=UUID=d38287e5-ceb0-44ec-a0bc-66bfdbbff76d splash quiet vga=789
    initrd (hd0,5)/boot/initrd-desktop.img
}
## Entrada para Sabayon em /dev/sda7
menuentry "Sabayon 8 (rolling release v14.xx)" gnu-linux --class gnu --class os {
    insmod part_msdos
    insmod ext2
    set root='(/dev/sda,msdos7)'
    search --no-floppy --fs-uuid --set=root 799e1b8d-f8c5-479c-89ea-623c07f5321a
    linux /boot/kernel-genkernel-x86_64-3.13.0-sabayon root=UUID=799e1b8d-f8c5-479c-89ea-623c07f5321a ro quiet
    initrd (hd0,7)/boot/initramfs-genkernel-x86_64-3.13.0-sabayon
}
## Entrada para Windows em /dev/sda2
menuentry "Windows 7 (Seven)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    set root='(/dev/sda,msdos2)'
    search --no-floppy --fs-uuid --set=root F43C452F3C44EDE4
    chainloader +1
}


Página anterior     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

Instalando o driver da NVIDIA atualizado para o kernel atual no Metamorphose 2.0

Operadoras de Banda Larga com Medição de Velocidade

Internet com a velocidade aumentada (Regulamento ANATEL)

Prey Project - Localizando seu notebook roubado

ownCloud - Em poder de suas mãos (Private Cloud)

Leitura recomendada

Instalando a DD-WRT em roteadores Linksys WR54G*

Produzindo um "reality show" com seu Linux

Integrando Nagios e Google Maps

Convocação da Seleção Brasileira do Software Livre

KeePassXC - Gerenciador de Senhas de Código Aberto Voltado à Comunidade

  
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