Anatomia do Ext4

Conheça o quarto sistema de arquivos estendido

O quarto sistema de arquivos estendido, ou ext4, é a nova geração de sistemas de arquivos com registro de mudanças que mantém a antiga compatibilidade com o sistema de arquivos anterior, o ext3. Embora o ext4 não seja o padrão atual, será o próximo sistema de arquivos padrão da maioria das distribuições Linux. ® . Conheça o ext4 e descubra por que ele será seu novo sistema de arquivos favorito.

M. Tim Jones, Consultant Engineer, Emulex Corp.

M. Tim Jones é um arquiteto de firmwares embarcados e autor de Inteligência Artificial: Sistemas de Abordagem, GNU/Linux, Programação de Aplicativos AI (atualmente em sua segunda edição), Programação de Aplicativos AI (em sua segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Sua formação em engenharia vai desde o desenvolvimento de kernels para nave espacial geossincrônica até a arquitetura de sistema embarcado e o desenvolvimento de protocolos de interligação de redes. Tim é um Engenheiro Consultor para a Emulex Corp. em Longmont, Colorado.


nível de autor Contribuidor do
        developerWorks

17/Fev/2009

Cada release de kernel do Linux traz algumas surpresas e o release 2.6.28 de dezembro não é exceção. Ele é o primeiro de um sistema de arquivos ext4 estável (entre várias outras características interessantes, como Btrfs, que ainda está sob rigoroso desenvolvimento). Esta nova geração de sistema de arquivos estendido oferece escalabilidade e confiabilidade aprimoradas, além de novas e importantes funcionalidades. O ext4 é tão escalável que o sistema de arquivos máximo consumiria um milhão de discos de 1 terabyte (TB).

Uma Breve História do Sistema de Arquivos Estendido

O Comutador do Sistema de Arquivo Virtual

O VFS é uma camada que abstrai os detalhes dos sistemas de arquivos subjacentes dos usuários do sistema de arquivos da camada superior. Assim, o VFS permite que o Linux ofereça suporte a vários sistemas de arquivos—simultaneamente—em um determinado sistema Linux.

O primeiro sistema de arquivos suportado pelo Linux foi o Minix. Ele apresentava alguns problemas de desempenho significativos e, assim, foi criado outro sistema de arquivos, especificamente para o Linux, denominado sistema de arquivos estendido. O primeiro sistema de arquivos estendido (ext) foi projetado por Remy Card e introduzido no Linux em abril de 1992. O sistema de arquivos ext foi o primeiro a utilizar o comutador do Sistema de Arquivo Virtual (VFS) implementado no kernel 0.96c e suportava sistemas de arquivos de até 2 gigabytes (GB).

O segundo sistema de arquivos estendido (ext2), também implementado por Remy Card, foi introduzido em janeiro de 1993. Ele trazia ideias avançadas de outros sistemas de arquivos da época (como o Berkeley Fast File System [FFS]). O Ext2 estendido suportava sistemas de arquivos de até 2TB, embora os kernels 2.6 estendidos apresentassem sistemas de arquivos ext2 com tamanho máximo de 32TB.

O terceiro sistema de arquivos estendido (ext3) significou um avanço importante nos sistemas de arquivos do Linux, embora seu desempenho ficasse aquém de alguns concorrentes. O sistema de arquivos ext3 introduziu o conceito de journaling para aprimorar a confiabilidade do sistema de arquivos quando o sistema sofria uma parada brusca. E apesar do melhor desempenho dos sistemas de arquivos concorrentes (como o XFS da Silicon Graphics e o IBM® Journaled File System [JFS]), o ext3 suportava atualizações de sistemas que já utilizavam o ext2. O Ext3 foi apresentado em novembro de 2001 e implementado por Stephen Tweedie.

Voltemos aos dias de hoje. Temos agora o quarto sistema de arquivos estendido (ext4). O Ext4 apresenta inúmeros novos aprimoramentos quanto a desempenho, escalabilidade e confiabilidade. Mais especificamente, o ext4 suporta sistemas de arquivos de 1 exabyte. Ele foi implementado por uma equipe de desenvolvedores, liderados por Theodore Tso (responsável pela manutenção do ext3) e introduzido no kernel 2.6.19. Encontra-se agora estável no kernel 2.6.28 (desde dezembro de 2008).

O ext4 pega emprestado vários conceitos úteis de muitos sistemas de arquivos concorrentes. Por exemplo, a abordagem baseada em extensões para o gerenciamento de blocos foi implementada no JFS. Outro recurso relativo ao gerenciamento de blocos (alocação com atraso) foi implementado tanto no XFS quanto no ZFS da Sun Microsystems.

Você encontrará muitos aprimoramentos e inovações no novo sistema de arquivos ext4. Os aprimoramentos abrangem inúmeros ângulos de recursos, desde uma funcionalidade nova (recursos novos), escalabilidade (que escala além das atuais restrições dos sistema de arquivos), confiabilidade (no caso de falhas) e, sem dúvida, desempenho.


Funcionalidade

O ext4 inclui uma grande quantidade de funcionalidades novas, mas o mais importante é sua compatibilidade com versões futuras e antigas com o ext3 e os aprimoramentos nos registros de data e hora que significam o futuro dos sistemas Linux de alto desempenho.

Compatibilidade com Versões Futuras e Antigas

Como atualmente o ext3 é um dos sistemas de arquivos mais populares em uso pelo Linux, migrar para o ext4 é simples e fácil. Por isso, o ext4 foi elaborado para ser compatível com versões futuras e antigas (até certo ponto) (consulte Figura 1). O ext4 apresenta compatibilidade com versões futuras pelo fato de você poder montar um sistema de arquivos ext3 como um sistema de arquivos ext4. Para aproveitar o ext4 ao máximo, é necessária uma migração do sistema de arquivos, a fim de converter e usufruir o novo formato ext4. Também é possível montar um sistema de arquivos ext4 como ext3 (compatibilidade anterior), mas somente se o sistema de arquivos ext4 não tiver extensões (isso será discutido na seção sobre desempenho).

Figura 1. A Compatibilidade com Versões Futuras e Antigas do Ext4
A Compatibilidade com Versões Futuras e Antigas do Ext4

Além dos recursos de compatibilidade, quando você quiser migrar de um sistema de arquivos ext3 para ext4, poderá fazer isso de forma gradativa. Ou seja, os arquivos antigos que você não moveu podem permanecer no formato ext3, mais antigo, enquanto os arquivos novos (ou os antigos que foram copiados) ocuparão as novas estruturas de dados do ext4. Assim, será possível migrar de um sistema de arquivos ext3 on-line para um sistema de arquivos ext4.

Aprimorando a Resolução e o Intervalo do Registro de Data e Hora

Por incrível que pareça, os registros de data e hora na área de sistemas de arquivos estendidos anteriores ao ext4 eram baseados em segundos. Embora isso seja satisfatório em muitas configurações, à medida que os processadores evoluem, com mais velocidade e integração maior (processadores com vários núcleos), e o Linux encontra-se em outros domínios de aplicações, como computadores de alto desempenho, na simplicidade do registro de data e hora baseado em segundos falha. Essencialmente, o ext4 tem registros de data e hora que resistem ao tempo, quando os expandimos para LSB em nanossegundos. O intervalo de tempo também precisou ser estendido com dois bits adicionais, de modo a aumentar a vida útil em mais 500 anos.


Escalabilidade

Um dos aspectos mais importantes da evolução dos sistemas de arquivos é sua capacidade de serem escaláveis, levando-se em conta as crescentes exigências sobre eles. O ext4 realiza isso de diversas formas, superando os limites do ext3 e revolucionando as áreas de gerenciamento de metadados dos sistemas de arquivos.

Estendendo os Limites do Sistema de Arquivos

Uma das primeiras diferenças visíveis do ext4 é o suporte aumentado para volumes do sistema de arquivos, tamanhos de arquivos e limites de subdiretórios. O ext4 oferece suporte a sistemas de arquivos de até 1 exabyte (1000 petabytes). Embora pareça muito para os padrões atuais, o consumo de armazenamento continua a crescer; assim, o ext4 foi definitivamente desenvolvido pensando no futuro. Os arquivos no ext4 podem chegar a 16TB (supondo-se blocos de 4KB), oito vezes o limite do ext3.

Por fim, o limite do subdiretório foi expandido com o ext4, de diretórios de 32KB para virtualmente ilimitados. Pode parecer exagero, mas é preciso considerar a hierarquia do sistema de arquivos que consome um exabyte de armazenamento. A indexação do diretório também foi otimizada para uma estrutura em Árvore B com hash; portanto, embora os limites sejam bem maiores, o ext4 suporta tempos de procura muito rápidos.

Extensões

Uma das desvantagens principais do ext3 era seu método de alocação. Os arquivos eram alocados por meio de um mapa de bits de espaço livre, que não era muito rápido nem escalável. O formato do ext3 é bastante eficiente com arquivos pequenos, mas muito ineficiente com arquivos grandes. O ext4 substitui o mecanismo do ext3 com extensões para aprimorar a alocação e oferecer suporte a uma estrutura mais eficiente de armazenamento. Uma extensão é simplesmente uma forma de representar uma sequencia adjacente de blocos. Com isso, os metadados diminuem, porque, em vez de manter as informações sobre onde está armazenado um bloco, a extensão mantém as informações sobre onde está armazenada uma lista grande de blocos adjacentes (reduzindo, assim, o armazenamento geral de metadados).

As extensões do ext4 adotam uma abordagem em camadas para representar arquivos pequenos com eficiência, bem como árvores de extensão para representar arquivos grandes de forma eficiente. Por exemplo, um único inode do ext4 tem espaço suficiente para fazer referência a quatro extensões (em que cada uma representa um conjunto de blocos adjacentes). Para arquivos grandes (inclusive fragmentados), um inode pode fazer referência a um nó de índice e cada um deles pode fazer referência a um nó folha (fazendo referência a várias extensões). Essa árvore de extensão de profundidade constante oferece um rico esquema de representação para arquivos grandes e potencialmente esparsos. Os nós também apresentam mecanismos de autoverificação para evitar, no futuro, que os sistema de arquivos sejam corrompidos.


Desempenho

Um dos atributos mais importantes usados para mensurar novos sistemas de arquivos é seu desempenho fundamental. É também uma das areas de maior dificuldade; quando um sistema de arquivos chega a dimensões muito extensas, espera-se que seja bastante confiável, e o desempenho pode ficar comprometido. No entanto, mesmo que o ext4 trate de questões de escalabilidade e confiabilidade, ele fornece inúmeros aprimoramentos de desempenho.

Pré-alocação de Nível de Arquivo

Algumas aplicações, como bancos de dados ou fluxos de conteúdos, contam com arquivos armazenados em blocos adjacentes (para explorar a otimização da leitura de blocos sequenciais das unidades, bem como maximizar as taxas de leitura de comandos para blocos). Embora as extensões possam fornecer segmentos de blocos adjacentes, outro método de força bruta é o de pré-alocação de seções muito grandes de blocos adjacentes no tamanho desejado (como foi implementado no passado, com o XFS). O ext4 implementa isso por meio de uma nova chamada de sistema, que efetua a pré-alocação e inicializa um arquivo de um determinado tamanho. Em seguida, é possível gravar os dados necessários e fornecer desempenho de leitura limitado sobre os dados.

Atrasando a Alocação dos Blocos

Outra otimização baseada no tamanho dos arquivos é a alocação com atraso. Essa otimização no desempenho atrasa a alocação dos blocos físicos no disco até que eles sejam sincronizados nele. O segredo dessa otimização é que, atrasando a alocação dos blocos físicos até que estes precisem ser gravados no disco, mais blocos são apresentados para alocar e gravar nos blocos adjacentes. Isso se assemelha à pré-alocação persistente, com a diferença de que o sistema de arquivos efetua a tarefa automaticamente. No entanto, se o tamanho do arquivo já for conhecido, a pré-alocação persistente será o melhor caminho.

Alocação de Vários Blocos

Uma otimização final—novamente, relacionada a blocos adjacentes—é o alocador de blocos do ext4. No ext3, o alocador de blocos trabalhava na alocação de um único bloco por vez. Quando eram necessários vários blocos, era possível encontrar dados adjacentes em blocos não adjacentes. O ext4 resolve isso com um alocador de blocos que aloca vários blocos por vez, provavelmente adjacentes no disco. Como as otimizações anteriores, esta reúne os dados relacionados no disco para melhorar a otimização de leitura sequencial.

O outro aspecto da alocação de vários blocos é a quantidade de processamento exigida para a alocação dos blocos. Lembre-se de que o ext3 alocava um bloco de cada vez. Nas unidades mais simples, essa operação exigia uma chamada para a alocação de cada um dos blocos. Alocar vários blocos de uma só vez exige muito menos chamadas para o alocador de blocos, resultando em uma alocação mais rápida e em uma redução do processamento.


Confiabilidade

Conforme os sistemas de arquivos são escaladospara tamanhos massivos possíveis com o ext4, sem dúvida haverá preocupações quanto à confiabilidade. O ext4 inclui vários mecanismos de autoproteção e autorreparo que tratam disso.

Verificando o Checksumdo Diário do Sistema de Arquivos

Assim como o ext3, o ext4 é um sistema de arquivos com journal. Journaling é o processo de registro de mudanças no sistema de arquivos por meio de um journal (um log circular dedicado em uma região adjacente do disco). As alterações reais no armazenamento físico são então efetuadas partir do log, que pode implementá-las com mais confiabilidade e garantir a consistência, mesmo se houver travamento do sistema ou faltar energia durante a operação. O resultado é que reduzem-se as chances de que o sistema de arquivos seja corrompido.

Entretanto, mesmo com o journaling, a corrupção ainda será possível se entradas errôneas forem inseridas no diário. Para enfrentar esse problema, o ext4 implementa a verificação de checksum do journal para certificar-se de que as alterações válidas cheguem ao sistema de arquivos subjacente. É possível encontrar referências adicionais ao journaling —um importante aspecto do ext4—na seção Recursos .

O ext4 oferece suporte a vários modos de journaling, dependendo das necessidades do usuário. Por exemplo, o ext4 oferece suporte a um modo no qual somente metadados são gravados no journal (modo Writeback), um modo no qual os metadados são gravados no journal, mas os dados são gravados como os metadados são gravados a partir do journal (modo Ordenado) e um modo no qual tanto os metadados quanto os dados gravados no journal (modo Journal —o modo mais confiável). Observe que o modo Journal, apesar de ser o melhor para assegurar um sistema de arquivos consistente, também é o mais lento, pois todos os dados passam pelo journal.

Desfragmentação On-line

Embora o ext4 incorpore recursos que reduzam a fragmentação no sistema de arquivos (extensões para a alocação de blocos sequenciais), é impossível evitar uma determinada fragmentação quando um sistema de arquivos existe por muito tempo. Por esse motivo, existe uma ferramenta on-line de desfragmentação para desfragmentar o sistema de arquivos e os arquivos individuais para aprimorar o desempenho. O desfragmentador on-line é uma ferramenta simples, que copia os arquivos em um inode novo do ext4 que faça referência a extensões adjacentes.

Outro aspecto da desfragmentação on-line é o curto tempo exigido para a verificação de um sistema de arquivos (fsck). O ext4 marca os grupos de blocos não utilizados na tabela do inode, permitindo que o processo fsck ignore-os totalmente, para aumentar a velocidade do processo de verificação. Quando o sistema operacional decide validar o sistema de arquivos por conta de corrupção interna (algo inevitável, pois os sistemas de arquivos aumentam em tamanho e distribuição), o design geral do ext4 se reflete na confiabilidade geral aprimorada.


O Que Vem a Seguir?

É óbvio que o sistema de arquivos estendido apresenta uma história longa e valiosa dentro da Linux—desde a primeira introdução ao ext, em 1992, ao ext4 em 2008. Ele foi o primeiro sistema de arquivos elaborado especificamente para Linux e mostrou-se um dos sistemas de arquivos disponíveis mais eficientes, estáveis e eficazes. O ext4 aprimorou-se com os avanços na pesquisa em sistema de arquivos, incorporando ideias de outros sistemas de arquivos inovadores (como XFS, JFS, Reiser e as técnicas do sistema de arquivos tolerante a falhas IRON). Embora seja muito cedo para saber o que virá com o ext5, ele sem dúvida estará na vanguarda dos sistemas Linux para as empresas.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=382565
ArticleTitle=Anatomia do Ext4
publish-date=02172009