dracut (Português) - ArchWiki

Jump to content

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.

Artigos relacionados

- mkinitcpio

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

This article or section needs expansion.

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

- Wikipedia:dracut (software)
- Gentoo:Dracut

Category:

- Boot process (Português)

Hidden category:

- Pages or sections flagged with Template:Expansion