15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
08.10.2024

O Que É LILO (Linux Loader)? Arquitetura, Configuração e Comparação com GRUB

LILO (Linux Loader) é um bootloader legado para Linux e sistemas operativos semelhantes ao Unix que carrega o kernel diretamente a partir de um endereço de disco armazenado no momento da instalação, sem necessitar de suporte a drivers de sistema de ficheiros durante a sequência de arranque. Opera na fase pré-SO — seja a partir do Master Boot Record (MBR) ou de um setor de arranque de partição — e passa o controlo da CPU ao kernel Linux após o carregar para a memória.

Para a maioria dos sistemas em produção atualmente, o LILO foi substituído pelo GRUB2. No entanto, compreender o seu funcionamento interno continua a ser essencial para engenheiros que mantêm infraestruturas legadas, sistemas embebidos ou servidores isolados onde um bootloader mínimo e determinístico é uma escolha arquitetural deliberada.

Como Funciona o Processo de Arranque do LILO a Baixo Nível

Quando uma máquina é ligada, o BIOS executa o POST (Power-On Self-Test), depois lê os primeiros 512 bytes do disco de arranque — o MBR. Se o LILO estiver instalado aí, esses 512 bytes contêm o carregador de primeira fase do LILO. A sequência desenrola-se da seguinte forma:

  1. Fase 1 (código MBR): O BIOS carrega 512 bytes do MBR para a memória no endereço `0x7C00` e transfere a execução para ele. Este pequeno stub conhece apenas uma tarefa: localizar e carregar a Fase 2.
  2. Fase 2 (ficheiro de mapa): O LILO lê o seu ficheiro de mapa (`/boot/map`), que foi escrito no momento da instalação pelo comando `lilo`. Este mapa contém os endereços absolutos de blocos de disco de cada imagem de kernel e entrada de chain-loader. Não ocorre qualquer análise do sistema de ficheiros aqui — o LILO utiliza endereços de setor LBA/CHS em bruto.
  3. Apresentação do menu de arranque: Se `prompt` estiver definido em `lilo.conf`, o LILO apresenta um menu de texto. A diretiva `timeout` controla quanto tempo aguarda antes de usar o padrão.
  4. Carregamento do kernel: O LILO lê a imagem do kernel a partir dos endereços de disco pré-calculados para a memória baixa, depois descomprime-a e relocaliza-a.
  5. Transferência de controlo: O LILO passa os parâmetros da linha de comandos do kernel e a localização do disco RAM inicial (`initrd`) ao kernel, que assume a inicialização do hardware.

Implicação arquitetural crítica: Como o LILO codifica endereços absolutos de blocos de disco no momento da instalação, qualquer alteração ao ficheiro do kernel, ao esquema de partições ou ao `lilo.conf` requer a re-execução do `/sbin/lilo` para regenerar o mapa. Esquecer este passo após uma atualização do kernel é a causa mais comum de falhas de arranque do LILO.

Configuração do LILO: Uma Análise Aprofundada do `/etc/lilo.conf`

O LILO é configurado inteiramente através do `/etc/lilo.conf`. Abaixo encontra-se um exemplo representativo de produção com anotações que cobrem opções frequentemente omitidas na documentação original:

“`ini

Global section

boot=/dev/sda # Install LILO to the MBR of /dev/sda

map=/boot/map # Path to the map file (must be on a non-LVM, non-RAID partition)

install=/boot/boot.b # Second-stage boot loader binary

prompt # Always show the boot menu

timeout=100 # Wait 10 seconds (units are 1/10th of a second)

default=linux-stable # Default entry label

lba32 # Enable LBA32 addressing — critical for disks > 8 GB

compact # Merge adjacent read requests; speeds up boot on HDD

Linux kernel entry

image=/boot/vmlinuz-5.4.0

label=linux-stable

initrd=/boot/initrd.img-5.4.0

root=/dev/sda1

read-only # Mount root read-only initially; fsck runs before remount rw

append="quiet splash"

Fallback kernel entry

image=/boot/vmlinuz-4.19.0

label=linux-fallback

initrd=/boot/initrd.img-4.19.0

root=/dev/sda1

read-only

Chain-load Windows from a second partition

other=/dev/sda2

label=windows

table=/dev/sda # Partition table to pass to the Windows bootloader

“`

Após cada edição, aplique as alterações com:

“`bash

sudo /sbin/lilo -v

“`

O sinalizador `-v` ativa a saída detalhada, mostrando cada entrada de kernel e chain-loader a ser mapeada. Verifique sempre o código de saída — um retorno diferente de zero significa que o mapa não foi escrito com sucesso.

Parâmetros de Configuração Frequentemente Ignorados

  • `lba32`: Sem esta diretiva em discos maiores que 8 GB, o LILO recorre ao endereçamento CHS e não conseguirá localizar kernels além do limite de 8 GB. Este é um modo de falha silencioso que causou inúmeras interrupções em produção em hardware legado.
  • `compact`: Reduz o tempo de arranque em discos rotativos ao agrupar leituras de setores adjacentes. Incompatível com alguns cenários de arranque por disquete.
  • `vga=`: Passa um parâmetro de modo de vídeo ao kernel. Útil para servidores sem monitor onde se pretende uma resolução de framebuffer específica na consola.
  • `append=`: Passa parâmetros arbitrários da linha de comandos ao kernel. Equivalente aos argumentos da linha `linux` do GRUB.
  • `password=`: Restringe o arranque de uma entrada específica com uma palavra-passe. Note que esta palavra-passe é armazenada em texto simples em `lilo.conf`, pelo que as permissões de ficheiro (`chmod 600`) são obrigatórias.

Cenários de Instalação do LILO

Instalação no MBR

“`bash

Verify the target device

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

Install LILO to MBR of /dev/sda

sudo /sbin/lilo -b /dev/sda

“`

Instalação no Setor de Arranque de uma Partição

Ao utilizar um gestor de arranque como o System Commander, pode querer o LILO no setor de arranque de uma partição em vez do MBR:

“`ini

boot=/dev/sda1 # Install to partition boot sector, not MBR

“`

Esta é também a abordagem correta quando o LILO está a ser carregado em cadeia por outro bootloader.

Remoção do LILO

Para restaurar o MBR original (por exemplo, antes de substituir pelo GRUB):

“`bash

Overwrite MBR with a generic boot sector, preserving the partition table

sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda bs=440 count=1

“`

Nunca utilize `dd if=/dev/zero` no MBR completo — isso destruirá a tabela de partições.

LILO vs. GRUB: Comparação Técnica

A tabela seguinte abrange as dimensões mais relevantes para um administrador de sistemas que escolhe entre os dois, incluindo várias nuances ausentes na maioria das comparações:

FuncionalidadeLILOGRUB2
**Reconhecimento do sistema de ficheiros**Nenhum — utiliza endereços absolutos de blocos de discoSuporte completo para ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS
**Método de aplicação da configuração**É necessário executar `/sbin/lilo` após cada alteraçãoLê `grub.cfg` dinamicamente no momento do arranque
**Gestão de atualizações do kernel**Re-execução manual necessária; fácil de esquecer`update-grub` / `grub-mkconfig` automatiza este processo
**Edição de parâmetros de arranque**Não é possível no momento do arranqueEditor interativo no menu de arranque (pressione `e`)
**Suporte UEFI**NãoSim (GRUB2 suporta UEFI Secure Boot)
**Tabela de partições GPT**Limitado / não fiávelSuporte completo
**Limite de tamanho do disco**8 GB sem `lba32`; efetivamente ilimitado com eleSem limite prático
**Arranque por rede (PXE)**NãoSim (via módulos `grub-efi` e tftp)
**Modo de recuperação/resgate**Nenhum integradoShell de resgate integrada
**Scripting na configuração**NãoSim (scripting semelhante a bash em `grub.cfg`)
**Suporte a Initrd/initramfs**SimSim
**Deteção de múltiplos SO**Apenas entradas manuais`os-prober` deteta automaticamente os SO instalados
**Tamanho binário / pegada**Muito pequeno (~20 KB)Maior (~1–4 MB com módulos)
**Desenvolvimento ativo**Abandonado (última versão em 2015)Mantido ativamente
**Secure Boot**NãoSim (via shim + GRUB assinado)

Veredicto para sistemas em produção: O GRUB2 é a escolha correta para qualquer sistema que execute um kernel mais recente que aproximadamente a versão 3.x, que utilize GPT, UEFI, LVM ou software RAID. A proposta de valor do LILO atualmente limita-se a ambientes embebidos ou legados onde o seu modelo de carregamento determinístico e agnóstico ao sistema de ficheiros é uma vantagem em vez de uma limitação.

Quando o LILO Ainda É a Ferramenta Certa

Apesar da sua idade, o LILO continua a ser adequado em cenários específicos:

  • Sistemas Linux embebidos onde a pegada do bootloader deve ser inferior a 32 KB e a localização do kernel nunca muda.
  • Hardware legado (anterior a 2000) onde os módulos do GRUB2 excedem a memória disponível ou o BIOS tem problemas de compatibilidade com o carregamento por fases do GRUB.
  • Ambientes forenses e de recuperação onde um bootloader mínimo e de funcionamento conhecido é preferível a um complexo com capacidades de scripting.
  • Sistemas isolados onde a simplicidade e auditabilidade do modelo de configuração plana do LILO reduz a superfície de ataque.
  • Fins educativos — o código-fonte e a sequência de arranque do LILO são significativamente mais simples que os do GRUB2, tornando-o um excelente tema para cursos de internos de SO.

Para qualquer implementação moderna — seja a provisionar um ambiente de Alojamento VPS, configurar um Servidor Dedicado, ou configurar uma stack de desenvolvimento em Alojamento Web Partilhado — o GRUB2 é a escolha padrão e correta de bootloader.

Modos de Falha Comuns do LILO e Diagnóstico

Compreender os códigos de erro do LILO é fundamental para a recuperação. O LILO imprime uma cadeia parcial de `LILO` durante o arranque para indicar o progresso:

Caracteres ImpressosFase AtingidaCausa Provável da Falha
_(nada)_MBR não carregadoBIOS não encontra dispositivo de arranque
`L`Fase 1 carregadaErro ao carregar a Fase 2; caminho do ficheiro de mapa inválido
`LI`Fase 2 carregadaBinário da Fase 2 incompatível ou corrompido
`LIL`Ficheiro de mapa encontradoFicheiro de mapa corrompido ou no endereço errado
`LIL?`Ficheiro de mapa carregadoFicheiro de mapa carregado do endereço errado
`LILO`Carregamento completoMenu de arranque apresentado com sucesso

Procedimento de Recuperação

Se o LILO não arrancar após uma atualização do kernel:

  1. Arranque a partir de um CD live ou ambiente de resgate.
  2. Monte a partição raiz: `mount /dev/sda1 /mnt`
  3. Chroot: `chroot /mnt`
  4. Verifique se `/etc/lilo.conf` aponta para o caminho correto do kernel.
  5. Re-execute: `/sbin/lilo -v`
  6. Reinicie.

Se o próprio ficheiro de mapa estiver corrompido, pode ser necessário reinstalar o pacote `lilo` para restaurar `/boot/boot.b` antes de re-executar o comando.

Considerações de Segurança

O LILO é anterior aos modelos modernos de segurança de firmware e tem várias limitações importantes:

  • Sem suporte a Secure Boot: O LILO não pode participar na cadeia de confiança do UEFI Secure Boot. Em sistemas onde a verificação de integridade do firmware é necessária, o GRUB2 com um shim assinado é obrigatório.
  • Fraquezas na proteção por palavra-passe: A diretiva `password=` em `lilo.conf` armazena credenciais em texto simples. Restrinja estritamente as permissões de ficheiro (`chmod 600 /etc/lilo.conf`, propriedade do root).
  • Vulnerabilidade de acesso físico: Sem uma palavra-passe de BIOS/UEFI, um atacante com acesso físico pode arrancar a partir de suporte externo e contornar completamente o LILO.
  • Sem integração com TPM: O LILO não pode realizar arranque medido nem interagir com um TPM para atestação, ao contrário do GRUB2 com os módulos adequados.

Para servidores onde a encriptação de disco, o arranque medido ou a atestação remota fazem parte da arquitetura de segurança — como um VPS com cPanel ou um Servidor Dedicado reforçado — estas limitações tornam o LILO inadequado.

Migração do LILO para o GRUB2

Se estiver a manter um sistema legado ainda a executar o LILO e precisar de migrar:

“`bash

1. Install GRUB2

sudo apt-get install grub2 # Debian/Ubuntu

sudo yum install grub2-tools # RHEL/CentOS

2. Install GRUB2 to MBR

sudo grub-install /dev/sda

3. Generate GRUB configuration

sudo update-grub # Debian/Ubuntu

sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS

4. Verify the new configuration

sudo grep -i menuentry /boot/grub/grub.cfg

5. Reboot and confirm GRUB2 loads

sudo reboot

“`

Não remova o pacote `lilo` até ter confirmado que o GRUB2 arranca com sucesso. Mantenha uma USB de resgate live disponível durante a migração.

Se o seu servidor utilizar Painéis de Controlo VPS que interagem com o bootloader (por exemplo, para troca de kernel ou modo de resgate), verifique a compatibilidade do painel com o GRUB2 antes de migrar.

Principais Conclusões Técnicas: Matriz de Decisão

Utilize esta lista de verificação para determinar se o LILO é adequado para o seu ambiente:

Utilize o LILO se:

  • O sistema utiliza firmware BIOS (não UEFI)
  • O disco utiliza tabela de partições MBR (não GPT)
  • O kernel e o esquema de partições são estáticos e raramente mudam
  • A pegada do bootloader deve ser minimizada (sistemas embebidos)
  • Está a estudar os internos da sequência de arranque para fins educativos

Não utilize o LILO se:

  • O sistema utiliza firmware UEFI (o LILO é incompatível)
  • O disco utiliza particionamento GPT
  • Os kernels são atualizados regularmente via gestor de pacotes
  • Necessita de Secure Boot, atestação TPM ou arranque medido
  • O sistema utiliza LVM, software RAID ou Btrfs para o sistema de ficheiros raiz
  • Necessita de edição interativa de parâmetros de arranque para resolução de problemas
  • O sistema está exposto à internet ou sujeito a requisitos de conformidade de segurança

Regra operacional: Sempre que editar `/etc/lilo.conf` ou atualizar um kernel num sistema gerido pelo LILO, executar `/sbin/lilo -v` não é opcional — é tão obrigatório como a própria edição. Automatize isto com um hook de pós-instalação do kernel se o seu gestor de pacotes o suportar.

Perguntas Frequentes

O que acontece se atualizar o kernel Linux num sistema LILO sem executar `/sbin/lilo`?

O ficheiro de mapa do LILO ainda aponta para os endereços de blocos de disco do kernel antigo. O sistema arrancará o kernel anterior como se a atualização nunca tivesse acontecido — ou, se a imagem do kernel antigo tiver sido substituída no mesmo local, carregará dados corrompidos e entrará em pânico. Execute sempre `/sbin/lilo -v` imediatamente após qualquer atualização do kernel.

O LILO consegue arrancar a partir de um disco com particionamento GPT?

Não de forma fiável. O LILO foi concebido para tabelas de partições MBR. Os discos GPT utilizam um MBR de proteção que tecnicamente permite a instalação do LILO, mas o LILO não tem conhecimento das entradas de partição GPT e não consegue localizar de forma fiável partições além das primeiras quatro. Utilize o GRUB2 para qualquer disco GPT.

O LILO é compatível com sistemas UEFI?

Não. O LILO é um bootloader da era BIOS sem suporte a aplicações EFI. Em sistemas UEFI, o firmware espera um binário `.efi` em formato PE na Partição de Sistema EFI. O LILO não pode fornecer isto. O GRUB2, systemd-boot ou rEFInd são as escolhas corretas para UEFI.

Qual é a diferença entre o valor `timeout` do LILO e os segundos reais?

A diretiva `timeout` é medida em décimos de segundo. Um valor de `50` equivale a 5 segundos, `100` equivale a 10 segundos. Esta é uma configuração incorreta comum — administradores que esperam um tempo limite de 50 segundos e definem `timeout=50` obterão uma janela de 5 segundos.

O LILO consegue arrancar a partir de volumes LVM ou software RAID?

Não. Como o LILO resolve as localizações do kernel para endereços absolutos de blocos de disco no momento da instalação, não consegue lidar com as camadas de abstração introduzidas pelo LVM ou MD RAID. A partição `/boot` deve residir numa partição simples diretamente acessível pelo BIOS. Esta é uma das principais razões arquiteturais pelas quais o GRUB2 substituiu o LILO nas distribuições Linux modernas.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar