Devido às recentes alterações nos objetivos do exame de certificação LFCS a partir de 2 de fevereiro de 2016, estamos adicionando os tópicos necessários à série LFCS publicada aqui. Para se preparar para este exame, é altamente recomendado seguir também a série LFCE.

Neste artigo, vamos apresentar o GRUB e explicar por que um carregador de inicialização é necessário e como ele adiciona versatilidade ao sistema.
O processo de inicialização do Linux, desde o momento em que você pressiona o botão de ligar do seu computador até obter um sistema totalmente funcional, segue esta sequência em alto nível:
- 1. Um processo conhecido como POST (Power-On Self Test) realiza uma verificação geral nos componentes de hardware do seu computador.
- 2. Quando o POST é concluído, ele passa o controle para o carregador de inicialização, que por sua vez carrega o kernel do Linux na memória (juntamente com initramfs) e o executa. O carregador de inicialização mais utilizado no Linux é o GRand Unified Boot loader, ou GRUB para abreviar.
- 3. O kernel verifica e acessa o hardware e, em seguida, executa o processo inicial (mais conhecido pelo nome genérico de “init“), que por sua vez completa a inicialização do sistema iniciando os serviços.
Na Parte 7 desta série (“SysVinit, Upstart e Systemd“), introduzimos os sistemas e ferramentas de gerenciamento de serviços usados pelas distribuições Linux modernas. Você pode querer revisar esse artigo antes de prosseguir.
Apresentando o Carregador de Inicialização GRUB
Existem duas versões principais do GRUB (às vezes chamadas de v1, também conhecida como GRUB Legacy e v2), embora a maioria das distribuições use v2 por padrão em suas versões mais recentes. Apenas o Red Hat Enterprise Linux 6 e seus derivados ainda usam o v1 hoje.
Portanto, vamos nos concentrar principalmente nas características do v2 neste guia.
Independentemente da versão do GRUB, um carregador de inicialização permite ao usuário:
- 1). modificar a forma como o sistema se comporta especificando diferentes kernels a serem usados,
- 2). escolher entre sistemas operacionais alternativos para inicializar e
- 3). adicionar ou editar trechos de configuração para alterar opções de inicialização, entre outras coisas.
Hoje, o GRUB é mantido pelo projeto GNU e está bem documentado em seu site. Você é encorajado a usar a documentação oficial do GNU ao seguir este guia.
Ao inicializar o sistema, você é apresentado com a seguinte tela do GRUB no console principal. Inicialmente, você é solicitado a escolher entre kernels alternativos (por padrão, o sistema inicializará usando o kernel mais recente) e pode entrar em uma linha de comando do GRUB (com c
) ou editar as opções de inicialização (pressionando a tecla e
).

Uma das razões pelas quais você consideraria inicializar com um kernel mais antigo é um dispositivo de hardware que costumava funcionar corretamente e começou a “apresentar problemas” após uma atualização (consulte este link nos fóruns do AskUbuntu como exemplo).
A configuração do GRUB v2 é lida na inicialização a partir de /boot/grub/grub.cfg
ou /boot/grub2/grub.cfg
, enquanto /boot/grub/grub.conf
ou /boot/grub/menu.lst
são usados no v1. Esses arquivos NÃO devem ser editados manualmente, mas são modificados com base no conteúdo de /etc/default/grub
e nos arquivos encontrados dentro de /etc/grub.d
.
Em um CentOS 7, aqui está o arquivo de configuração que é criado quando o sistema é instalado pela primeira vez:
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="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet" GRUB_DISABLE_RECOVERY="true"
Além da documentação online, você também pode encontrar o manual do GNU GRUB usando o info da seguinte forma:
# info grub
Se você estiver interessado especificamente nas opções disponíveis para /etc/default/grub, você pode invocar a seção de configuração diretamente:
# info -f grub -n 'Simple configuration'
Usando o comando acima, você descobrirá que GRUB_TIMEOUT
define o tempo entre o momento em que a tela inicial aparece e o início do boot automático do sistema, a menos que seja interrompido pelo usuário. Quando essa variável é definida como -1
, o boot não será iniciado até que o usuário faça uma seleção.
Quando vários sistemas operacionais ou kernels estão instalados na mesma máquina, GRUB_DEFAULT
requer um valor inteiro que indica qual entrada de OS ou kernel na tela inicial do GRUB deve ser selecionada para inicialização por padrão. A lista de entradas pode ser visualizada não apenas na tela de inicialização mostrada acima, mas também usando o seguinte comando:
No CentOS e openSUSE:
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
No Ubuntu:
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg
No exemplo mostrado na imagem abaixo, se desejarmos inicializar com a versão do kernel 3.10.0-123.el7.x86_64 (4ª entrada), precisamos definir GRUB_DEFAULT
como 3
(as entradas são numeradas internamente a partir de zero) da seguinte forma:
GRUB_DEFAULT=3

Uma variável de configuração GRUB final que é de especial interesse é GRUB_CMDLINE_LINUX
, que é usada para passar opções para o kernel. As opções que podem ser passadas através do GRUB para o kernel são bem documentadas no arquivo Parâmetros do Kernel e em man 7 bootparam.
As opções atuais no meu servidor CentOS 7 são:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
Por que você gostaria de modificar os parâmetros padrão do kernel ou passar opções extras? Em termos simples, pode haver momentos em que você precisa informar ao kernel certos parâmetros de hardware que ele pode não ser capaz de determinar por conta própria, ou para substituir os valores que ele detectaria.
Isso aconteceu comigo não muito tempo atrás quando eu tentei o Vector Linux, um derivado do Slackware, no meu laptop de 10 anos. Após a instalação, ele não detectou as configurações corretas para minha placa de vídeo, então tive que modificar as opções do kernel passadas através do GRUB para fazê-lo funcionar.
Outro exemplo é quando você precisa colocar o sistema no modo de usuário único para realizar tarefas de manutenção. Você pode fazer isso adicionando a palavra single ao GRUB_CMDLINE_LINUX
e reiniciando:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"
Depois de editar /etc/defalt/grub
, você precisará executar update-grub
(Ubuntu) ou grub2-mkconfig -o /boot/grub2/grub.cfg
(CentOS e openSUSE) posteriormente para atualizar o grub.cfg
(caso contrário, as alterações serão perdidas ao reiniciar).
Este comando irá processar os arquivos de configuração de inicialização mencionados anteriormente para atualizar grub.cfg
. Este método garante que as alterações sejam permanentes, enquanto as opções passadas através do GRUB na inicialização só durarão durante a sessão atual.
Corrigindo Problemas do GRUB do Linux
Se você instalar um segundo sistema operacional ou se o arquivo de configuração do seu GRUB for corrompido devido a erro humano, existem maneiras de fazer seu sistema voltar ao normal e ser capaz de inicializar novamente.
Na tela inicial, pressione c
para obter uma linha de comando do GRUB (lembre-se de que também pode pressionar e
para editar as opções de inicialização padrão) e use help para ver os comandos disponíveis no prompt do GRUB:

Vamos nos concentrar em ls, que listará os dispositivos e sistemas de arquivos instalados, e vamos examinar o que ele encontra. Na imagem abaixo, podemos ver que existem 4 discos rígidos (hd0
a hd3
).
Apenas hd0
parece ter sido particionado (como evidenciado por msdos1 e msdos2, onde 1 e 2 são os números das partições e msdos é o esquema de particionamento).
Vamos agora examinar a primeira partição em hd0
(msdos1) para ver se podemos encontrar o GRUB lá. Esta abordagem nos permitirá inicializar o Linux e lá usar outras ferramentas de alto nível para reparar o arquivo de configuração ou reinstalar o GRUB completamente, se necessário:
# ls (hd0,msdos1)/
Como podemos ver na área destacada, encontramos o diretório grub2 nesta partição:

Uma vez que temos certeza de que o GRUB reside em (hd0,msdos1), vamos informar ao GRUB onde encontrar seu arquivo de configuração e então instruí-lo a tentar iniciar seu menu:
set prefix=(hd0,msdos1)/grub2 set root=(hd0,msdos1) insmod normal normal

Em seguida, no menu do GRUB, escolha uma entrada e pressione Enter para inicializar usando-a. Uma vez que o sistema tenha inicializado, você pode emitir o comando grub2-install /dev/sdX
(altere sdX
pelo dispositivo onde deseja instalar o GRUB). As informações de inicialização serão então atualizadas e todos os arquivos relacionados serão restaurados.
# grub2-install /dev/sdX
Outros cenários mais complexos estão documentados, junto com suas correções sugeridas, no Guia de Solução de Problemas do Ubuntu GRUB2. Os conceitos explicados ali são válidos para outras distribuições também.
Resumo
Neste artigo, apresentamos o GRUB, indicamos onde você pode encontrar documentação tanto online quanto offline, e explicamos como abordar um cenário onde um sistema parou de inicializar corretamente devido a um problema relacionado ao bootloader.
Felizmente, o GRUB é uma das ferramentas mais bem documentadas e você pode encontrar ajuda facilmente, seja na documentação instalada ou online, usando os recursos que compartilhamos neste artigo.
Tem dúvidas ou comentários? Não hesite em nos informar usando o formulário de comentários abaixo. Esperamos receber notícias suas!
Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/