dracut (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Status de tradução: Esse artigo é uma tradução de dracut. Data da última tradução: 2020-06-21. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.
Nota: Leia o anúncio da lista de discussão para uma possível substituição do Mkinitcpio com Dracut.

dracut cria uma imagem inicial usada pelo kernel para pré-carregar os módulos do dispositivo de bloco (como IDE, SCSI ou RAID) necessários para acessar o sistema de arquivos raiz. Ao instalar o linux, você pode escolher entre mkinitcpio e dracut. O dracut é usado pelo Fedora, RHEL, Gentoo e Debian, entre outros.

Você pode ler a documentação completa do projeto do dracut na documentação do kernel.

Instalação

Instale o pacote dracut ou o pacote dracut-gitAUR para a versão de desenvolvimento mais recente.

Dica: Se o dracut funcionar na sua máquina após você testá-lo, você pode desinstalar o mkinitcpio.

Configuração

Se você deseja executar sempre o dracut com um determinado conjunto de sinalizadores, é possível salvar uma configuração especificada em um arquivo .conf em /etc/dracut.conf.d/. Por exemplo:

/etc/dracut.conf.d/myflags.conf
hostonly="yes"
compress="lz4"
add_drivers+=" i915 "
omit_dracutmodules+=" network iscsi "

Você pode ver mais opções de configuração em dracut.conf(5). Descrições mais completas de cada opção podem ser encontradas em dracut(8).

Opções de linha de comando do kernel

Você pode forçar o dracut a usar parâmetros de linha de comando do kernel no ambiente de initramfs. Esteja ciente de que você deve usar o esquema de nomenclatura UUID para especificar dispositivos de bloco.

Não é necessário especificar o dispositivo de bloco raiz para o dracut. A partir de dracut.cmdline(7):

O dispositivo raiz usado pelo kernel é especificado no arquivo de configuração de inicialização na linha de comando do kernel, como sempre.

No entanto, pode ser útil definir alguns parâmetros antecipadamente e você pode ativar recursos adicionais, como solicitar parâmetros adicionais da linha de comando. Veja dracut.cmdline(7) para todas as opções. Aqui estão algumas opções de configuração de exemplo:

  • Continuar a partir de uma partição swap: resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422
  • Solicitar parâmetros adicionais da linha de comando do kernel: rd.cmdline=ask
  • Exibir saída informativa mesmo se "quiet" estiver definido: rd.info

As opções de linha de comando do kernel devem ser colocadas linha a linha semelhantes ao estilo /etc/dracut.conf.d/, em um arquivo *.conf em /etc/cmdline.d/. Por exemplo, o arquivo de opções da linha de comando do kernel pode se parecer com:

/etc/cmdline.d/myflags.conf
resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422
rd.cmdline=ask
rd.info

Uso

O dracut é fácil de usar e normalmente não requer configuração do usuário, mesmo ao usar configurações não padrão, como LVM dentro do LUKS.

Para gerar um initramfs para o kernel em execução:

# dracut /boot/initramfs-linux.img

Para gerar um initramfs reserva, execute:

# dracut -N /boot/initramfs-linux-fallback.img

/boot/initramfs-linux.img refere-se ao arquivo de imagem de saída. Se você estiver usando o kernel não regular, considere alterar o nome do arquivo. Por exemplo, para o kernel linux-lts, o arquivo de saída deve ser nomeado /boot/initramfs-linux-lts.img. No entanto, você pode nomear esses arquivos como desejar, desde que sua configuração do gerenciador de boot use os mesmos nomes de arquivo.

Sinalizadores adicionais

O sinalizador --hostonly cria uma imagem que contém apenas os arquivos necessários para inicializar o sistema host local, em vez de criar uma imagem genérica com mais arquivos. O uso desse sinalizador reduz o tamanho da imagem gerada, mas você não poderá usá-la em outros computadores ou alternar para um sistema de arquivos raiz diferente sem gerar uma nova imagem.

O sinalizador --force sobrescreve o arquivo de imagem se ele já estiver presente.

Mais sinalizadores podem ser encontrados em dracut(8).

Dicas e truques

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Adicionar instruções para criar uma imagem de kernel unificada usando a opção --uefi. (Discuss in Talk:Dracut#Unified kernel image)

Ver informações sobre a imagem gerada

Você pode visualizar informações sobre uma imagem initramfs gerada, que pode desejar visualizar em um paginador:

# lsinitrd /caminho/para/imagem_initramfs | less

Este comando listará os argumentos transmitidos ao dracut quando a imagem foi criada, a lista de módulos dracut incluídos e a lista de todos os arquivos incluídos.

Alterar o programa de compactação

Para reduzir o tempo gasto compactando a imagem final, você pode alterar o programa de compactação usado.

Atenção:
  • Verifique se o seu kernel tem o suporte de descompactação escolhido compilado, caso contrário você não poderá inicializar. Você também deve ter o pacote de programa de compactação escolhido instalado.
  • O kernel Linux não possui suporte a initramfs compactado em zstd.[1]

Basta adicionar qualquer uma das seguintes linhas (não várias) à sua configuração do dracut:

compress="cat"
compress="gzip"
compress="bzip2"
compress="lzma"
compress="xz"
compress="lzo"
compress="lz4"

gzip é o programa de compactação padrão usado. compress="cat" criará o initramfs com nenhuma compatação.

Você também pode usar um programa de compactação sem suporte oficial:

compress="programa"

Gerar um novo initramfs na atualização de kernel

É possível gerar automaticamente novas imagens initramfs a cada atualização do kernel. As instruções aqui são para o kernel padrão linux, mas deve ser fácil adicionar hooks extras para outros kernels.

Dica: A página dracut-hookAUR inclui hooks e scripts similares aos abaixo.

Como o comando para descobrir a versão do kernel é um tanto complexo, ele não funcionará por si só em um hook do pacman. Portanto, crie um script em qualquer lugar do seu sistema. Para este exemplo, ele será criado em /usr/local/bin/.

O script também copiará o novo arquivo de kernel vmlinuz para /boot/, pois os pacotes do kernel não colocam mais arquivos em /boot/.[2]

/usr/local/bin/dracut-install.sh
#!/usr/bin/env bash

args=('--force' '--no-hostonly-cmdline')

while read -r line; do
	if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
		read -r pkgbase < "/${line}"
		kver="${line#'usr/lib/modules/'}"
		kver="${kver%'/pkgbase'}"

		install -Dm0644 "/${line%'/pkgbase'}/vmlinuz" "/boot/vmlinuz-${pkgbase}"
		dracut "${args[@]}" --hostonly "/boot/initramfs-${pkgbase}.img" --kver "$kver"
		dracut "${args[@]}" --no-hostonly "/boot/initramfs-${pkgbase}-fallback.img" --kver "$kver"
	fi
done
/usr/local/bin/dracut-remove.sh
#!/usr/bin/env bash

while read -r line; do
	if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
		read -r pkgbase < "/${line}"
		rm -f "/boot/vmlinuz-${pkgbase}" "/boot/initramfs-${pkgbase}.img" "/boot/initramfs-${pkgbase}-fallback.img"
	fi
done

Você precisa tornar os scripts executáveis. Se você deseja adicionar ou remover sinalizadores, você deve adicioná-los à sua configuração do dracut.

O próximo passo é criar hooks do pacman:

/etc/pacman.d/hooks/90-dracut-install.hook
[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Target = usr/lib/modules/*/pkgbase

[Action]
Description = Updating linux initcpios (with dracut!)...
When = PostTransaction
Exec = /usr/local/bin/dracut-install.sh
NeedsTargets
/etc/pacman.d/hooks/60-dracut-remove.hook
[Trigger]
Type = Path
Operation = Remove
Target = usr/lib/modules/*/pkgbase

[Action]
Description = Removing linux initcpios...
When = PreTransaction
Exec = /usr/local/bin/dracut-remove.sh
NeedsTargets

Você tem que impedir o mkinitcpio de criar e remover imagens initramfs também, removendo mkinitcpio ou com os seguintes comandos:

# ln -sf /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook
# ln -sf /dev/null /etc/pacman.d/hooks/60-mkinitcpio-remove.hook

Solução de problemas

Espaços nos parâmetros do kernel

O dracut não tem suporte a valores entre aspas com espaços nos parâmetros do kernel root= e resume=. Por exemplo, root="PARTLABEL=Arch Linux". Consulte o issue 720 do dracut.

Você precisará especificar os parâmetros usando um esquema de nomeação de dispositivo de bloco diferente como UUID.

Veja também