Como recuperar o GRUB do Debian com o disco de instalação

Com o intuito de sanar dúvidas que surgem no nosso grupo do Telegram faremos uma introdução ao funcionamento do GRUB. Explicaremos o funcionamento deste gerenciador de boot mais utilizado nas distribuições Linux atuais. Também apresentaremos alguns conceitos que podem evitar problemas futuros.


Introdução ao funcionamento do GRUB


 

1 – O que é GRUB?

GRUB significa GRand Unified Bootloader (“Carregador de inicialização unificado”). Sua função é principalmente assumir o controle da BIOS no tempo de boot, carregar a si mesmo, carregar o kernel do Linux na memória e entregar a execução para o kernel. Uma vez entregue a execução para o kernel, o GRUB terá feito o seu trabalho e enfim não será mais necessário até o próximo boot. Caso queira saber mais sobre o funcionamento completo do processo de boot no Linux, leia o artigo abaixo:

Como funciona o processo de boot no Linux

O GRUB suporta múltiplas versões de kernel do Linux e outros sistemas operacionais. Permite que o usuário selecione entre eles no tempo de boot usando um menu. Isso é muito útil pois podem existir diversas aplicações ou serviços de sistemas que podem falhar com determinada versão de kernel. É possível utilizar uma versão mais antiga do kernel através do GRUB.

 

2 – GRUB 1 x GRUB 2 x GRUB Legacy x GRUB

Conforme os sites GNU GRUB e Wikipedia, o GRUB foi originalmente projetado e implementado por Erich Stefan Boleyn como parte do trabalho de inicialização do sistema operacional GNU/Hurd, desenvolvido pela Free Software Foundation. Em 1999, Gordon Matzigkeit e Yoshinori K. Okuji fizeram do GRUB um pacote oficial do Projeto GNU e abriram o processo de desenvolvimento para o público.

O GRUB 2 é uma rescrita completa do GRUB 1 com várias melhorias. Ou seja, o GRUB 2 é mais limpo, portátil, robusto e poderoso. O GRUB 2 começou sob o nome PUPA. O PUPA foi apoiado pela Agência de Promoção da Tecnologia da Informação (IPA) no Japão. Foi integrado ao desenvolvimento do GRUB 2 por volta de 2002, quando a versão 0.9x do GRUB foi renomeada para GRUB Legacy. O GRUB 1 ou GRUB Legacy não está mais em desenvolvimento e está sendo descontinuado.

A partir de 2014, a maioria das distribuições Linux adotaram o GNU GRUB 2. Por isso, ela foi renomeada para somente GRUB.

Em suma:

GRUB 1 é a mesma coisa que GRUB Legacy.
GRUB 2 é a mesma coisa que GRUB e também pode ser chamado de GNU GRUB 2.
Para facilitar no entendimento, neste artigo utilizaremos somente o termo GRUB.

2 – O menu do GRUB

001 - Introdução ao funcionamento do GRUB

Primeiramente, a função do menu do GRUB é permitir que o usuário selecione um dos kernels instalados para inicializar. Usar as teclas de seta para cima e para baixo permite selecionar o kernel desejado. Pressionar a tecla Enter continua o processo de inicialização usando o kernel selecionado.

Em segundo lugar, o menu do GRUB também fornece um tempo limite para inicializar com o kernel padrão sem intervenção do usuário. Pressionar qualquer tecla no teclado, exceto a tecla Enter, encerra o cronômetro de contagem regressiva exibido no console. Pressionar a tecla Enter imediatamente continua o processo de inicialização com o kernel padrão ou um opcionalmente selecionado.

Assim também o menu do GRUB fornece um kernel de “resgate” para uso na resolução de problemas ou quando os kernels normais não completam o processo de inicialização.

Futuramente escreveremos um artigo sobre os principais problemas apresentados no processo de boot em sistemas operacionais Linux.

3 – O arquivo grub.cfg

O grub.cfg é o arquivo principal de configuração do GRUB. No entanto ele é gerado pelo programa grub2-mkconfig usando um conjunto de arquivos de configuração primários e o arquivo padrão do GRUB como uma fonte para as especificações de configuração do usuário. O arquivo /boot/grub2/grub.cfg é gerado primeiro durante a instalação do Linux e regenerado quando um novo kernel é instalado.

O arquivo grub.cfg contém código semelhante ao bash e uma lista de kernels instalados em uma matriz ordenada pela sequência de instalação. Por exemplo, se você tiver quatro kernels instalados, o kernel mais recente estará no índice 0, o kernel anterior estará no índice 1 e o kernel mais antigo será o índice 3. O arquivo grub.cfg é bem grande, mas abaixo segue um trecho com as entradas das versões de kernel destacadas.

002 - Introdução ao funcionamento do GRUB

É extremamente recomendável NÃO EDITAR O ARQUIVO grub.cfg! No próximo tópico explicamos o motivo.

4 – Arquivos de configuração do GRUB

O conjunto principal de arquivos de configuração para o grub.cfg está localizado no diretório /etc/grub.d/. Cada um dos arquivos nesse diretório contém o código do GRUB que é coletado no arquivo grub.cfg. O esquema de numeração usado nos nomes desses arquivos de configuração é projetado para fornecer ordenação para que o arquivo grub.cfg final seja montado na sequência correta. Cada um desses arquivos tem um comentário para indicar o início e o fim da seção. Então esses comentários também fazem parte do arquivo grub.cfg para que seja possível ver de qual arquivo cada seção é gerada. Os comentários delimitadores são assim:

### BEGIN /etc/grub.d/10_linux ###

### END /etc/grub.d/10_linux ###
Como o arquivo grub.cfg é gerado deste conjunto de arquivos no /etc/grub.d/ através do comando grub2-mkconfig, não é recomendável editar estes arquivos. A maioria das distribuições, ao fazer a instalação de novas versões de kernel, executam automaticamente o comando grub2-mkconfig.
Os erros do GRUB principalmente estão relacionados a essas modificações indevidas. Só edite estes arquivos se você for um especialista GRUB ou está estudando melhor esta ferramenta por conta própria.
Você deve ter ciência das consequências de qualquer alteração feita nesses arquivos e deve manter um backup do arquivo grub.cfg original.

Caso você queira fazer alguma modificação relacionada ao menu do GRUB, recomendamos instalar o pacote grub-customizer

Como Instalar O Grub Customizer 5.0.6 No Ubuntu, Linux Mint E Derivados!

Como Instalar O Grub Customizer No Ubuntu Ou LinuxMint

 

5 – O único arquivo “modificável” do GRUB

Em contrapartida, o único arquivo que é interessante modificar é o /etc/default/grub e ele é bem simples. Podemos alterar os valores das palavras-chave existentes ou adicionar outras palavras-chave que ainda não estejam no arquivo, por exemplo:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/fedora_localhost--live-swap
     rd.lvm.lv=fedora_localhost-live/root rd.lvm.lv=fedora_localhost-live/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

A seção 6 do manual do GRUB possui todas as informações sobre as possíveis palavras-chave que podem ser incluídas neste arquivo. Só para exemplificar, abaixo descrevemos algumas palavras-chave:

  • GRUB_TIMEOUT: O valor dessa chave determina o tempo que o menu de seleção do GRUB é exibido. O GRUB oferece a capacidade de manter múltiplos kernels instalados e escolher entre eles usando um menu. O valor padrão para essa chave é de 5 segundos. Mas você pode modificá-lo para permitir mais tempo para visualizar as opções e fazer uma seleção.
  • GRUB_DISTRIBUTOR: Essa chave define uma expressão sed que extrai o número da release de distribuição do arquivo /etc/system-release. Então esta informação é usada para gerar os nomes de texto para cada release do kernel que aparece no menu GRUB, como “Fedora”. Mas devido a variações na estrutura dos dados entre distribuições, essa expressão pode ser diferente em cada sistema.
  • GRUB_DEFAULT: Determina qual kernel é inicializado por padrão. O padrão normalmente utilizado é o kernel mais recente. Outras opções aqui são um número que representa o índice da lista de kernels no grub.cfg, que inicia em 0. Para garantir que um release específico do kernel seja inicializado, defina o valor dele nessa chave, por exemplo 4.8.13-300.fc25.x86_64.
  • GRUB_DISABLE_SUBMENU: É possível criar uma estrutura de menus hierárquica de kernels para a tela do menu do GRUB. Essa chave, junto com algumas configurações adicionais das sub-rotinas do kernel em grub.cfg criam tal hierarquia. Por exemplo, um pode ter o menu principal com sub-menus “produção” e “teste” onde cada submenu conteria os kernels apropriados. Definir isso como “false” permitiria o uso de submenus.
  • GRUB_TERMINAL_OUTPUT: Em alguns ambientes pode ser necessário redirecionar a saída de texto para um terminal de exibição diferente. O padrão é enviar a saída para a tela / monitor local. Por exemplo, podemos especificar uma porta serial no qual as informações de todo o data center é centralizado.
  • GRUB_CMDLINE_LINUX: Esta chave contém os argumentos da linha de comando que serão passados para o kernel no momento da inicialização. Portanto estes argumentos serão adicionados à linha do kernel do grub.cfg para todos os kernels instalados.
  • GRUB_DISABLE_RECOVERY: Cria opções de “resgate” para cada kernel.
    • false: Uma entrada de recuperação é criada no menu GRUB para cada kernel instalado.
    • true: Nenhuma entrada de recuperação é criada. Independentemente dessa configuração, a última entrada do kernel é sempre uma opção de “resgate”.

 

6 – Gerando o grub.cfg

Depois de concluir a configuração desejada, é necessário gerar o arquivo /boot/grub2/grub.cfg. Isso é feito com o seguinte comando.

grub2-mkconfig > /boot/grub2/grub.cfg

Portanto o grub2-mkconfig pega os arquivos de configuração localizados em /etc/grub.d em sequência para construir o arquivo grub.cfg. Assim também usa o conteúdo do arquivo /etc/default/grub para modificar a saída para obter a configuração final desejada. O comando grub2-mkconfig localiza todos os kernels instalados e cria uma entrada para cada um na seção 10_Linux do arquivo grub.cfg. Além disso é criado uma entrada de “resgate” para fornecer um método de recuperação de problemas significativos que impedem o Linux de inicializar.


Em conclusão, o GRUB é o primeiro passo após o BIOS na sequência de eventos que inicializam um sistema Linux. Esperamos que essa introdução ao funcionamento do GRUB tenha ajudado a entender melhor os conceitos e o seu funcionamento. Entender como configurar o GRUB é importante para recuperar ou contornar vários tipos de problemas na hora do boot.

Até a próxima!

 

LuKazHiro
Entusiasta Linux desde a época em que as distribuições eram vendidas em CD's nas bancas de jornais. Formado em Ciência da Computação, certificado LPIC-3 e RHCE. Estudante constante de tecnologia, sempre procurando, ensinando e aprendendo com a galera!

Canonical lança Ubuntu 18.04.1 LTS

Previous article

LibreOffice 6.1 ficará pronto em agosto

Next article

You may also like

More in Dicas