Usando dracut e dispensando genkernel no Gentoo + LUKS + Btrfs

Publicado por Xerxes em 27/01/2026

[ Hits: 61 ]

 


Usando dracut e dispensando genkernel no Gentoo + LUKS + Btrfs



Introdução

Em sistemas Gentoo usando:
  • LUKS
  • Btrfs com subvolumes
  • systemd
  • gentoo-kernel-bin

É comum precisar executar manualmente:

genkernel --install --luks --btrfs initramfs

Toda vez que o kernel é atualizado.

Como mostrado neste artigo:
Isso não é necessário.

O dracut já é capaz de gerar um initramfs totalmente funcional para LUKS + Btrfs, desde que o sistema esteja corretamente configurado.

Esta dica mostra como configurar o dracut para isso, deixando o processo automático, integrado ao gentoo-kernel-bin.

Cenário utilizado

  • Bootloader: GRUB
  • Kernel: gentoo-kernel-bin
  • Initramfs: dracut
  • Root filesystem: Btrfs
  • Criptografia: LUKS
  • Init system: systemd
  • Swap: zram (sem swap físico)

Pré-requisito obrigatório: systemd com suporte a cryptsetup

Este passo é essencial. Sem ele, o boot pode falhar com erros do tipo:

Failed to start systemd-cryptsetup@cryptroot.service

Garanta que o systemd foi compilado com a flag cryptsetup:

echo "sys-apps/systemd cryptsetup" > /etc/portage/package.use/systemd-cryptsetup

emerge --ask --changed-use sys-apps/systemd

Criando a configuração do dracut

Crie o arquivo de configuração do dracut:

sudo mkdir -p /etc/dracut.conf.d

sudo tee /etc/dracut.conf.d/10-gentoo-luks-btrfs.conf > /dev/null <<'EOF'
# Gentoo + dracut + LUKS + Btrfs
# Initramfs automático para gentoo-kernel-bin

# Módulos necessários no initramfs
add_dracutmodules+=" crypt btrfs "
EOF

Obs.: não defina kernel_cmdline aqui. A linha de boot deve ficar só no GRUB, evitando duplicações.

Obtendo o UUID do LUKS e Gerando o /etc/default/grub

Identifique a partição que contém o LUKS (ajuste os comandos a seguir para sua realidade):

lsblk

Em seguida, execute, para o caso de SATA. Exemplo com sda3:

UUID_LUKS="$(blkid -s UUID -o value /dev/sda3)"

Ou, no caso de NVMe. Exemplo com nvme0n1p3:

UUID_LUKS="$(blkid -s UUID -o value /dev/nvme0n1p3)"

Agora gere conteúdo do /etc/default/grub:

cat <<EOF > /etc/default/grub
GRUB_DISTRIBUTOR="Gentoo"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="rd.luks.uuid=${UUID_LUKS} rd.luks.name=${UUID_LUKS}=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rootflags=subvol=@"
GRUB_DISABLE_LINUX_UUID=true
GRUB_DISABLE_LINUX_PARTUUID=true
EOF

Dessa forma, o UUID correto do LUKS é inserido automaticamente.

Obs.: o parâmetro rootflags=subvol=@ assume que o subvolume root se chama @. Caso utilize outro nome (por exemplo @root, root) ou não utilize subvolumes, ajuste esse parâmetro conforme sua estrutura. Para listar os subvolumes existentes, utilize:

btrfs subvolume list /

Gerando o initramfs com dracut (se estiver no Gentoo instalado)

Se quiser gerar manualmente para o kernel atual:

dracut --force --kver $(uname -r)

Ou simplesmente deixe o processo automático acontecer ao atualizar o kernel:

emerge --ask sys-kernel/gentoo-kernel-bin

O installkernel chamará o dracut automaticamente.

Gerando o initramfs com dracut (se estiver em live com chroot)

Evite usar $(uname -r) no chroot, pois ele pode retornar o kernel do LiveUSB. Em vez disso, pegue a versão do kernel instalada a partir de /lib/modules e gere o initramfs para ela:

KVER="$(ls -1 /lib/modules | sort -V | tail -n1)"

echo "Gerando initramfs para: $KVER"

dracut --force --kver "$KVER"


Obs.: esse método funciona tanto no sistema rodando quanto no chroot (desde que você tenha montado corretamente /boot e esteja dentro do gentoo-alvo).

Recriando o GRUB

Depois das alterações:

grub-mkconfig -o /boot/grub/grub.cfg

Verificações recomendadas

Conferir se o initramfs contém suporte a LUKS e Btrfs:

lsinitrd /boot/initramfs-$(uname -r).img | grep -E "crypt|btrfs|cryptsetup"

O esperado é que apareçam entradas indicando a presença dos componentes necessários para abrir o volume criptografado e montar o Btrfs no initramfs, por exemplo:

usr/lib/dracut/modules.d/90crypt usr/lib/dracut/modules.d/90btrfs usr/bin/cryptsetup usr/bin/btrfs

Conferir se o GRUB está passando os parâmetros corretos:

grep rd.luks /boot/grub/grub.cfg

O esperado é que apareça uma (ou mais) linhas semelhantes a esta:

linux /kernel-6.x.x-gentoo-dist rd.luks.uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rd.luks.name=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rootflags=subvol=@

Depois reinicie para testar.

Fica a dica!
Outras dicas deste autor

Recuperando tela de login no Ubuntu

Gerenciar serviços facilmente no Xubuntu

Wi-Fi caindo no Moto G [Resolvido]

Deixando as fontes do Debian superb

Site brasileiro de jogos para Linux

Leitura recomendada

O Arch Linux e a autenticação de pacotes

Autenticação "WPA" entre Ubuntu e servidor Windows 2003 Server

CUPS X Windows 7

Problemas com a codificação dos caracteres e acentuação no modo texto do Linux Ubuntu 8.04

Como usar o Ubuntu Source List Generator

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts