Kernel Linux finalmente remove o suporte ao initrd clássico em uma limpeza massiva de 62 patches

O adeus ao initrd e a consolidação do initramfs aceleram e simplificam o boot no Linux.

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

Em uma das maiores limpezas de código legado em anos, uma massiva série de 62 patches foi enviada para remover completamente o suporte ao initrd clássico (initial RAM disk) do kernel Linux. Assinada por Askar Safin, a proposta consolida um processo iniciado anos atrás — a depreciação do initrd em 2020 — e sela a modernização do boot com o initramfs como único caminho suportado. O patchset é amplo, toca praticamente todas as arquiteturas mantidas e foi submetido contra a árvore v6.17-rc5, apontando sua rota natural para a janela de merge do Linux 6.18. Para quem quiser ler a proposta na íntegra, vale conferir o tópico “[initrd: remove classic initrd support]” no arquivo público da LKML (lore.kernel.org).

Aposentando uma relíquia: a diferença entre initrd e initramfs

Por que isso importa? Porque initrd e initramfs resolvem o mesmo problema — oferecer um early userspace capaz de montar a raiz real do sistema —, mas o fazem com paradigmas muito diferentes.

O initrd clássico funcionava como um pequeno “disco” na memória (ramdisk). Na prática, era uma imagem de filesystem (comum ver ext2) que o kernel precisava entender e montar. Isso exigia drivers de filesystem embutidos logo no início do boot e uma sequência de passos mais rígida: carregar o ramdisk, montar o FS desse disco, executar o linuxrc//init, fazer pivot_root e, só então, ir para o sistema real. É como iniciar um carro antigo que precisa de vários truques antes de pegar no tranco — funciona, mas é cheio de arestas.

O initramfs, por sua vez, é elegantemente simples: um arquivo cpio compactado que o kernel descompacta direto na memória (ramfs/tmpfs), sem depender de drivers de filesystem específicos. O conteúdo cai numa árvore de diretórios pronta para uso e o /init é executado imediatamente. Menos camadas, menos acoplamento, menos chance de quebra. O resultado prático? Inicialização mais rápida, mais flexível e com um kernel menos inchado. Em termos modernos, o initramfs elimina a “tradução” intermediária do initrd e fala direto a língua do kernel.

Uma limpeza massiva em 62 patches

O trabalho proposto por Safin não é só apagar código antigo; é alinhar a terminologia, os build flags e a documentação para o mundo pós-initrd. O patch 00/62 já estabelece o tom: initrd sai de cena; initramfs segue como primeira classe; o driver de ramdisk (brd) continua existindo — afinal, ainda é útil em outros contextos.

Na prática, isso se traduz em mudanças que afetaram praticamente todo o kernel:

  • remoção de caminhos de código do initrd em subsistemas centrais e, principalmente, por toda a pasta arch/. Safin relata testes em oito arquiteturas diferentes via QEMU, o que dá a dimensão de como o initrd estava entranhado no kernel — de x86 e ARM a SH e SPARC.
  • renomeação de símbolos e opções de configuração para refletir o estado atual do mundo: CONFIG_BLK_DEV_INITRD vira CONFIG_INITRAMFS, e todas as antigas CONFIG_RD_* passam a CONFIG_INITRAMFS_DECOMPRESS_* (ex.: CONFIG_RD_GZIPCONFIG_INITRAMFS_DECOMPRESS_GZIP). É uma mudança grande? Sim. Mas saudável: nomes importam, e manter “INITRD” em flags que já não representam o initrd só confunde e perpetua o passado.
  • limpeza de parâmetros de boot obsoletos ligados ao initrd clássico: load_ramdisk, prompt_ramdisk e noinitrd desaparecem; ramdisk_start, usado especificamente pelo initrd, também sai. O objetivo é acabar com switches que não fazem mais sentido e que, em alguns casos, já não tinham efeito real há anos.
  • atualização de documentação e exemplos para remover menções a rotas antigas (como o pivot_root específico do initrd) e apontar o initramfs como a solução moderna para o early userspace.

Uma curiosidade que revela o cuidado técnico: várias variáveis globais foram renomeadas para desambiguar o que é “embutido” no kernel e o que é “externo” (passado pelo bootloader). Por exemplo, __initramfs_start/__initramfs_size viram __builtin_initramfs_start/__builtin_initramfs_size; e initrd_start/initrd_end tornam-se virt_external_initramfs_start/virt_external_initramfs_end. Parece detalhe — e é —, mas são esses detalhes que evitam bugs sutis e tornam o código mais legível para a próxima geração de mantenedores.

Por que isso é uma ótima notícia para quem mantém e usa Linux

Se você compila kernels, mantém defconfigs ou apenas gosta de saber como as coisas funcionam por baixo do capô, a resposta cabe numa palavra: simplificação. Menos caminhos de inicialização significam menos testes combinatoriais, menos suposições históricas e menos código que só existe para não quebrar o passado. Isso reduz o custo cognitivo de quem mantém o kernel e, a longo prazo, impacta positivamente a estabilidade.

Para distribuições e integradores, o recado é similar: ao abandonar a herança initrd, o ecossistema converge totalmente no initramfs, o que facilita documentação, tooling e debug. Scripts de inicialização, hooks e dracut/mkinitcpio da vida já orbitam esse modelo há muito tempo; a diferença agora é que o próprio kernel fecha a porta para a rota antiga.

E se alguém ainda dependia de um comportamento bem específico do initrd clássico? A recomendação é migrar — e já era, de fato, desde 2020. O initramfs oferece tudo que o early userspace precisa e continua sendo a solução moderna e totalmente suportada. O próprio tópico na LKML indica testes extensivos (com cross toolchains e QEMU) e dá caminhos para quem mantém arquiteturas menos comuns. Para quem quer conferir os detalhes operacionais citados pelo autor, ele referencia ferramentas como o [mkroot do Toybox] e os toolchains publicados por Rob Landley, além de apontar discussões anteriores sobre o acesso ao blob inicial via /sys/firmware/initrd (para cenários muito específicos), tudo documentado na mesma thread.

O pano de fundo histórico e o timing

Tecnicamente, o Linux initrd foi crucial num passado em que embutir drivers e stacks inteiras no kernel era a forma mais segura de garantir um boot controlado. O initramfs surgiu como evolução natural quando o kernel ganhou mecanismos melhores de descompressão e tmpfs/ramfs ofereceram um “chão” simples dentro da memória. De lá para cá, userspace inicial ficou mais poderoso, ferramentas de geração amadureceram e o early boot passou a acumular menos fricção.

A depreciação de 2020 foi o primeiro “tchau”. A série de 62 patches de setembro de 2025 é o “adeus” definitivo — com direito a faxina na casa inteira: remoção de arquivos específicos do initrd, poda de referências nos headers, ajustes em dezenas de defconfigs de arquiteturas e uma boa arrumação nos nomes de símbolos. É um marco histórico daqueles que não aparecem na splash screen, mas que você sente no dia a dia: documentações mais consistentes, parâmetros de boot que fazem sentido e um kernel com menos carga do passado.

Em resumo: o Linux está fazendo aquilo que o torna duradouro — remover o que não faz mais sentido, alinhar o que ficou torto com o tempo e deixar o caminho livre para o que realmente importa no boot de hoje.

Compartilhe este artigo