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

03 - Comandos e Edição no Menu do GRUB

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

1. A Superfície Interativa e a Edição Efêmera (A Tecla e)

O menu gráfico do GRUB2, que muitas vezes parece uma simples lista de seleção estática, é na verdade a interface visual de um interpretador de comandos pausado em tempo de execução. Quando o menu é exibido, o GRUB2 suspende o contador (timeout) ao detectar qualquer interrupção do teclado e aguarda a interação do usuário.

A funcionalidade mais crítica deste menu é o modo de Edição Efêmera, acessível ao selecionar uma entrada (menuentry) e pressionar a tecla e (edit).

  • Comportamento em RAM: Ao entrar neste modo, o GRUB2 não altera o arquivo físico /boot/grub/grub.cfg no disco. Ele carrega o bloco lógico associado àquela menuentry específica para um buffer temporário na memória RAM e abre um editor de texto rudimentar (semelhante ao GNU nano).

  • Manipulação Cirúrgica: O administrador pode navegar com as setas do teclado, alterar variáveis de ambiente do GRUB, injetar ou remover módulos (insmod / rmmod) e, crucialmente, modificar a linha de comando que será repassada ao Kernel Linux.

  • Execução: Após a modificação, o código adulterado é executado em memória pressionando-se Ctrl+X (ou F10). Se o administrador pressionar Esc, o buffer é descartado e as alterações são perdidas. Se a máquina for reiniciada logo após o boot, o GRUB2 lerá novamente o grub.cfg original do disco.

Esta capacidade de edição sob demanda é uma ferramenta de depuração fundamental, permitindo testes de parâmetros de kernel (nomodeset, acpi=off) sem comprometer a estabilidade permanente da configuração do bootloader.

2. A Hierarquia de Consoles: Normal Shell vs. Rescue Shell

Quando a automação do grub.cfg falha, ou quando o administrador exige controle granular absoluto, o GRUB2 fornece interfaces de linha de comando diretas. Contudo, dependendo da gravidade da falha, o usuário será direcionado para ambientes radicalmente diferentes.

O "Normal Shell" (grub>)

Acessado manualmente pressionando a tecla c (command) no menu principal, ou acionado automaticamente se o grub.cfg for apagado mas a pasta /boot/grub/ permanecer intacta.

  • Capacidade Total: Este é o ambiente de execução completo do GRUB2 (Estágio 2). O módulo normal.mod está carregado.

  • Recursos: O administrador tem acesso ao histórico de comandos (setas para cima/baixo), autocompletar com a tecla Tab (que lê nativamente os caminhos no disco), paginação de saída de texto e acesso a todos os módulos binários (.mod) disponíveis no sistema de arquivos.

O "Rescue Shell" (grub rescue>)

Este é o ambiente de contingência severa. Ele aparece exclusivamente quando o Estágio 1.5 (core.img ou grubx64.efi) é carregado com sucesso na memória, mas falha catastroficamente ao tentar localizar seu prefixo estrutural (/boot/grub/) ou não consegue carregar o módulo normal.mod.

  • Limitações Extremas: O Rescue Shell opera sem suporte a autocompletar, sem histórico e, pior, não possui acesso aos comandos dinâmicos normais. Apenas um subconjunto microcodificado de comandos (como ls, set, insmod e prefix) está embutido na RAM.

  • Objetivo: A única missão prática de um administrador diante do grub rescue> é remapear manualmente as variáveis prefix e root, carregar o normal.mod usando insmod e forçar o bootloader a transitar de volta para o Normal Shell.

3. Exploração da Topologia Física e Lógica: Comando ls

Dentro da linha de comando do GRUB2, o comando ls é a principal ferramenta de reconhecimento de ambiente. Diferente do ls do Linux, o ls do GRUB interage simultaneamente com a camada de dispositivos de bloco do firmware e com o seu próprio VFS interno.

Ao executar um ls simples, o GRUB exibe todos os dispositivos detectados pelo BIOS/UEFI:

grub> ls

Saída: (hd0) (hd0,gpt1) (hd0,gpt2) (hd1) (hd1,msdos1)

A nomenclatura do GRUB2 obedece a regras estritas:

  1. Dispositivos: Representados por hd (Hard Disk), cd (CD-ROM) ou fd (Floppy). A indexação dos discos começa em 0 (ex: hd0 é o primeiro disco físico, hd1 é o segundo).

  2. Partições: Diferente dos discos, a indexação das partições começa em 1 (uma mudança em relação ao GRUB Legacy que começava em 0). O GRUB também denota o esquema de particionamento detectado, ex: (hd0,gpt1) ou (hd0,msdos1).

Inspeção Profunda de Sistemas de Arquivos

O comando ls pode ser usado para inspecionar o conteúdo dos blocos:

  • ls (hd0,gpt2): Exibe metadados, revelando o tipo do sistema de arquivos (ex: ext2, btrfs), a data de modificação e o UUID exato do volume lógico.

  • ls (hd0,gpt2)/: A barra / no final instrui o VFS do GRUB a montar temporariamente o sistema de arquivos e listar os diretórios na raiz daquela partição. O autocompletar (Tab) funciona perfeitamente aqui no Normal Shell, permitindo investigar o conteúdo exato da pasta /boot/ antes de tentar o boot.

4. O Workflow de Boot Manual (Comando a Comando)

Seja para burlar uma configuração corrompida ou como exercício de depuração arquitetural, o administrador de sistemas sênior deve ser capaz de inicializar o Linux manualmente utilizando apenas os comandos primitivos do Normal Shell. O processo é determinístico e exige quatro etapas rigorosas:

Passo 1: Estabelecimento do Root do Bootloader

O GRUB2 precisa saber qual será a sua partição base de operações para resolver caminhos relativos.

Bash

grub> set root=(hd0,gpt2)

(Nota: Opcionalmente, pode-se usar o comando search --no-floppy --fs-uuid --set=root <UUID> para encontrar a partição dinamicamente).

Passo 2: Carregamento do Kernel e Passagem de Parâmetros

O comando linux (ou linuxefi / linux16 dependendo da arquitetura e versão) carrega o binário vmlinuz para a RAM na área protegida e anexa a string de comandos que ditará o comportamento do Linux.

Bash

grub> linux /boot/vmlinuz-6.1.0-9-amd64 root=/dev/sda2 ro quiet

Observação Crítica: O parâmetro root=/dev/sda2 aqui pertence ao Kernel Linux (indicando onde está a árvore / do SO), o que difere conceitualmente da variável root do GRUB2 configurada no Passo 1.

Passo 3: Carregamento do Initramfs

Como o disco pode conter sistemas de arquivos complexos que o núcleo monolítico do kernel não consegue montar imediatamente, um sistema de arquivos temporário em RAM deve ser fornecido. O comando initrd (ou initrdefi) aloca espaço para isso.

Bash

grub> initrd /boot/initrd.img-6.1.0-9-amd64

Passo 4: Execução (Handover)

Neste momento, kernel e initramfs estão repousando inertes na RAM física da máquina, e as tabelas de parâmetros foram construídas (A Zero Page do x86). O comando final dispara a transição de poder arquitetural:

Bash

grub> boot

O GRUB destrói as próprias estruturas de dados em memória e executa um salto para o ponto de entrada mágico do kernel carregado.

5. Casos de Uso Avançado de Edição e Depuração em Tempo de Execução

A edição interativa da Kernel Command Line no menu do GRUB2 é a técnica primordial de troubleshooting no universo Linux, permitindo alterar drasticamente o fluxo de inicialização do sistema operacional antes mesmo que ele nasça na memória.

  • Desmascaramento do Boot (Remoção do quiet e splash):

    Sistemas modernos ocultam a inicialização por trás de telas gráficas (Plymouth) ou terminal em branco (parâmetro quiet). Ao remover essas palavras da linha linux na edição do GRUB, o kernel é forçado a cuspir toda a saída do anel de buffer (dmesg) diretamente no framebuffer VGA/EFI. Isso permite diagnosticar em qual milissegundo exato o hardware falhou ou o processo init travou (o chamado Kernel Panic rastreável).

  • Intervenção Gráfica de Baixo Nível (nomodeset):

    Quando atualizações corrompem os drivers DRM/KMS proprietários de placas de vídeo (como NVIDIA ou AMD), a tela do sistema pode escurecer completamente logo após o GRUB passar o controle. Injetar o parâmetro nomodeset na edição do GRUB instrui o kernel a desabilitar a transição gráfica acelerada por hardware em nível de núcleo, forçando-o a usar drivers framebuffer primitivos e não-acelerados (VESA ou EFI GOP) de forma a garantir acesso visual ao terminal para desinstalação do driver faltoso.

  • Ponto de Ruptura de Segurança e Auditoria (init=/bin/bash):

    A demonstração cabal do poder destrutivo da edição não autenticada do GRUB. Se o administrador adicionar init=/bin/bash ao final da linha do kernel, o kernel inicializará os sistemas básicos de hardware, montará a partição raiz (geralmente como read-only) e ignorará completamente o gerenciador de serviços do sistema (como o Systemd). Ele lançará imediatamente um shell com privilégios completos de root (UID 0), sem consultar as bibliotecas PAM ou solicitar qualquer senha. A partir deste shell, usando mount -o remount,rw /, o usuário pode invocar o comando passwd e redefinir a senha do root perdido, subvertendo integralmente a segurança do espaço do usuário.