Aula #3 - O GRUB (GRand Unified Bootloader)




Um sistema que não pode iniciar tem utilidade limitada. Os sistemas Linux tem grande flexibilidade na forma como iniciam. É possível escolher entre diferentes versões do kernel, ou diferentes opções, ou até mesmo sistemas operacionais diferentes em cenários dual-boot. 


A maioria dos sistemas não-embarcados usam o Grand Unified Boot Loader para realizar os primeiros passos de uma inicialização bem sucedida do sistema. 
O GRUB também tem recursos interativos, bem como a opção de senha segura.

Praticamente todos os sistemas Linux baseados na arquitetura x86 (excluindo os embarcados) usam o GRUB (GRand Unified Bootloader ou Bootloader Grande e Unificado) para lidar com as fases iniciais de inicialização do sistema. Outras plataformas usam outros programas para a mesma tarefa como o ELILO usado ​​em sistemas EFI, o IA64 (Itanium) e Das U-BOOT muito usado em embarcados.



Algumas características importantes do GRUB são:


  •     Sistemas operacionais alternativos podem ser escolhidos no momento da inicialização.
  •     Para cada sistema operacional instalado, kernels alternativos e/ou ramdisks iniciais alternativos podem ser escolhidos no momento da inicialização.
  •     Os parâmetros de inicialização podem ser facilmente alterados no momento da inicialização sem ter que editar arquivos de configuração com antecedência.


Distribuições Linux mais antigas (como o RHEL 6) usam as versões mais antigas do GRUB, 1.0 ou inferior, enquanto as mais novas são baseadas no GRUB 2. Embora os detalhes sejam diferentes entre as versões, a filosofia básica é a mesma.



Configuração do GRUB 1:

Durante a inicialização, um arquivo de configuração é lido:

/boot/grub/grub.conf ou /boot/grub/menu.lst.


Mais uma vez o melhor a fazer é não editar o arquivo manualmente. No RHEL 5-7 por exemplo, o arquivo é criado pela ferramenta grubby. 
No entanto, se você fizer alterações, elas serão preservadas, enquanto que para GRUB 2 quaisquer alterações feitas diretamente no arquivo de configuração grub.cfg serão perdidas na próxima vez que o arquivo for gerado automaticamente (o que costuma acontecer quando um novo kernel é instalado).


Configuração do GRUB 2:

Na inicialização um arquivo de configuração básico é lido:

/boot/grub/grub.cfg ou /boot/grub2/grub.cfg



Este arquivo é gerado automaticamente pelo update-grub (ou grub2-mkconfig no RHEL 7) com base nos arquivos de configuração no diretório /etc/grub.d e no arquivo /etc/default/grub e nunca deve ser editado manualmente. 
Normalmente, esses utilitários são executados durante a atualização ou compilação do kernel do Linux.


Para as duas versões do GRUB, o arquivo de configuração principal contém alguns parâmetros globais e, em seguida, um bloco (stanza) para cada sistema operacional ou kernel disponível.


Durante a inicialização do sistema, após os testes POST , a BIOS inicia o  GRUB que vai mostrar um menu em formato texto ou gráfico.

O menu contém uma lista de imagens de inicialização de uma ou mais distribuições Linux. No GRUB 2 (ou, se você estiver usando chainloading para conectar várias camadas de GRUB, um assunto complicado que não vamos abordar neste curso) podem existir sub menus com mais opções.

Com as teclas para cima, para baixo e Enter é possível escolher qual imagem iniciar e se você não fizer nada por um período configurável de tempo a imagem padrão é carregada.

No entanto, você pode fazer muito mais. Depois de selecionar uma entrada, você pode digitar e para editar as opções da imagem que você escolheu. Normalmente, você faz isso para alterar a linha de comando do kernel. Por exemplo, adicionar a palavra single no final da linha de comando fará com que o sistema inicie no modo mono-usuário, que vai permitir resolver certos tipos de problema. Após adicionar a palavra single, basta pressionar a tecla correta para que o grub inicie a imagem com a configuração que você alterou.

Na parte inferior da tela, você vai ver a informação sobre quais teclas fazem o que, e por isso não há necessidade de memorizar.

As alterações feitas diretamente no GRUB durante a inicialização não são persistentes e serão perdidas no próximo boot. Para mudanças permanentes, você precisa mudar os arquivos reais na máquina, utilizando os utilitários corretos.

Também é possível entrar em um shell do GRUB ao invés de editar uma entrada existente. Você pode executar uma série de comandos diferentes, e até mesmo re-instalar ou reparar o GRUB. Se houver problemas graves, como se o GRUB não for capaz de encontrar os arquivos de configuração, você será apresentado a este shell do GRUB.


A palavra instalar pode significar várias coisas diferentes para o GRUB:



  • Instalar o programa grub e seus utilitários no sistema.  
No GRUB 1 existe um programa chamado grub, mas no GRUB 2 existem várias ferramentas com nomes a forma como grub2-* ou grub-*; como estas ferramentas são empacotadas muda de acordo com a distribuição.

  • Instalar os arquivos do GRUB que são necessários durante o boot na pasta /boot/grub ou /boot/grub2. 
Esses são arquivos diferentes dos arquivos usados pelo kernel do Linux para o boot (vmlinuz-*,  initramfs-*) que também ficam na pasta/boot.


  • Instalar o GRUB como o boot loader do sistema.
Isso é normalmente feito nos primeiros bytes do disco rígido, mas também pode ficar em uma partição usando um recurso chamado chainloading que permite dois níveis do GRUB(durante o boot, o GRUB na MBR chama outro GRUB em uma partição) no sistema.


Se você não instalar o GRUB durante a instalação do sistema, você terá que fazer isso mais tarde. O procedimento exato depende da versão do GRUB.




Instalação do GRUB 1:


Para a Versão 1 o utilitário relevante é o grub-install. Também é possível apenas digitar grub, o que vai acionar o prompt interativo do grub, para em seguida:

$ sudo grub
> root (hd0,0)
> setup (hd0)
> exit
$


Isto irá instalar o grub no primeiro disco e os arquivos de inicialização na primeira partição.



Instalação do GRUB 2:

Para a versão 2, o procedimento de instalação pode ser tão fácil quanto:


$ sudo grub2-install /dev/sda


Por favor, leia a man page cuidadosamente antes de executar tal comando; 
Há muitas opções, e quebrar o GRUB pode fazer o seu sistema parar de iniciar. Em particular, você tem que dizer ao sistema de onde encontrar o diretório Diretório /boot, apontando em que partição ele fica.


Nas duas versões do GRUB, o primeiro disco rígido(HD) recebe o nome de hd0, o segundo de hd1, etc. 
Entretanto, na versão 1, partições começam a contar do 0 enquanto na versão 2 começam a contar de 1:
  •     sda1 é (hd0,1) no GRUB 2 mas seria (hd0,0) no GRUB 1.
  •     sdc4 é (hd3,4) no GRUB 2 mas seria (hd3,3) in GRUB 1.


Não é necessário enfatizar que se confundir sobre isso pode ser bem destrutivo.  
As duas versões do GRUB usam alternadamente as notações sda# e (hd0,#), o que pode aumentar a confusão.


Dentro do arquivo de configuração, cada bloco (nome oficial em inglês stanza que traduz como estrofe) tem que especificar qual é a partição root; e isso não tem o mesmo significado de quando estamos falando do diretório root do sistema. 
 No contexto do Grub, a partição root é a partição que contém o kernel (no diretório /boot). Por exemplo, é muito comum ter o /boot em uma partição exclusiva, como por exemplo /dev/sda1. 


Então no GRUB 1 você vai ter um bloco como esse:


title 3.17.3
        root (hd0,0)
        kernel vmlinuz-3.17.3 ro root=/dev/sda2 quiet
        initrd initramfs-3.17.3.img



Entretanto se o /boot não está em uma partição separada, o bloco será assim:



title 3.17.3
        root (hd0,0)
        kernel /boot/vmlinuz-3.17.3 ro root=/dev/sda1 quiet
        initrd /boot/initramfs-3.17.3.img



Também é possível especificar: kernel (hd0,0)/vmlinuz  .... ao invés de usar a linha root.


No GRUB 2, a sintaxe é diferente, mas obvia; uma olhada rápida no arquivo /boot/grub2/grub.cfg vai esclarecer as diferenças.

 Nós vamos nos concentrar no GRUB 2  porque ele está rapidamente tornando versões anteriores obsoletas, e porque ele é essencialmente o mesmo em várias distribuições Linux.


Lembre-se de que você não deve editar o grub.cfg diretamente. 
Existem dois locais no /etc que merecem atenção e que são usados para reconstruir o grub.cfg seja quando o sistema recebe novos kernels, ou quando o programa de atualização (como por exemplo o update-grub) é executado manualmente.



O primeiro é /etc/default/grub. 
Veja um exemplo do RHEL 7:


$ cat /etc/default/grub




A Red Hat fez uma boa limpeza neste arquivo comparado com outras distribuições. 

Por exemplo, no Ubuntu 14.10 o mesmo arquivo é mais ou menos assim:

$ cat /etc/default/grub





O outro diretório importante é /etc/grub.d:

$ ls -l /etc/grub.d





onde estamos novamente mostrando o Ubuntu 14.10 (Linux Mint 17).  
Cada um destes arquivos é executado em ordem ascendente quando o arquivo de configuração é atualizado. Não vamos discutir estes arquivos porque eles são bem documentados, mas nós recomendamos que você olhe o que tem dentro deles.


Para o GRUB 1, cada distribuição tem particularidades, mas basicamente se edita o grub.conf diretamente ou através de um script como grubby.

Mais vistos no mês:

As melhores distribuições Linux para 2017

Teste de Performance de Rede com Iperf

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

Modelo Firewall Completo em Iptables para pequena rede/office

DHCP - Guia Completo

OPNsense - Firewall Open Source

SSD no linux

Administração de sistema e Deploys: Ansible, Chef, Fabric, Puppet ou Salt?