Usando dracut e dispensando genkernel no Gentoo + LUKS + Btrfs

Publicado por Xerxes em 27/01/2026

[ Hits: 82 ]

 


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

Como instalar Gnome completo no Fedora 17 Xfce Spin

Entre no universo Linux com Zenwalk!

Pixel Dungeon no Linux Grátis

O Everest do Linux

Restaurar painel do Cinnamon

Leitura recomendada

Configurando modens Pctel Amr

Reduzindo tempo de boot via otimização do SystemD

Como configurar IP estático em sua placa de rede

Desligando ou reiniciando o Gnome rapidinho

Configurando placa wireless Broadcom BCM43224 no GNU/Linux

  

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