# Ext4

ext4 ou fourth extended filesystem (em português: quarto sistema de arquivos estendido) é um sistema de arquivos de registro para Linux, desenvolvido para ser o sucessor do ext3.

## História

Em 11 de Outubro de 2008, os patches que marcam o ext4 como códigos estáveis foram mesclados em repositórios de código de fonte do Linux 2.6.28, que denota o fim da fase de desenvolvimento e recomenda a adoção do ext4.
Mathur et al [2007], no congresso "Ottawa Linux Symposium" de 2007, descreveram as principais características a serem implementadas no Ext4, e mostraram a razão de não desenvolverem um sistema de arquivos inteiramente novo pela compatibilidade com o Ext3 e por causa de sua base já instalada.
Em 28 de junho de 2006, Theodore Y. "Ted" Ts'o propôs a bifurcação (fork) do desenvolvimento do Ext3. Esse passo foi necessário para atender às discussões em torno da evolução do Ext3. Mingming Cao, dentre outros, citou a limitação desse sistema de arquivos por causa do uso de variáveis de 32 bits e indicou que já havia esforços para aumentar o tamanho daquelas variáveis para 48 bits. O Ext4 foi incluído (marcado como "em desenvolvimento") no Linux 2.6.19.
O Ext3 suporta sistemas de arquivos com tamanho menor que 16 TiB, usando blocos de 4 KiB (2$^{12}$ bytes). Esse limite é definido por uma variável de 32 bits no superbloco, o valor máximo suportado exato é de (2$^{32}$-1) * 2$^{12}$ bytes. O tamanho de arquivo é limitado por uma variável de 32 bits no nó-i, um contador de setores, daí a limitação em ~2 TiB ((2$^{32}$ - 1) * 512 bytes). [MATHUR et al, 2007]
A primeira providência para aumentar aqueles valores foram: (i) aumentar o contador de blocos no superbloco para 64 bits, isso permitiria um sistema de arquivos com ~64 ZiB (~2$^{76}$ bytes = ~2$^{64}$ * 2$^{12}$ bytes). (ii) alterar a contagem de setores para blocos no nó-i, permitindo arquivos com até ~16 TiB ((2$^{32}$-1) * 2$^{12}$ bytes).
Entretanto, o limite para o tamanho do volume é determinado pela alocação de espaço, que no Ext4 é definido por extensões, que usam 48 bits [MATHUR et al, 2007], o limite para o volume é de ~1 EiB ((2$^{48}$-1) * 2$^{12}$ bytes).
A partir do Linux 2.6.25, em 2008, foram adicionados 16 bits ao contador de blocos do arquivo, no nó-i. Assim um arquivo no Ext4 tem um limite atual de ~1 EiB, o mesmo do volume.

## Funcionalidades

As novas funcionalidades propostas são: alocação tardia (delayed allocation); marcas temporais com maior resolução (nanossegundos); verificação de integridade do journal (journal checksums); suporte para tamanhos maiores de volumes e arquivos. mais extensões são introduzidas, compatibilidade com versões anteriores, pré alocação, mais rápido sistema de arquivo de verificação, alocador multibloco, melhor timestamps.
Deixa de existir um limite de sub-diretórios no ext4.
Alocação tardia
Ext4 usa uma técnica de execução do sistema de arquivos chamado atribuir-on-flush, também conhecida como a atribuição de atraso. Isso melhora o desempenho e reduz a fragmentação, melhorando a alocação de blocos decisões com base no tamanho do arquivo.
Jornal checksumming
Ext4 usa checksums no jornal para melhorar a confiabilidade, já que o jornal é um dos arquivos mais utilizados do disco. Esta característica tem um lado benéfico, que pode evitar com segurança um disco I / O esperar durante o processo diário, melhorando o desempenho ligeiramente.
Suporte para tamanhos maiores de volumes e arquivos
O sistema de arquivos ext4 pode suportar volumes com tamanho até 1 exabyte e arquivos com tamanho até 16 terabytes. O atual e2fsprogs só pode tratar um sistema de arquivos de 16 TB.
Extensões
As extensões são introduzidas para substituir o tradicional bloco de mapeamento de esquema usado por arquivos ext2/3.Uma extensão é um conjunto de blocos contíguos físico, melhorando o desempenho de muitos arquivos e redução de fragmentação. Uma única extensão em ext4 pode mapear até 128MB de espaço contíguo com um bloco de 4 KB de tamanho. Quando há mais de 4 extensões em um arquivo, o resto das extensões são indexadas em um three.
Compatibilidade com versões anteriores
O sistema de arquivos ext4 é compatível com o ext3 e ext2 Isto irá melhorar o desempenho já ligeiramente, porque alguns novos recursos do ext4 também pode ser usado com ext3 e ext2, tal como o novo algoritmo de alocação de blocos.
Pré alocação
O sistema de arquivos ext4 permite pré-alocação de espaço em disco para um arquivo.
Um novo fallocate chamada de sistema foi adicionado ao Linux para uso de sistemas de arquivos, incluindo ext4 e XFS, que têm essa capacidade.
O mais rápido sistema de arquivos de verificação
No ext4, bloco alocado grupos e secções da tabela de inode são marcados como tal. Isso permite que e2fsck para ignorá-los completamente em uma verificação e reduz o tempo necessário para verificar o sistema de arquivos do tamanho do ext4 é construída para suportar. Esse recurso é implementado na versão 2.6.24 do Linux.
Alocador multibloco
O alocador multiblock é usado quando a atribuição atrasada é ativado por um sistema de arquivos, ou quando os arquivos são abertos no modo O_DIRECT. Esse recurso não afeta o formato de disco.
Melhora de carimbos (timestamps)
Ext4 também adiciona um suporte para a data-criado timestamps. Mas, como Theodore Ts'o salienta, ao mesmo tempo que é fácil de adicionar um campo data de criação extra no inode (portanto, tecnicamente permitindo suporte para data criada timestamps em ext4), é mais difícil de modificar ou adicionar o necessário sistema de chamadas, como stat (que provavelmente exigiria uma nova versão), e as várias bibliotecas que dependem deles (como glibc). Estas alterações exigem a coordenação de vários projetos. Portanto, mesmo se os desenvolvedores implementarem o suporte inicial para a data de criação de carimbos, esse recurso não estará disponível nesse momento para programas de usuário.

## Desvantagens

Alocação tardia e potencial perda de dados
Como a "alocação tardia" oferece um comportamento diverso do existente no ext3 com o qual os programadores tem contado, ela representa um risco adicional de perda de dados nos casos de o sistema travar antes que todos os dados tenham sido gravados no disco. Devido a isto, o ext4, na versão 2.6.30 do Linux, detecta automaticamente esses casos e reverte para o comportamento antigo.
O cenário típico em que isso pode ocorrer é um programa que substitui o conteúdo de um arquivo sem forçar uma gravação para o disco com fsync. Existem duas maneiras comuns de substituir o conteúdo de um arquivo em sistemas Unix:
open ("file", O_TRUNC), write (fd, data); close (fd); Neste caso, um arquivo existente é truncado no momento da abertura (devido a O_TRUNC flag), então os novos dados são gravados. Desde a gravação pode demorar algum tempo, há uma oportunidade de perder o conteúdo mesmo com ext3, mas geralmente muito pequena. No entanto, porque o ext4 pode atrasar a atribuição arquivo de dados por um longo tempo, essa oportunidade é muito maior.
open ("File.New"); write (fd, dados); close (fd); rename ("File.New", "arquivo"); Um novo arquivo temporário ("File.New") é criado, inicialmente, que contém o novo conteúdo. Em seguida, o novo arquivo é renomeado sobre o antigo. A troca de arquivos pela "chamada" renomear é garantido para ser atômica por POSIX normas - ou seja, tanto o antigo arquivo continua, ou é substituído por um novo. Como o padrão ext3 "ordenada" journalling garantias modo de arquivo de dados são gravados no disco antes de metadados, isto garante que a técnica seja a idade ou o conteúdo do arquivo novo irá persistir no disco ext4 de alocação atrasada quebra essa expectativa, porque o arquivo de escrever pode ser adiado por um longo tempo, e mudar o nome é normalmente realizada antes de conteúdo novo arquivo chegar ao disco.
Usando fsync com mais frequência para reduzir o risco para o ext4 pode levar a sanções graves desempenho em ext3 montado com a data=ordered bandeira (o padrão na maioria das distribuições Linux. Em resposta, o ext4 no Linux 2.6.30 e versões mais recentes detecta a ocorrência destes casos comuns e força os arquivos a serem atribuídos de imediato. Por um pequeno custo de performance, isso fornece semântica semelhante ao ext3 modo ordenado e aumenta a chance que tanto a versão do arquivo vai sobreviver ao Os novos patches tornaram-se parte do Linux mainline 2.6.30.