Devido às recentes mudanças 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 recomendável 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 energia do seu computador até obter um sistema totalmente funcional, segue esta sequência em alto nível:
- 1. Um processo conhecido como POST (Teste de Autoverificação de Energia) 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 (junto com initramfs) e o executa. O carregador de inicialização mais usado 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 (geralmente conhecido pelo nome genérico “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”), apresentamos os sistemas e ferramentas de gerenciamento de serviços utilizados pelas distribuições Linux modernas. Você pode revisar esse artigo antes de prosseguir.
Apresentando o Carregador de Inicialização GRUB
As duas principais versões do GRUB (às vezes chamadas de GRUB Legacy e v2) podem ser encontradas nos sistemas modernos, embora a maioria das distribuições utilize v2 por padrão em suas versões mais recentes. Apenas o Red Hat Enterprise Linux 6 e seus derivados ainda utilizam o v1 hoje em dia.
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 utilizados,
- 2). escolher entre sistemas operacionais alternativos para inicializar e
- 3). adicionar ou editar estrofes de configuração para alterar as 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 na principal console. 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 “dar problemas” após uma atualização (consulte este link nos fóruns AskUbuntu para um 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 o boot por padrão. A lista de entradas pode ser visualizada não apenas na tela de splash 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 fazer o boot 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 do zero) da seguinte forma:
GRUB_DEFAULT=3

Uma variável de configuração final do GRUB que é de interesse especial é 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 estã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 pelo 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"
Após editar o /etc/defalt/grub
, você precisará executar update-grub
(Ubuntu) ou grub2-mkconfig -o /boot/grub2/grub.cfg
(CentOS e openSUSE) depois para atualizar o grub.cfg
(caso contrário, as alterações serão perdidas ao inicializar).
Este comando 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 pelo GRUB durante a inicialização durarão apenas durante a sessão atual.
Corrigindo Problemas do GRUB no Linux
Se você instalar um segundo sistema operacional ou se o arquivo de configuração do GRUB for corrompido devido a erro humano, existem maneiras de recuperar o sistema e ser capaz de inicializá-lo 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 o comando help para ver os comandos disponíveis no prompt do GRUB:

Vamos nos concentrar no comando 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
até 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 partição).
Vamos examinar agora 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 inteiramente, se necessário:
# ls (hd0,msdos1)/
Como podemos ver na área destacada, encontramos o diretório grub2 nesta partição:

Uma vez que tenhamos 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
com o dispositivo no qual 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 são documentados, juntamente com suas correções sugeridas, no Guia de Solução de Problemas do Ubuntu GRUB2. Os conceitos explicados lá 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 lidar com um cenário em que um sistema parou de inicializar corretamente devido a um problema relacionado ao carregador de inicialização.
Felizmente, o GRUB é uma das ferramentas mais bem documentadas e você pode encontrar ajuda facilmente tanto na documentação instalada quanto online usando os recursos que compartilhamos neste artigo.
Tem perguntas ou comentários? Não hesite em nos informar usando o formulário de comentários abaixo. Estamos ansiosos para ouvir de você!
Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/