Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - GRUB2 (Grand Unified Bootloader)

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

O GRUB2 (GNU GRUB versão 2) representa a hegemonia absoluta no ecossistema de carregadores de inicialização (bootloaders) do Linux moderno. Mais do que um simples utilitário de seleção de inicialização, o GRUB2 é uma peça de engenharia de software formidável, arquitetada estruturalmente como um microkernel temporário ou um mini-sistema operacional. Esta pasta documenta a complexidade, a modularidade e as engrenagens internas desta ferramenta que atua como o árbitro final entre o hardware (firmware) e o kernel do sistema operacional.

O GRUB original (conhecido hoje como GRUB Legacy, versão 0.97) possuía um design estático e linear. Para adicionar suporte a um novo sistema de arquivos, o bootloader inteiro precisava ser recompilado, resultando em um binário monolítico inchado e inflexível. O GRUB2 foi reescrito do zero (incorporando o projeto PUPA) para resolver este gargalo arquitetural, introduzindo um ecossistema modular dinâmico.

1. O Paradigma do Microkernel e o VFS Interno

A característica mais marcante da engenharia do GRUB2 é a sua completa independência do ambiente hospedeiro assim que é executado. Para cumprir sua missão, o GRUB2 não pode depender das facilidades do BIOS ou da UEFI para entender discos complexos. Ele carrega consigo sua própria camada de abstração de hardware e software.

  • Gerenciador de Memória Próprio: O GRUB2 possui seu próprio alocador de memória dinâmica (equivalente ao malloc/free do C) para gerenciar o escasso espaço de RAM disponível durante o boot, construindo heaps (montes) estritamente controlados.

  • Virtual File System (VFS): Semelhante ao kernel Linux, o GRUB2 implementa um VFS. Ele mapeia os dispositivos físicos lidos pelo firmware para uma estrutura lógica de caminhos e inodes. Isso permite que o código central do GRUB2 requisite a leitura de um arquivo (ex: (hd0,gpt2)/boot/vmlinuz) sem ter a mínima ideia de qual sistema de arquivos está por baixo; o VFS roteia a requisição para o módulo de sistema de arquivos apropriado.

  • Drivers de Vídeo Autônomos: O GRUB2 não se limita ao texto plano legado. Ele carrega módulos gráficos (como vbe para BIOS ou efi_gop para UEFI) para estabelecer um framebuffer nativo de alta resolução, permitindo o uso de fontes customizadas, planos de fundo em alta definição e renderização de temas visuais independentes do sistema operacional.

2. A Arquitetura Modular e o Carregamento Dinâmico (.mod)

Para não exceder os severos limites de tamanho impostos pelos setores de boot do disco (especialmente em ambientes MBR legados), o núcleo residente do GRUB2 é microscópico e burro. Toda a inteligência real do GRUB2 está encapsulada em módulos dinâmicos.

  • O diretório /boot/grub/i386-pc/ (em sistemas BIOS) ou /boot/grub/x86_64-efi/ (em sistemas UEFI) contém dezenas, às vezes centenas, de arquivos com a extensão .mod.

  • Estes arquivos são binários ELF (Executable and Linkable Format) compactos, compilados como código realocável.

  • Dentro do próprio ambiente do GRUB2, antes do Linux existir na memória, você possui acesso ao comando insmod (insert module). O núcleo do GRUB2 pode ler o disco de forma elementar e injetar esses módulos em sua própria memória em tempo de execução.

  • Existe um módulo para cada funcionalidade isolada: ext2.mod (que lê nativamente ext2/3/4), btrfs.mod (para ler árvores Btrfs), part_gpt.mod (para entender tabelas GPT), e crypto.mod (para operações criptográficas).

Essa arquitetura garante que o bootloader aloque em RAM apenas os drivers estritamente necessários para ler a partição específica onde o kernel está alojado, mantendo a pegada de memória e a superfície de ataque reduzidas.

3. Abstração de Armazenamento Avançada (LVM, RAID e LUKS)

Um dos maiores triunfos tecnológicos do GRUB2 sobre os bootloaders minimalistas é a sua capacidade de desconstruir o empilhamento de armazenamento de blocos (block device stacking) do Linux nativamente.

Em cenários corporativos ou de segurança rigorosa, o kernel Linux muitas vezes não reside em uma partição formatada simples. Ele pode estar dentro de um Volume Lógico (LVM), que por sua vez está espelhado em um RAID via software (MDADM), que por sua vez está criptografado (LUKS).

  • LVM e RAID: O GRUB2 possui módulos capazes de varrer os discos, ler os metadados do mdadm e do LVM2, recriar a topologia lógica em sua própria memória temporária e acessar o sistema de arquivos aninhado.

  • Criptografia Nativa (LUKS/GELI): Diferente de soluções onde a partição /boot precisa obrigatoriamente estar descriptografada (cleartext), o GRUB2 possui a biblioteca nativa para derivar senhas via funções PBKDF2/Argon2. Ele apresenta um prompt de senha (Enter passphrase for hd0,gpt2), descriptografa o cabeçalho LUKS1/LUKS2 e monta o dispositivo de bloco virtualmente. Somente então ele procura o kernel dentro do contêiner criptografado.

4. O Interpretador de Comandos e a Máquina de Estado

O GRUB2 não lê um arquivo de configuração como um dicionário estático (ao contrário do antigo menu.lst). Ele analisa o seu arquivo de configuração (grub.cfg) utilizando um interpretador de comandos embutido que é essencialmente uma versão reduzida e Turing-complete do shell bash.

  • O GRUB2 suporta variáveis de ambiente dinâmicas (set root='hd0,gpt2').

  • Suporta blocos condicionais sofisticados (if [ "${grub_platform}" = "efi" ]; then ... fi).

  • Executa loops e iteradores matemáticos rudimentares.

  • Permite a criação de funções de shell completas diretamente no arquivo de configuração para reaproveitamento de rotinas de carga de vídeo e injeção de parâmetros de kernel.

Se a inicialização normal falhar catastróficamente (por exemplo, devido a um erro de digitação no grub.cfg ou à perda da partição /boot), o GRUB2 não trava a máquina; ele abandona o carregamento automático e "cai" para o Rescue Shell ou o Normal Shell. A partir dessa linha de comando interativa preta, o administrador humano possui todo o arsenal de um mini-SO para explorar os barramentos, inspecionar a memória, injetar módulos manualmente e salvar o sistema de forma cirúrgica.

5. Especificação Multiboot e Chainloading Universal

Por fim, o GRUB2 adere estritamente e promove a especificação Multiboot e Multiboot2. Trata-se de um protocolo aberto que dita exatamente em qual estado os registradores do processador e as tabelas de memória devem estar quando um bootloader entrega o controle para um SO, garantindo interoperabilidade entre diferentes carregadores e núcleos.

  • Payload Direto: Para kernels compatíveis com Multiboot (como o Xen Hypervisor ou kernels experimentais criados do zero), o GRUB carrega o ELF diretamente, passa a estrutura Multiboot Information para o registrador EBX e salta para o ponto de entrada mágico.

  • Linux Boot Protocol: Para o Linux (que possui sua própria especificação histórica e engessada no x86), o GRUB2 converte seus dados internos e preenche a Zero Page exigida pelo kernel (comando linux ou linux16/linuxefi).

  • Chainloading: Quando encontra sistemas proprietários opacos que não aderem a nenhuma especificação pública de boot em kernel (notoriamente o ecossistema Windows), o GRUB2 retrocede. Ele lê o primeiro setor de partição alvo (PBR) ou o binário bootmgfw.efi da partição EFI, carrega este binário alienígena na RAM e passa o controle cegamente, permitindo que a Microsoft inicie seu próprio ecossistema fechado de onde o firmware o deixou.