Linux tux

Como configurar o GRUB

O GRUB 2 é, atualmente, a versão padrão instalada na maioria das distribuições GNU/Linux, o que inclui o Ubuntu, o Fedora, o Debian etc.
Se você estava acostumado a configurar o gerenciador de boot nas suas versões anteriores, fique atento, por que as diferenças são muitas — entre a 2.0 e as precedentes.
Este artigo descreve a nova estrutura de arquivos e fornece detalhes básicos de alguns itens do menu de boot.
Para determinar a versão atual do seu GRUB, use o seguinte comando:

grub-install -v

O GNU GRUB é um carregador de boot ou boot loader, projetado originalmente por Erich Stefan Boleyn.
O significado deste nome é GRand Unified Bootloader.
Pra ser sucinto, um boot loader é o primeiro software a ser executado quando o computador é iniciado — isto é, logo depois do BIOS.
Sua função é carregar o sistema operacional e transferir-lhe o controle sobre o sistema de hardware. Cabe ao kernel, por sua vez, terminar de carregar o restante do sistema.
Os exemplos contidos neste texto se baseiam em uma máquina Debian 8.3 Jessie, com o GRUB 2.02.
Este artigo não cobre a versão 0.97 e anteriores do GRUB — que são sensivelmente diferentes da atual.

Configuração do GRUB 2

O GRUB 2 constrói seu menu (em grub.cfg) através de scripts, encontrados na pasta /etc/grub.d/ a partir dos parâmetros definidos no arquivo /etc/default/grub.
O arquivo grub.cfg não deve ser editado “manualmente”. Se você fizer isto, suas alterações se perderão após a execução dos scripts, ativados pelo comando update-grub.
O update-grup também determina o estado do seu sistema operacional e varre suas unidades de armazenamento à procura de outros sistemas operacionais e kernels para adicionar ao menu de inicialização do GRUB 2.

O comando update-grub deve ser invocado com privilégios administrativos (root). Além disto, ele é executado automaticamente quando os pacotes do GRUB 2 ou o kernel são atualizados

.

Como encontrar o disco em que se encontra instalada configuração do menu do GRUB 2?

Usuários com mais de um sistema operacional instalado em uma máquina, podem querer saber exatamente em que local está instalado o GRUB 2 (o que está sendo usado por todo o sistema).
Obtenha esta informação com o comando grub-probe.
Para saber qual dispositivo está carregando o GRUB, acompanhe as linhas de comando abaixo:

sudo grub-probe -t device /boot/grub/
/dev/sdb1

### se preferir descobrir a identificação UUID do
### dispositivo, use o mesmo comando, da seguinte forma:

sudo grub-probe -t fs_uuid /boot/grub/
d36af294-1e99-4e60-af85-fd9964135dcf

### Se tiver a curiosidade para saber como ele se
### encontra montado, use a seguinte linha de comando:

cat /etc/fstab | grep d36af294-1e99-4e60-af85-fd9964135dcf
UUID=d36af294-1e99-4e60-af85-fd9964135dcf /               btrfs   x-systemd.device-timeout=0,noatime,compress=lzo,commit=0,ssd_spread,autodefrag        0       0

Fácil, não?
grub logo by Karol Kreński
Ao ligar o computador, também é possível determinar, através das informações do menu de inicialização, qual sistema operacional está controlando o boot em um sistema com múltiplos sistemas operacionais.
Por padrão, a primeira entrada do menu exibe uma opção da instalação que está encarregada da execução do GRUB.
Ou seja, se esta entrada contiver “on sdb2”, então é certo que o dispositivo de armazenamento /dev/sdb2 esteja controlando o menu/boot.

O arquivo de configuração grub.cfg

Como já foi dito, você não deve editar diretamente o arquivo do menu do GRUB, /boot/grub/grub.cfg — ele é resultado de vários outros scripts. Cada um deles é responsável por uma sessão específica do menu.

O comando update-grub é uma forma
abreviada de grub-mkconfig -o /boot/grub/grub.cfg.

Caso você queira criar um menu de boot com um nome ou caminho diferente, use o comando completo:

grub-mkconfig -o /boot/novo-caminho/novo-nome.cfg

O arquivo grub.cfg é dividido em diversas seções, definidas por ### BEGIN antes de referir-se a um dos scripts a ser executado.
Para encerrar a referência, é usado um ### END
GRUB 2 arquivo de configuração grub.cfg.

Embora os desenvolvedores desencorajem a edição direta do arquivo grub.cfg, ela é possível.
Tenha o cuidado de fazer a edição depois de já ter rodado o update-grub.
Atualizações de alguns pacotes do GRUB 2, adição ou remoção de kernels no sistema, além do update-grub poderão desfazer as suas alterações manuais.

Conheça os arquivos de script de configuração do GRUB

Você vai encontrar os scripts de configuração (Debian, Ubuntu e derivados) em /etc/grub.d.
Eles são lidos durante a execução do comando update-grub e suas instruções incorporadas ao /boot/grub/grub.cfg.
Os itens do menu, contidos no grub.cfg, são determinados pela ordem em que os scripts são executados.
A ordem é determinada pelos nomes dos arquivos:

  • Arquivos com numeração no início de seus nomes são executados primeiro.
  • Estes arquivos são executados na ordem crescente da numeração. Assim, 10_linux vem antes de 20_memtest, que vem antes de 40_custom.
  • A seguir, são executados os arquivos que começam com caracteres alfabéticos.

Apenas arquivos executáveis podem gerar saída válida para o grub.cfg, durante a execução do update-grub.
A permissão de execução é o estado padrão dos arquivos contidos no diretório /etc/grub.d.
Veja uma lista de arquivos comuns em um sistema Ubuntu:

  • 00_header — estabelece as variáveis de ambiente, tais como localização de arquivos importantes, ajustes da resolução de vídeo e entradas gravadas previamente.
    Ele também importa as configurações contidas em /etc/default/grub.
  • 05_debian_theme — os ajustes neste arquivo se referem à imagem de fundo, cores do texto, cor de destaque da seleção e temas do menu.
    Na ausência de uma imagem splash, este arquivo configura um tema monocromático para a exibição do menu inicial.
  • 10_linux — identifica os kernels presentes no dispositivo root do sistema operacional e cria entradas de menu para cada um.
  • 20_memtest86+ — procura pelo /boot/memtest86+.bin e o inclui, como opção, no menu de boot do GRUB.
    Se você se incomoda com a presença deste item no menu, retire a permissão de execução do arquivo e rode novamente o update-grub:

            sudo chmod -x /etc/grub.d/20_memtest86+
            sudo update-grub
    
  • 30_os-prober — este é o script responsável por buscar outros sistemas operacionais e mostrar o resultado no menu do GRUB.
    A seção deste script, no grub.cfg, tem entradas para Windows, Linux, OSX e Hurd.
    Este script também pode ser desabilitado, com a remoção do bit executável, como no exemplo acima.
    As variáveis, presentes neste arquivo, determinam o formato dos nomes exibidos em /boot/grub/grub.cfg.
    Caso o script encontre outro sistema Linux, ele irá tentar usar os títulos descritos na seção 10_linux, contida em seu grub.cfg.
  • 40_custom — é um template para adicionar entradas personalizadas ao arquivo principal de configuração.
    Faça uma cópia dele e altere-a. Use-o como modelo e não se esqueça de adicionar o bit executável, para que ele possa ser lido e processado pelo update-grub.

Como você já sabe, o nome de cada arquivo determina a ordem em que seu conteúdo será inserido no menu GRUB.
É aconselhável, ao usar numerais como prefixo dos nomes dos scripts, manter o 00_header e o 05_debian_theme sempre antes do primeiro menu personalizado (custom menu).
Como estes arquivos não contém entradas de menu, não interferirão na sua customização.
grub logo by Karol Kreński

Como configurar o GRUB 2

Dentre as várias maneiras de configurar o GRUB, a mais simples (e, normalmente, recomendada) é editar o arquivo /etc/default/grub. Usuários de nível adiantado, podem editar os arquivos localizados em /etc/grub.d.
Não esqueça da boa prática de fazer backup dos arquivos, antes de mexer neles. Se algo der errado, basta copiar o original de volta.
Depois de fazer todas as alterações nos arquivos que julgou necessárias, você deve executar o comando sudo update-grub, para incorporá-las ao menu do GRUB 2.
Use seu editor preferido para alterar o /etc/default/grub:

gksudo gedit /etc/default/grub

Configure GRUB 2 /etc/default/grub file
Ao terminar, salve e consolide as alterações:

sudo update-grub

O arquivo de configuração básica do GRUB contém alguns ajustes simples para o usuário customizar seu menu.
Alguns dos ajustes mais comuns é o do tempo de exibição do menu, o sistema operacional padrão etc.
Conheça algumas delas, abaixo:

  • GRUB_DEFAULT — Determina qual dos itens de menu será o padrão.
    O item primeiro é 0, o segundo é 1 etc.
    Para ter uma noção melhor de quais os itens de menu disponíveis atualmente na sua configuração do GRUB, use o seguinte comando:

    grep "menuentry " /boot/grub/grub.cfg

    A minha listagem ficou assim (com 5 itens):

    	menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d36af294-1e99-4e60-af85-fd9964135dcf' {
    	menuentry 'Debian GNU/Linux, com o Linux 4.3.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.3.0-0.bpo.1-amd64-advanced-d36af294-1e99-4e60-af85-fd9964135dcf' {
    	menuentry 'Debian GNU/Linux, with Linux 4.3.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.3.0-0.bpo.1-amd64-recovery-d36af294-1e99-4e60-af85-fd9964135dcf' {
    	menuentry 'Debian GNU/Linux, com o Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-d36af294-1e99-4e60-af85-fd9964135dcf' {
    	menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-d36af294-1e99-4e60-af85-fd9964135dcf' {
    

    Se você tiver uma estrutura de submenus, deverá se referir ao subitem desejado, usando os 2 dígitos que representam a ordem em que ele se encontra listado.
    Por exemplo, se o item de menu que você quer que seja padrão estiver dentro da 2a. entrada de menu, na 3a. posição, o valor correto aqui seria: 1>2.
    Este parâmetro aceita mais do que apenas valores numéricos.
    Se você informar o valor ‘saved’, ele irá usar apontar como padrão a opção usada na inicialização anterior. Para isto, é necessário que o GRUB_SAVEDEFAULT tenha o valor ‘true’ (verdadeiro), como veremos mais à frente.
    Ao usar o valor ‘saved’, o sistema vai disponibilizar outras duas ferramentas, no terminal:

    1. grub-reboot — este comando ajusta o item padrão do menu GRUB apenas para o próximo boot.
      No exemplo, abaixo, o comando indica que na próxima inicialização o GRUB deverá usar o 2o. item do menu como padrão:

      sudo grub-reboot 1
    2. grub-set-default — este comando ajusta o item padrão do menu GRUB permanentemente ou até que ele seja modificado.
      Veja um exemplo de uso:

      sudo grub-set-default 3

    Os dois comandos têm o mesmo formato de uso.
    Vamos voltar à lista, acima, com vários menuentry.
    Baseado naqueles resultados, os comandos e os parâmetros descritos até agora, poderiam usar os nomes (entre aspas simples) da lista, em vez de números indicadores de suas ordens.
    Veja alguns exemplos:

    sudo grub-set-default 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)'
    sudo grub-reboot 'Debian GNU/Linux, com o Linux 3.16.0-4-amd64'
    
    ### O próprio parâmetro GRUB_DEFAULT pode usar um valor alfanumérico:
    
    GRUB_DEFAULT='Debian GNU/Linux, com o Linux 4.3.0-0.bpo.1-amd64'
    
    

    Esta abordagem, contudo, não é recomendada — uma vez que estes nomes podem sofrer alterações no decorrer das atualizações do seu sistema, o que deixaria o seu menu funcionando mal.

  • GRUB_SAVEDEFAULT — Este parâmetro só tem utilidade se o GRUB_DEFAULT estiver ajustado para ‘saved’. Neste caso, o GRUB_SAVEDEFAULT=’true’ armazena a escolha feita pelo usuário como padrão para as próximas inicializações, até que uma escolha diferente seja feita.
  • GRUB_TIMEOUT — Caso o usuário não pressione tecla alguma durante a inicialização do GRUB, ele irá escolher a opção padrão, ou default no tempo especificado aqui.
    O tempo padrão é ‘5’ segundos. Opte por ‘0’, se quiser que o GRUB inicie o item padrão imediatamente, sem qualquer espera.
    Você também pode desabilitar o tempo de espera, ajustando-o para ‘-1’ — neste caso, o GRUB fica aguardando sua escolha indefinidamente.
    Para incrementar, você pode usar o parâmetro GRUB_TIMEOUT_STYLE para exibir ou esconder a contagem do tempo decorrido, antes de exibir o menu. Ele aceita os valores ‘countdown’ e ‘hidden’, para contar ou esconder, respectivamente.
  • GRUB_TIMEOUT_STYLE — Se este parâmetro estiver desativado ou ajustado para ‘menu’, o GRUB irá exibir o menu e aguardar que a contagem do GRUB_TIMEOUT expire.

Há dezenas de outros parâmetros para configurar o menu de boot do GRUB.
Você pode obter mais informações no site https://help.ubuntu.com/community/Grub2/Setup#A.2BAC8-etc.2BAC8-default.2BAC8-grub ou na linha de comando do seu terminal, assim:

info -f grub -n 'Simple configuration'

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

One thought on “Como configurar o GRUB”

  1. Meu problema com grub é que ele não executa mais, quer dizer, acredito que execute, pois quando inicializo a notebook cai no prompt do grub (“grub>”). Já tentei diversas soluções de fóruns (repair, customize, reinstalar, apagar partição e instalar do zero…) e nada funcionou. Instalei o ubuntu gnome 17.04. Mas, o grub só vai no prompt. Mesmo assim, ainda consigo executar o windows 10 e o ubuntu… através de comandos. Usei os comandos: grub-probe -t device /boot/grub/ e me retorna /dev/sda10. Mas, ao usar o grub-probe -t fs_uuid /boot/grub/ o retorno é:
    grub-probe: aviso: disco não existe, retornando ao dispositivo de partição /dev/sda10.
    grub-probe: aviso: disco não existe, retornando ao dispositivo de partição /dev/sda10.
    grub-probe: aviso: disco não existe, retornando ao dispositivo de partição /dev/sda10.
    grub-probe: erro: disco ‘hostdisk//dev/sda10’ não encontrado.

    Será que é isso pode ser que não esteja executando o grup corretamente? Verifiquei nos scripts do grub e está sendo localizado os dois sistemas operacionais para serem utilizados no grub.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *