GRUB2 – Monte você mesmo o menu


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

Autor: mcnd2

  • Obtendo informações

Essa experiência, foi executado no sistema Debian. Editando e acrescentando no menu do Grub2 o Debian (7), o Mageia (4), Sabayon (14.03) e 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 Grub2 (grub-common / grub-pc / grub-pc-bin / grub2-common / os-prober) instalado, vamos obter informações para acrescentarmos na edição do menu.

Listaremos a tabela de partição 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.

fdisk-blkidBom, 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 grub2.

Nas imagens abaixo, vemos o “/boot” do Debian, o “/boot” do Sabayon e o “/boot” do Mageia.

boot_DEBIAN

 

boot_SABAYON

boot_MAGEIACom as informações das partições em mãos, sabendo cada kernel instalado em cada distribuição 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 no menu para outros SO’s) – 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 (script) de execução para a leitura do Grub2 e assim subir o menu com as informações de cada script, mais não teremos todos eles com o poder de execução, assim não sendo lido pelo Grub2 e não carregado 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 …”.

40_customCom a permissão de execução alterado, 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 UUID’s 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 querem ser inseridos no menu, é em relação aos devices. Se temos 1 único hdd conectado, ele é reconhecido pelo grub2 como ‘hd0’ (sda). Caso tenha 2 ou mais hd’s conectados o grub vai reconhecer como ‘hd1’ (sdb), hd2 (sdc), etc. Sendo assim, o primeiro device/partição será igual a 0, o segundo igual a 1, o terceiro igual a 2, 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 (Grub2)

/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)

  • Fazer 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 o 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 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 procura a UUID para ser chamado o kernel do boot)

initrd /boot/initrd.img-3.2.0-4-amd64

(caminho para carregar o sistema de arquivo 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 a 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='(/dev/sda,msdos2)’

search –no-floppy –fs-uuid –set=root F43C452F3C44EDE4

chainloader +1

A diferença em relação ao código das distribuições 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

}

  • Salvar, carregar o menu no boot e observação.

Agora, para finalizarmos, temos que dar poder de execução a esse arquivo e atualizar o Grub2 para a mudança ser gravada no “grub.cfg”.

Execute os comandos:

# chmod +x 40_custom

# update-grub

Para ter uma prévia de como estará o menu do grub2, rode o comando a seguir e verás como aparecerá o menu acrescentado.

$ cat /boot/grub/grub.cfg | grep “menuentry” | cut -d ‘”‘ -f 2

menu

Observação:

Nas atualizações de kernel do Debian voltar ao modo executável do arquivo “10_linux” (sudo chmod +x /etc/grub.d/10_linux) para que a alteração seja incluída no “grub.cfg”. O mesmo se aplica para o arquivo “30_os-prober” na troca de Windows ou outro Linux. Lembrar de retirar novamente o modo executável (sudo chmod -x…) após as alterações feitas; o arquivo “40_custom” pode permanecer o mesmo se não houver mudança nas partições. Depois de toda e qualquer alteração é preciso executar “update-grub”.

É isso. Dependo do que quer, pode deixar ele do seu jeito.

grub_real

Até a próxima…

Anúncios
GRUB2 – Monte você mesmo o menu

12 comentários sobre “GRUB2 – Monte você mesmo o menu

    1. mcnd2 disse:

      Não.
      Depois de fazer as alterações, tem que deixar ele com poder de execução e dar um ‘update-grub’ para poder ser gravado no grub.cfg.

      Quase no final do artigo, deixei uma observação de grande valia após atualização ou mudança de sistema.

      Valeu man…

      Curtir

    1. mcnd2 disse:

      Eu sou fodinha, kkkk… não queria ser o ‘fera’ e sim o ‘cyclope’ pra ficar com os olhos vermelhos, rS!

      Sem essa. Isso foi baseado numas dificuldades que tive e que muitas pessoas ainda tem quanto outros sistemas instalados.

      A maneira mais fácil que acho e você mesmo criar seu próprio menu, assim não tem problemas futuros sabendo administrar o bootloader.

      Thank you!

      Curtir

      1. Roberson disse:

        Fodinha voce, ram sei. Pra mim tu tem conhecimento bom em. Esta de parabéns, só não vou afundo criar um menu para o meu, por que estou com outras atividades em andamento.

        kkk essa colocação foi boa, não queria ser o ‘fera’ e sim o ‘cyclope’ boa boa

        Abraço

        Curtir

  1. Guilherme disse:

    Parabens pelo artigo mas tenho algumas duvidas,

    na linha “menuentry “Sabayon 8 (rolling release v14.xx)” gnu-linux –class gnu –class os {“”
    nao falta um -class antes de gnu-linux?

    esas opcoes server para que em especifico?

    Percebi que algumas opcoes aparecem em alguns menus apenas por exemplo “initrd (hd0,7)/boot/initramfs-genkernel-x86_64-3.13.0-sabayon” isso nao deveria ser um padrao ? ou cada distro tem a sua.

    Desculpe mas fiquei um pouco confuso.

    Curtir

    1. mcnd2 disse:

      Sim, faltou um “–class” mais isso não interferiu em nada no boot do Sabayon. Depois vou fazer um teste…

      Essas opções de “–class” não sei pra que serve, mais no modelo de grub.cfg já tem essas opções, então foi acrescentado também nessa minha configuração.

      Opções que aparecem no menu?! Padrão não. Cada distribuição tem sua padronização na hora da instalação do bootloader. Mais como eu tenho que gerenciar, acho melhor eu mesmo criar minha configuração.

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s