Anatomia dos Sistemas de Arquivos de journaling do Linux

Registro de Mudanças Hoje e Amanhã

Na história recente, os sistemas de arquivos com registro de mudanças eram vistos como algo inusitado e um conceito original em termos de pesquisa. Hoje, porém, um sistema de arquivos com registro de mudanças (ext3) é padrão no Linux ®. Descubra as ideias por trás do sistema de arquivos com registro de mudanças e saiba como elas fornecem melhor integridade no caso de perda de energia ou travamento do sistema. Conheça os vários sistemas de arquivos com registro de mudanças atualmente em uso e dê uma rápida olhada na nova geração de sistemas de arquivos com registro de mudanças.

M. Tim Jones, Consultant Engineer, Emulex Corp.

M. Tim JonesM. 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

04/Jun/2008

É possível definir os sistemas de arquivos com registro de mudanças de várias formas, mas vamos direto ao ponto. Os sistemas de arquivos com registro de mudanças destinam-se às pessoas que estão cansadas de esperar o tempo de inicialização fsck ou o processo de verificação de consistência do sistema de arquivos. (Sistemas de arquivos com registro de mudanças destinam-se também a qualquer pessoa que goste da ideia de ter um sistema de arquivos resistente a falhas.) Quando um sistema que usa um sistema de arquivos tradicional, sem registro de mudanças, é encerrado de forma inadequada, o sistema operacional detecta essa ocorrência e efetua uma verificação de consistência com o utilitário fsck. Esse utilitário faz uma varredura do sistema de arquivos (o que pode levar bastante tempo) e corrige qualquer problema que possa ser corrigido com segurança. Em alguns casos, o sistema de arquivos pode estar comprometido de tal forma que o sistema operacional inicialize no modo de um único usuário, permitindo ao usuário efetuar mais tarde o processo de reparo.

Pronunciando fsck

Para piorar ainda mais, o processo fsck pode ser iniciado automaticamente pelo sistema operacional no momento da montagem, a fim de garantir que os metadados do sistema de arquivos estejam corretos (mesmo que não haja nenhum dano). Portanto, remover a necessidade de verificações de consistência do sistema de arquivos é uma área obviamente sujeita a aprimoramentos.

Bem, agora sabe-se para quem os sistemas de arquivos com registro de mudanças foram criados, mas como foi prevista a necessidade de um fsck? Em geral, sistemas de arquivos com registro de mudanças evitam a corrupção do sistema de arquivos mantendo um diário. Esse diário é um arquivo especial que registra as modificações para o sistema de arquivos em um buffer circular. Em intervalos periódicos, o diário é guardado no sistema de arquivos. Se ocorrer um travamento, o diário pode ser utilizado como um ponto de verificação para recuperar informações que não foram salvas e evitar que os metadados do sistema de arquivos sejam corrompidos.

Resumindo, os sistemas de arquivos com registro de mudanças são sistemas de arquivos resistentes a falhas que usam um diário que registra as alterações antes que elas sejam guardadas no sistema de arquivos para evitar que os metadados sejam corrompidos (consulte a Figura 1). Mas como muitas soluções Linux, existe mais de uma opinião disponível. Vamos percorrer rapidamente o histórico do sistema de arquivos com registro de mudanças e, em seguida, rever os sistemas de arquivos disponíveis e suas diferenças.

O que São Metadados?

Metadados referem-se às estruturas de gerenciamento de dados em um disco. Eles representam a criação e a remoção de arquivos e de diretórios, a ampliação de um arquivo, o truncamento de um arquivo e assim por diante.

Figura 1. Um típico Sistema de Arquivos com Journaling
Um Sistema de Arquivos com Registro de Mudanças Típico

Histórico do Sistema de Arquivos com Registro de Mudanças no Linux

O primeiro sistema de arquivos registrado foi o IBM® Journaled File System (JFS). O JFS foi lançado em 1990, mas a atual versão a qual o Linux dá suporte é a JFS2, desenvolvida posteriormente. Em 1994, a Silicon Graphics introduziu o XFS de alto desempenho para o sistema operacional IRIX. O XFS foi inserido no Linux em 2001. Embora o Smart File System (SFS) tenha sido desenvolvido para Amiga em 1998, foi então lançado sob o GNU Lesser General Public License (LGPL) e, em 2005, recebeu suporte em Linux. O sistema de arquivos com registro de mudanças mais frequentemente usado, o ext3fs (ou terceiro sistema de arquivos estendido) é uma extensão do ext2 com recursos de registro de mudanças. O ext3fs vem recebendo suporte em Linux desde 2001. Até que, ao ser introduzido, o sistema de arquivos com registro de mudanças ReiserFS realçou muitas avaliações, e teve grande aceitação. Sua evolução foi agora interrompida por conta de questões legais envolvendo seu autor original.


Variações no Registro de Mudanças

Os sistemas de arquivos com registro de mudanças utilizam um diário para armazenar em buffer as alterações no sistema de arquivos (o que também é usado na recuperação de danos), mas pode utilizar estratégias diferentes para quando e o que terá registro de mudanças. Três das estratégias mais comuns são os modos nova gravação, solicitado e dados.

No modo nova gravação, somente os metadados são submetidos ao registro de mudanças e os blocos de dados são gravados diretamente em seus locais no disco. Isso preserva a estrutura do sistema de arquivos e evita a corrupção, mas a corrupção de dados pode ocorrer (por exemplo, se o sistema trava depois do registro de mudanças dos metadados, mas antes da gravação do bloco de dados). Para solucionar esse problema, é possível usar o modo solicitado. O modo solicitado é apenas o registro de mudanças de metadados, mas grava os dados antes desse registro de mudanças. Dessa maneira, garante-se a consistência dos dados e do sistema de arquivos depois de uma recuperação. Por fim, o registro de mudanças de dados também pode receber suporte. No modo dados, tanto os metadados quanto os dados passam pelo registro de mudanças. Este modo oferece a maior proteção que existe contra corrupção do sistema de arquivos e perda de dados, mas pode perder em desempenho, pois todos os dados são gravados duas vezes (primeiro no diário, depois no disco).

A política de transmissão do diário também pode se distinguir em várias abordagens. Por exemplo, o diário é transmitido quando se encontra quase cheio ou durante um tempo de espera?


Sistemas de Arquivos com Registro de Mudanças Hoje

Hoje, vários sistemas de arquivos com registro de mudanças são usados ativamente. Cada um tem seus benefícios e suas desvantagens. A seguir, os quatro sistemas de arquivos com registro de mudanças mais populares e disponíveis atualmente.

JFS2

JFS2 (também chamado de sistema de arquivo com registro de mudanças aprimorado) foi o primeiro sistema de arquivos com registro de mudanças, já sendo usado há muitos anos no sistema operacional IBM AIX® antes de passar para o Linux. O JFS2 é um sistema de arquivos de 64 bits que, embora se baseie no JFS original, foi aprimorado para ser mais escalável e oferecer suporte a arquiteturas com vários processadores.

O JFS2 oferece suporte de alto desempenho ao registro de mudanças solicitado com uma recuperação do sistema de arquivos em subsegundo. O JFS2 também fornece alocação de arquivo baseada em extensão para desempenho. Alocação baseada em extensão significa que, em vez de único bloco, é alocado um conjunto adjacente de blocos. Como esses blocos são adjacentes no disco, apresentam melhor desempenho de leitura e gravação. Uma vantagem a mais da alocação baseada em extensão é a redução do gerenciamento de metadados. Alocar espaço por bloco significa que os metadados são atualizados por bloco. Ao utilizar uma extensão, os metadados são apenas atualizados quanto à extensão (o que pode representar muitos blocos).

O JFS2 também utiliza as árvores B+ para buscas rápidas no diretório, bem como gerenciamento de descritores de extensão. O JFS2 não apresenta política de transferência de diário interno, mas conta com o tempo de espera do daemon kupdate.

XFS

O XFS é mais um dos primeiros sistemas de arquivos com registro de mudanças desenvolvido originalmente pela Silicon Graphics para o sistema operacional IRIX em 1995. O XFS foi inserido no Linux em 2001 e, portanto, já era desenvolvido e confiável.

O XFS oferece suporte ao endereçamento de 64 bits e fornece desempenho bastante elevado utilizando árvores B+ tanto para a alocação de diretórios quanto de arquivos. O XFS também usa alocação baseada em extensão com suporte a tamanhos de blocos variáveis (de 512 bytes a 64KB). Junto com as extensões, o XFS usa alocação com atraso, na qual a alocação dos blocos do disco é atrasada até que os blocos sejam gravados no disco. Essa funcionalidade aprimora as opções de alocação de blocos sequenciais de discos, pois o número total necessário já será conhecido.

Outras propriedades interessantes do XFS são a taxa garantida de entrada/saída (E/S —por meio de uma reserva de largura de banda para usuários do sistema de arquivos) e E/S direta, na qual os dados são copiados diretamente entre o disco e o buffer de espaço do usuário (em vez de serem armazenados por meio de vários buffers). O XFS usa a política com registro de mudanças no modo nova gravação.

Terceiro Sistema de Arquivos Estendido (ext3fs)

O terceiro sistema de arquivos estendido (ext3fs) é o sistema de arquivos com registro de mudanças mais popular e é a evolução do conhecido sistema de arquivos ext2. O Ext3fs é, na verdade, compatível com o ext2fs, porque o ext3fs utiliza a mesma estrutura do ext2fs, simplesmente incluindo um diário. Pode-se até mesmo montar uma partição ext3fs como se fosse um sistema de arquivos ext2 ou converter um sistema de arquivo ext2 em ext3 (com o utilitário tune2fs).

Embora o ext3fs permita três tipos de registro de mudanças (nova gravação, solicitado e dados), ele utiliza o modo solicitado como padrão. A política de transferência do diário é configurável, mas, por padrão, se baseia no preenchimento de 1/4 do diário ou por meio do tempo limite de um dos timers de transferência.

Uma das principais desvantagens do ext3fs é não ter sido elaborado desde o começo como um sistema de arquivos com registro de mudanças. Por ser baseado no ext2fs, ele não apresenta alguns dos recursos avançados mais recentes encontrados em outros sistemas de arquivos com registro de mudanças (como as extensões). Normalmente, o desempenho também é pior quando comparado ao ReiserFS, ao JFS e ao XFS, mas exige menos CPU e memória do que as soluções da concorrência.

ReiserFS

O que É um Pacote tail?

Muitas vezes, há arquivos cujo tamanho é menor do que o de um bloco lógico. Em vez de desperdiçar espaço alocando um bloco lógico em cada arquivo pequeno (chamado tail), vários arquivos são empacotados dentro de um único bloco lógico. Descobriu-se que essa estratégia aumenta em 5% o espaço em disco em relação aos sistemas de arquivos da concorrência (com redução de desempenho).

O ReiserFS é um sistema de arquivos com registro de mudanças desenvolvido e pensado totalmente para o registro de mudanças. Foi introduzido em 2001 no kernel principal 2.4 (primeiro sistema de arquivos com registro de mudanças adotado pelo Linux). O método padrão de registro de mudanças é solicitado e oferece suporte on-line para escalar o crescimento do sistema de arquivos. O ReiserFS também incluía o pacote tail para reduzir dinamicamente a fragmentação. Em arquivos menores, o ReiserFS tende a ser bem mais rápido que o ext3fs (quando o pacote tail está ativado).

O ReiserFS (também chamado ReiserFS v3) inclui muitos recursos modernos, como árvores B+. O formato fundamental do sistema de arquivos baseia-se em uma única árvore B+, tornando as operações de procura eficientes e bastante escaláveis. A política de transmissão depende do tamanho do diário, mas se baseia no número de blocos a serem transmitidos.

O ReiserFS enfrentou muitos problemas—recentemente, por questões legais de seu autor (consulte Recursos para obter detalhes).


Sistemas de Arquivos com Registro de Mudanças Amanhã

Vistos os sistemas de arquivos com registro de mudanças de hoje (e ontem), vejamos agora o que o futuro nos reserva (e não reserva).

Reiser4

Depois do êxito do ReiserFS em sua fusão com o kernel Linux e sua aceitação por vários distribuidores Linux, a Namesys (empresa por trás do ReiserFS) começou a trabalhar em um novo sistema de arquivos com registro de mudanças. O Reiser4 foi elaborado desde o começo como um novo sistema de arquivos com registro de mudanças, com vários recursos avançados.

O Resier4 foi planejado para ter um registro de mudanças melhor, utilizando logs móveis e uma alocação atrasada de blocos até que o diário fosse transmitido (como no caso do XFS). O Reiser4 também foi elaborado com uma arquitetura flexível de plug-in (para dar suporte a recursos como compactação e criptografia) mas foi rejeitado pela comunidade Linux, pois esses recursos eram visualizados melhor no Sistema de Arquivos Virtual (VFS).

Desde a condenação do proprietário da Namesys, todas as atividades comerciais do Reiser4 foram interrompidas.

Quarto Sistema de Arquivos Estendido

O quarto sistema de arquivos com registro de mudanças estendidos (ext4fs) é a evolução do ext3fs. O sistema de arquivos ext4 foi elaborado como um substituto compatível com versões anteriores e futuras do ext3fs, mas com muitos recursos avançados novos (alguns dos quais quebram a compatibilidade). Ou seja, é possível montar uma partição ext4fs como se fosse ext3fs ou vice-versa.

Primeiro, o ext4fs é um sistema de arquivos de 64 bits e foi elaborado para oferecer suporte a volumes bastante grandes (1 exabyte). Ele também foi elaborado para usar extensões, mas se estas forem utilizadas, perde-se a compatibilidade com o ext3fs. Como o XFS e o Reiser4, o ext4fs inclui alocação com atraso para alocar blocos no disco somente quando necessário (o que reduz a fragmentação). O conteúdo do diário também passa por uma soma de verificação para tornar o diário mais confiável. Em vez da árvore padrão B+ ou B*, o ext4fs usa uma variação da árvores B, denominada árvore H, que permite subdiretórios muito maiores (o ext3 era limitado a 32KB).

Embora o método de alocação com atraso reduza a fragmentação, com o passar do tempo, um sistema de arquivos grande pode ficar fragmentado. Para resolver isso, uma ferramenta de desfragmentação on-line (e4defrag) foi desenvolvida. É possível utilizá-la para desfragmentar arquivos individuais ou sistemas de arquivos completos.

Outra diferença interessante entre o ext3fs e o ext4fs é a resolução de dados para arquivos. No ext3, a resolução mínima para registro de data e hora era um segundo. O ext4fs enxerga o futuro: onde as velocidades de processador e de interface continuam a crescer, é necessária melhor resolução. Por isso, a resolução mínima para registro de data e hora no ext4 é 1 nanossegundo.

O ext4fs tem estado presente no kernel Linux desde a versão 2.6.19, mas ainda não é estável. O desenvolvimento continua nesta nova geração; por conta de sua herança, será a nova geração de sistemas de arquivos com registro de mudanças no Linux.


Indo Além

Os sistemas de arquivos com registro de mudanças oferecem confiabilidade e proteção contra danos no caso de travamento do sistema ou queda de energia. Além disso, o tempo de recuperação do dano em sistemas de arquivos com registro de mudanças foi drasticamente reduzido, quando comparado a métodos mais tradicionais de sistemas de arquivos (como os que contam com fsck). O desenvolvimento de novos recursos de registro de mudanças continua a buscar o futuro através de novos algoritmos e estruturas, assim como olha para trás, onde os recursos JFS e XFS foram incorporados. Não se sabe como evoluirão os sistemas de arquivos com registro de mudanças no futuro, mas sua utilidade é nítida e eles são o novo sistema de arquivos padrão.

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=382567
ArticleTitle=Anatomia dos Sistemas de Arquivos de journaling do Linux
publish-date=06042008