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.

EXT4
DesenvolvedorMingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh, outros
Nome completoFourth extended file system
LançamentoEstável: 21 de agosto de 2008
Instável: 10 de setembro de 2006 (Linux 2.6.28, 2.6.19)
Identificador da partição0x83 (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)
Estruturas
Conteúdos de diretórioLista ligada, hashed B-tree
Alocação de arquivosExtensões/Mapa de bites
Blocos ruinsTabela
Limites
Tamanho Máximo de arquivo16 TiB (para um sistema com blocos de 4k)
Número máximo de arquivos4 bilhões (especificado na criação do sistema)
Tamanho máximo do nome de arquivo256 bytes
Tamanho máximo do volume1 EiB
Caracteres permitidos em nomesTodos bytes exceto NULL ('\0') e '/'
Recursos
Datas salvasmodificação(mtime), modificação de atributos (ctime), acesso (atime), deleção (dtime), criação (crtime)
Faixa de datas14 de dezembro de 1901 - 25 de abril de 2514
Resolução de datasNanosegundos
BifurcaçõesNão
Atributosnot extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
Permissões de sistema de arquivosPOSIX
Compressão transparenteNão
Criptografia transparenteNão
Armazenamento de caso únicoNão
Sistemas operativos suportadosBaseados em Linux
Portal das Tecnologias de informação

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[1] 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[2]. O Ext4 foi incluído (marcado como "em desenvolvimento") no Linux 2.6.19[3].

O Ext3 suporta sistemas de arquivos com tamanho menor que 16 TiB, usando blocos de 4 KiB (212 bytes). Esse limite é definido por uma variável de 32 bits no superbloco, o valor máximo suportado exato é de (232-1) * 212 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 ((232 - 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 (~276 bytes = ~264 * 212 bytes).(ii) alterar a contagem de setores para blocos no nó-i, permitindo arquivos com até ~16 TiB ((232-1) * 212 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 ((248-1) * 212 bytes).

A partir do Linux 2.6.25[3], 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)[4]; verificação de integridade do journal (journal checksums); suporte para tamanhos maiores de volumes e arquivos[5].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[6].

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 [7]. 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 ext2Isto 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.

Notas

Ver também

Referências

Ligações externas