Ext4 (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Ext4. Data da última tradução: 2020-03-26. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

De Ext4 - Linux Kernel Newbies (traduzido):

Ext4 é a evolução do sistema de arquivos mais usado no Linux, o Ext3. De diversas formas, o Ext4 é uma melhoria mais profunda sobre Ext3 do que o Ext3 foi sobre Ext2. O Ext3 foi principalmente sobre adicionar journaling ao Ext2, mas o Ext4 modifica estruturas de dados importantes do sistema de arquivos como aqueles projetados para armazenar os dados de arquivos. O resultado é um sistema de arquivos com um desenho melhorado, melhor desempenho, confiabilidade e recursos.

Criando um novo sistema de arquivos ext4

Para formatar uma partição, faça:

# mkfs.ext4 /dev/partição
Dica:
  • Veja mke2fs(8) para mais opções; edite /etc/mke2fs.conf para ver/configurar as opções padrões.
  • Se houver suporte, você pode querer habilitar suporte a 64-bits e metadados de somas de verificação (também conhecidos como checksums).

Proporção de bytes por nó-i

Traduzido de mke2fs(8):

mke2fs cria um nó-i para todos os bytes por nó-i de espaço no disco. Quanto maior proporção de bytes por nó-i, menos nós-i serão criados.

A criação de um novo arquivo, diretório, link simbólico etc. exige pelo menos um nó-i livre. Se a contagem de nós-i for pequena demais, nenhum arquivo pode ser criado no sistema de arquivos mesmo se ainda houver espaço restante nele.

Porque não é possível alterar a proporção de bytes por nó-i ou a contagem de nós-i após o sistema de arquivos ser criado, o mkfs.ext4 usa, por padrão, uma proporção relativamente baixa de um nó-i a cada 16384 bytes (16 KB) para evitar essa situação.

Porém, para partições com tamanho em centenas ou milhares de GB e tamanho de arquivo médio na faixa de megabytes, isso geralmente resulta em um número muito grande de nós-i porque o número de arquivos criados nunca alcança o número de nós-i.

Isso resulta em um desperdício de espaço em disco, porque todos arquivos nós-i não usados ocupam até 256 bytes no sistema de arquivos (isso também é definido em /etc/mke2fs.conf, mas não deve ser alterado). 256 * vários milhões = alguns poucos gigabytes desperdiçados em nós-i não usados.

Essa situação pode ser avaliada comparando as figuras {I}Uso% fornecidas pelo df e df -i:

$ df -h /home
Sist. Arq.              Tam.   Usado   Dispo.  Uso%  Montado em
/dev/mapper/lvm-home    115G    56G    59G     49%   /home
$ df -hi /home
Sist. Arq.              Inodes IUsado ILivre IUso%   Montado em
/dev/mapper/lvm-home    1.8M    1.1K   1.8M   1%     /home

Para especificar uma proporção de bytes por nó-i diferente, você pode usar a opção -T tipo-de-uso que sugere o uso esperado do sistema de arquivos usando tipos definidos em /etc/mke2fs.conf. Além daqueles tipos estão os largefile e largefile4 maiores, que oferecem proporções mais relevantes de um nó-i a cada 1 MB e 4 MB, respectivamente. Pode-se usar da seguinte forma:

# mkfs.ext4 -T largefile /dev/dispositivo

A proporção de bytes por nó-i também pode ser definida diretamente via a opção -i: p.ex.: use -i 2097152 para uma proporção 2 MB e -i 6291456 para uma proporção 6 MB.

Dica: Por outro lado, se você está configurando uma partição dedicada a hospedar milhões de arquivos pequenos, como e-mails e itens de newsgroups, você pode usar valores menores de tipo-de-uso como news (um nó-i para cada 4096 bytes) ou small (idem, somado a tamanhos de bloco e nó-i menores).
Atenção: Se você faz uso intenso de links simbólicos, certifique-se de manter a contagem de nós-i alta o suficiente com uma proporção baixa de bytes por nó-i, porque, apesar de não usar muito espaço, todo novo link simbólico consume um novo nó-i e, portanto, o sistema de arquivos pode esgotá-los rapidamente.

Blocos reservados

Por padrão, 5% dos blocos de sistema de arquivos serão reservados para o superusuário, para evitar fragmentação e "permitir daemons do root continuarem a funcionar corretamente após processos sem privilégios serem impedidos de escrever no sistema de arquivos" (traduzido de mke2fs(8)).

Para discos modernos de alta capacidade, isso é mais alto do que necessário se a partição for usada como um arquivo de longo prazo ou não crucial para operações do sistema (como /home). Veja esse e-mail para a opinião do desenvolvedor do ext4 Ted Ts'o sobre blocos reservados.

Geralmente é seguro reduzir a percentagem de blocos reservados para liberar espaço de disco quando a partição é:

  • Grande demais (por exemplo > 50G); ou
  • Usado como arquivo de longo prazo, isto é, onde arquivos não serão excluídos e criados com muita frequência

A opção -m de utilitários relacionados ao ext4 permitem especificar a percentagem de blocos reservados.

Para impedir totalmente de reservar blocos na criação do sistema de arquivos, use:

# mkfs.ext4 -m 0 /dev/dispositivo

Para alterá-lo para 1% posteriormente, use:

# tune2fs -m 1 /dev/dispositivo

Você pode usar findmnt(8) para localizar o nome do dispositivo:

$ findmnt /o/ponto/de/montagem

Migrando de ext2/ext3 para ext4

Montando partições ext2/ext3 como ext4 sem conversão

Motivo

Um compromisso entre a conversão total para ext4 e simplesmente permanecer com ext2/ext3 é montar as partições como ext4.

Vantagens:

  • Compatibilidade (o sistema de arquivos pode continuar sendo montado como ext3) – Isso permite que os usuários ainda leiam o sistema de arquivos de outros sistemas operacionais sem suporte a ext4 (por exemplo, o Windows com drivers ext2/ext3)
  • Melhor desempenho (embora não tanto como uma partição ext4 totalmente convertida).[1] [2]

Desvantagens:

  • Menos recursos do ext4 são usados (apenas aqueles que não alteram o formato do disco, como a alocação de múltiplos blocos e a alocação atrasada)
Nota: Exceto pela novidade relativa do ext4 (que pode ser visto como um risco), não há nenhuma desvantagem importante para esta técnica.

Procedimento

  1. Edite /etc/fstab e altere o 'type' de ext2/ext3 para ext4 para quaisquer partições você gostaria de montar como ext4.
  2. Monte novamente as partições afetadas.

Convertendo partições ext2/ext3 para ext4

Motivo

Para experimentar os benefícios do ext4, um processo de conversão irreversível deve ser concluído.

Vantagens:

  • Desempenho melhorado e novos recursos.[3] [4]

Desvantagens:

  • As partições que contêm principalmente arquivos estáticos, como uma partição /boot, podem não se beneficiar dos novos recursos. Além disso, adicionar um journal (que está implícito ao mover uma partição ext2 para ext3/4) sempre incorre em despesas extras ao custo de desempenho.
  • Irreversível (as partições ext4 não podem ser "rebaixadas" para ext2/ext3. No entanto, é compatível com versões anteriores até que a extensão e outras opções exclusivas estejam habilitadas)

Procedimento

Essas instruções foram adaptadas da documentação do Kernel e um tópico do BBS.

Atenção:
  • Se você converter o sistema de arquivos raiz do sistema, certifique-se de que o initramfs reserva ('fallback') está disponível na reinicialização. Alternativamente, adicione ext4 de acordo com Mkinitcpio#MODULES e gere novamente o initramfs antes de iniciar.
  • Se você decidir converter uma partição /boot separada, certifique-se que o gerenciador de boot oferece inicialização do ext4.

Nas etapas a seguir, /dev/sdxX denota o caminho para a partição a ser convertida, tal como /dev/sda1.

  1. Faça backup de todos os dados em quaisquer partições ext3 que serão convertidas para ext4. Um pacote útil, especialmente para partições raiz, é o clonezilla.
  2. Edite /etc/fstab e altere o 'type' de ext3 para ext4 para quaisquer partições que serão convertidos para ext4.
  3. Inicialize uma mídia Live (se necessário). O processo de conversão com e2fsprogs deve ser feito quando a unidade não está montada. Se estiver convertendo uma partição raiz, a forma mais simples de alcançar isso é inicializar de alguma outra mídia Live.
  4. Certifique-se que a partição não está montada.
  5. Se você quiser converter uma partição ext2, a primeira etapa de conversão é adicionar um journal executando tune2fs -j /dev/sdxX como root; fazendo dela uma partição ext3.
  6. Execute tune2fs -O extent,uninit_bg,dir_index /dev/sdxX como root. Esse comando converte o sistema de arquivos ext3 para ext4 (irreversivelmente).
  7. Execute fsck -f /dev/sdxX como root.
    • Esta etapa é necessária, do contrário o sistema de arquivos ficará ilegível. A execução de fsck é necessária para retornar o sistema de arquivos para um estado consistente. Ele vai encontrar erros de soma de verificação nos descritores de grupo - isso é esperado. A opção -f pede que o fsck verifique mesmo se o sistema de arquivos parecer limpo. A opção -p pode ser usada sobre a "reparação automática" (do contrário, o usuário será solicitado a intervir em cada erro).
  8. Recomendado: monte a partição e execute e4defrag -c -v /dev/sdxX como root.
    • Mesmo que o sistema de arquivos agora esteja convertido em ext4, todos os arquivos que foram escritos antes da conversão ainda não aproveitam a opção de extensão do ext4, que melhorará o desempenho de arquivos grandes e reduzirá a fragmentação e o tempo de verificação do sistema de arquivos. Para aproveitar plenamente o ext4, todos os arquivos teriam que ser reescritos no disco. Use e4defrag para cuidar desse problema.
  9. Reinicie.

Melhorando o desempenho

E4rat

E4rat é um aplicativo de pré-carregamento projetado para o sistema de arquivos ext4. Ele monitora os arquivos abertos durante a inicialização, otimiza seu posicionamento na partição para melhorar o tempo de acesso e os pré-carrega no começo do processo de inicialização. E4rat não oferece melhorias com SSDs, cujo tempo de acesso é insignificante em comparação com discos rígidos.

Desabilitando atualização de tempo de acesso

O sistema de arquivos ext4 registra informações sobre quando um arquivo foi acessado pela última vez e há um custo associado ao registro dele. Com a opção noatime, os timestamps de acesso no sistema de arquivos não são atualizados.

/etc/fstab
/dev/sda5    /    ext4    defaults,noatime    0    1

Fazer isso quebra aplicativos que dependem do tempo de acesso, veja fstab#Opções atime para soluções possíveis.

Aumentando o intervalo de commit

O intervalo de sincronização para dados e metadados pode ser aumentado, proporcionando um maior atraso de tempo para a opção commit.

O 5 segundos padrão significa que, se a energia for perdida, será perdido tanto quanto os últimos 5 segundos de trabalho. Isso força uma sincronia completa de todos os dados/journals para mídia física a cada 5 segundos. O sistema de arquivos não será danificado, graças ao registro no journaling. O seguinte fstab ilustra o uso de commit:

/etc/fstab
/dev/sda5    /    ext4   defaults,noatime,commit=60    0    1

Desligando barreiras

Atenção: Desabilitar as barreiras para discos sem cache com respaldo de bateria não é recomendado e pode levar à corrupção severa do sistema de arquivos e perda de dados.

Ext4 permite barreiras de gravação por padrão. Isso garante que os metadados do sistema de arquivos sejam corretamente escritos e ordenados no disco, mesmo quando os caches de gravação perdem energia. Isso ocorre com um custo de desempenho especialmente para aplicativos que usam fsync intensamente ou criam e excluem muitos pequenos arquivos. Para discos que tenham um cache de gravação com respaldo de bateria de uma forma ou de outra, desabilitar as barreiras pode melhorar o desempenho com segurança.

Para desligar as barreiras, adicione a opção barrier=0 ao sistema de arquivos desejado. Por exemplo:

/etc/fstab
/dev/sda5    /    ext4    noatime,barrier=0   0    1

Desabilitando journaling

Atenção: Usar um sistema de arquivos sem o journal pode resultar em perda de dados em caso de desmontagem repentina, como falha de energia ou bloqueio do kernel.

Desabilitar o journal do ext4 pode ser feito com o seguinte comando em um disco desmontado:

# tune2fs -O "^has_journal" /dev/sdXN

Use journal externo para otimizar o desempenho

Para aqueles com preocupações sobre integridade e desempenho de dados, o registro no jornal pode ser significativamente acelerado com a opção de montagem journal_async_commit. Note que não funciona com o padrão balanceado de data=ordered, então isso é recomendado apenas quando o sistema de arquivos já estiver usando data=journal cautelosamente.

Você pode formatar um dispositivo dedicado para o journal com mke2fs -O journal_dev /dev/journal_device. Use tune2fs -J device=/dev/journal_device /dev/ext4_fs para atribuir o journal a um dispositivo existente ou substitua tune2fs por mkfs.ext4 se você estiver criando um novo sistema de arquivos.

Dicas e truques

Usando criptografia baseada em arquivos

Desde o Linux 4.1, o ext4 possui suporte nativo a criptografia de arquivos — consulte o artigo fscrypt. A criptografia é aplicada no nível do diretório, e diretórios diferentes podem usar chaves de criptografia diferentes. Isso é diferente de dm-crypt, que é a criptografia em nível de dispositivo de bloco, e de eCryptfs, que é um sistema de arquivos criptográficos empilhados.

Habilitando somas de verificação de metadados

Quando um sistema de arquivos foi criado com o e2fsprogs 1.44 ou posterior, as somas de verificação de metadados já devem estar ativadas por padrão. Os sistemas de arquivos existentes podem ser convertidos para permitir o suporte à soma de verificação de metadados.

Se o seu CPU tem suporte a SSE 4.2, certifique-se que o módulo de kernel crc32c_intel esteja carregado para habilitar o algoritmo CRC32C acelerado por hardware [5]. Caso contrário, você precisará carregar o módulo crc32c_generic.

Para ler mais sobre metadados de somas de verificação, veja o wiki do ext4.

Dica: Use dumpe2fs para verificar os recursos que estão habilitados no sistema de arquivos:
# dumpe2fs /dev/caminho/para/disco

Novo sistema de arquivos

Para habilitar o suporte a somas de verificação de metadados ext4 ao criar um novo sistema de arquivos.

# mkfs.ext4 -O metadata_csum /dev/caminho/para/disco

Converter arquivo de sistema existente

Nota: O sistema de arquivos não deve estar montado.

Primeiro, a partição precisa ser verificada e otimizada usando e2fsck:

# e2fsck -Df /dev/caminho/para/disco

Converta o sistema de arquivos para 64 bits:

# resize2fs -b /dev/caminho/para/disco

Finalmente, habilite suporte a somas de verificação:

# tune2fs -O metadata_csum /dev/caminho/para/disco

Veja também