Ext4 (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 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