Sistemas de arquivos para GNU/Linux

Introdução

Antes de começar a falar sobre os sistemas de arquivos, temos que ter em mente o que é um sistema de arquivos.

Sistema de arquivos é uma estrutura lógica que permite armazenar informações em massa e de forma bem organizada, permitindo que um Sistema Operacional ou aplicações possam ser usadas pelo computador, assim como gravar novas informações, e essas informações possam ser acessadas posteriormente.

Um sistema de arquivos depende de estruturas de dados sobre os arquivos. Uma dessas estruturas são os metadados de dados que descrevem os dados. Cada arquivo está associado com um inode, o qual é identificado por um número inteiro, muitas vezes referido como um número ‘i-‘, ou número de inode.

Inodes armazenam informações sobre arquivos e diretórios (pastas), tais como a propriedade do arquivo, modo de acesso (ler, escrever, executar permissões) e tipo de arquivo. Em muitos tipos de implementações de sistemas de arquivos, o número máximo de inodes é fixado no momento da criação do sistema de arquivos, limitando o número máximo de arquivos que o sistema de arquivos pode conter.

– Posso usar Sistema Operacional, ou alguma aplicação, sem ter que aplicar um sistema de arquivos?

Não, o disco rígido que armazena as informações é formatado fisicamente pelo fabricante, e esse tipo de formatação não faz com que o disco possa armazenar informações, porém, não se consegue utilizar o mesmo, pois ainda precisa de uma estrutura lógica para utilizar todo o espaço que o disco disponibiliza.

Objetivo do artigo

Não faz parte do objetivo do artigo fazer um estudo aprofundado sobre cada sistema de arquivos abordado, mas sim, abordar as características dos mesmos, permitindo conhecer mais de cada um.

Esclarecimentos

Todo e qualquer sistema de arquivos não é ANTI-FALHAS.

O mesmo não impede que sua estrutura de dados fique corrompida ou danificada após um desligamento inesperado causado por falta de energia, ou por travamento no sistema ou aplicação, fazendo com que você seja obrigado a usar o botão de desligamento ou de reinicialização.

E após desligar ou reinicializar desta forma, pode ter certeza que seu HD logo ficará com badblocks, principalmente se este tipo de situação acontecer constantemente. Não se impressione se o seu sistema, após um acontecimento destes, não conseguir mais ser acessado, ou precisar de reparos manuais para poder ser usado novamente.

O único sistema que ouvi falar bem quanto à tolerância de falhas, mas não cheguei a usar e nem a testar, foi o ZFS, desenvolvido pela Sun Microsystems.

Aí você pode se perguntar:

– Mas o que é um ‘badblock’ e por quê o sistema pode ficar corrompido, caso aconteça o que você citou acima?

1° – Um ‘badblock’ é uma área danificada de um disco que não pode ser mais utilizada, pois o dano é permanente.

Este tipo de dano pode ser causado por desligamentos forçados, como por exemplo, apertar o botão de desligamento da máquina, assim como reinicialização forçada, formatações erradas, esbarrões no HD, falta de energia etc.

Quando há muitos ‘badblocks’, seu HD está próximo do fim de sua vida útil, pois o mesmo está com muitos problemas.

2° – O sistema de arquivos pode ficar corrompido e o SO ficar inacessível, porque algum, ou alguns dados que estejam sendo utilizados pelo sistema no momento em que acontece o que foi citado anteriormente ainda não foram salvos, fazendo com que o mesmo fique incompleto, sendo assim corrompido. E se um arquivo deste for importante para o sistema, pode fazer com que o sistema fique inacessível.

Porém, muitos dos sistemas de arquivos tem tolerância de falhas, alguns mais consistentes e robustos que os outros.

Para os sistemas de arquivos usados no GNU/Linux, toda essa consistência tem ajuda do recurso muito utilizado que é o Journaling.

Journaling

Journaling é um recurso usado pelos sistemas de arquivos que consiste em uma área dedicada para registros, armazenando todas as ações que serão feitas nos arquivos, como gravação e/ou alteração de dados, por exemplo. Seja armazenamento somente de metadados, ou de metadados e dados de arquivos, permitindo restaurar o sistema de arquivos, caso aconteça algum erro inesperado.

A principal finalidade do ‘journaling’ é recuperar o sistema de arquivos de erros (tolerância de falhas), sejam eles causados pelo sistema, aplicações ou desligamentos incorretos de forma forçada ou inesperada.

Com isso é possível localizar todas as operações que não haviam sido completadas, restaurando a consistência do sistema de arquivos e permitindo que o sistema operacional continue sendo utilizado.

Aí você ainda fica com dúvida e pergunta: Mas como assim?

Com o ‘jounaling’, o sistema de arquivos passa a registrar em uma área especial chamada journal, ou log, as ações que serão feitas nos arquivos (gravação ou alteração de dados, por exemplo) antes da gravação no FS em si.

Após a execução, as operações registradas no log são tidas como concluídas e, portanto, eliminadas. Note que todo este procedimento acontece de maneira extremamente rápida.

Mas em que exatamente, o ‘journaling’ mostra-se vantajoso?

Os registros de log são escritos antes que as mudanças efetivamente ocorram no sistema de arquivos. Estes registros somente são eliminados quando as mudanças são executadas.

Se, por exemplo, o computador for desligado repentinamente (como ocorre em falta de energia elétrica), o sistema de arquivos verificará os registros existentes no ‘journal’ e executará aquilo que estiver marcado como não realizado. Isso faz com que o risco de perda de dados diminua drasticamente, já que o sistema operacional saberá ‘onde parou’.

Porém temos que ter em mente que este recurso não é anti-falhas e sim, um recurso para tolerar falhas até um certo ponto. Pois esta tolerância não previne 100% de erros como os citados anteriormente, toda essa tolerância a falhas pode acabar de uma hora para outra, após várias quedas de energia ou desligamentos forçados.

Contudo, nem todos os sistemas de arquivos que usam o ‘journaling’ possuem uma boa implementação do mesmo, fazendo com que este recurso não seja 100% confiável.

Se você começar a desligar o sistema incorretamente com frequência, vai perceber que, algumas vezes, o sistema não será capaz de verificar o ‘journal’, e o sistema de arquivos terá que ser verificado usando um utilitário para verificação da integridade do sistema de arquivos, tentando localizar todas as operações que não haviam sido completadas para tentar recuperar a integridade de alguns arquivos, fazendo com que, quase sempre, alguns arquivos sejam perdidos.

Técnicas de journaling

  • Journal Físico: Consiste em registrar uma cópia antecipada de todos os blocos de arquivos que serão posteriormente gravados no sistema de arquivo principal. Se houver uma falha quando o sistema de arquivos está gravando, a gravação pode simplesmente ser repetida até a conclusão, quando o sistema de arquivo for montado da próxima vez.

    Se houver uma falha quando a gravação está sendo registrado no journal, a gravação parcial terá um checksum ausente, ou incompatível, e pode ser ignorada na próxima montagem do sistema de arquivos.

  • Journal Lógico: Consiste em gravar apenas os metadados que sofrerão ações, tais como leitura/gravação e alteração dos arquivos. Um sistema de arquivos, com uma ‘journal’ lógico, ainda recupera-se rapidamente após um acidente, mas pode permitir que os dados não sejam recuperados devido a não gravação antecipada dos blocos do arquivo alterado ou em uso, causando corrupção de dados. Porém, isso aumenta o desempenho, nota-se mais isso na inicialização do sistema.

Outras informações

Os sistemas de arquivos para GNU/Linux: JFS, XFS, ReiserFS, ext3 e ext4, possuem ‘journaling’.

O arquivo de log do ‘journaling’ pode estar no mesmo sistema de arquivos, ou em um sistema de arquivos de outra partição, e/ou outro disco. E seu tamanho pode ser aumentado também para melhorar o desempenho.

Então o ‘journaling’ torna-se indispensável para os sistema de arquivos usados hoje e no futuro, pois é através deste recurso que temos uma certa tolerância a certos acontecimentos não planejados.

Sistema de arquivos ext3

O sistema de arquivos ext3 já está entre a comunidade GNU/Linux a muito tempo e ainda é bastante utilizado. O ext3 é uma atualização do sistema de arquivos ext2.

Em relação ao ext2, a principal diferença é a implementação do journaling, um recurso muito interessante abordado na segunda página deste artigo, que consiste no armazenamento de registros para posterior restauração das informações, caso aconteça algum erro.

Principais vantagens

1. Possui journaling. Há três níveis de operação do journaling disponíveis na implementação do ext3:

  • Modo de Operação Ordered (default): O journal é atualizado no final de cada operação. Isto faz com que exista uma pequena perda de desempenho, já que os dados são gravados duas vezes, uma no arquivo que foi alterado ou gravado, por exemplo, e outra no journal. O conteúdo dos blocos de cada dado não é armazenado no journal, porém, os metadados de cada arquivo são armazenados no journal antes dos dados serem escritos no disco, assim como marcação de alteração dos metadados dos arquivos.
  • Modo de Operação Writeback: O journal armazena apenas informações referentes à estrutura do sistema de arquivos (metadata) e não em relação aos arquivos propriamente ditos, e é gravado de forma mais ocasional, aproveitando os momentos de inatividade.

    Este modo é o mais rápido, mas em compensação oferece uma segurança muito menor contra perda e corrompimento de arquivos causados pelos desligamentos incorretos.

  • Modo de Operação Journal: Que é o mais seguro, porém, mais lento. Nele, o journal armazena não apenas informações sobre as ações sofridas, mas também uma cópia de segurança de todos os arquivos modificados, que ainda não foram gravados no disco. A cada alteração, o sistema grava uma cópia do arquivo (no journal), atualiza as informações referentes à estrutura do sistema de arquivos, grava o arquivo e atualiza novamente o journal, marcando a operação como concluída. Como disse, isso garante uma segurança muito grande contra perda de dados, mas em compensação, reduz o desempenho drasticamente. Justamente por causa disso, este é o modo menos usado.

O modo de operação padrão é o Ordered, porém não significa dizer que você não consiga mudar isso. Para usar o modo Writeback ou o modo journal, você deve adicionar a opção “data=writeback” ou “data=journal” nas opções referentes à partição, dentro do arquivo /etc/fstab ou usando o comando tune2fs.

2. Possui indexação de maior quantidade de diretórios;

3. Suporte para tamanhos maiores de volumes e arquivos em relação a sua versão anterior.

Veja abaixo uma tabela:

Tamanho do bloco   Tamanho máx. arquivo   Tamanho máx. fs
1 KiB                            16 GiB             2 TiB
2 KiB                           256 GiB             8 TiB
4 KiB                             2 TiB            16 TiB
8 KiB                            2 TiBsp           32 TiB

4. O ext3 ainda pode contar com algumas ferramentas para gerenciamento de sistema de arquivos extFS, tais como:

  • tune2fs
  • mke2fs
  • debugfs
  • e2fsck

Principais desvantagens

  • Funcionalidade: Como o ext3 visa uma grande compatibilidade com o ext2, muitas das estruturas on-disk são similares àquelas do ext2. Por causa disso o ext3 não possui muitas das funções mais recentes, como alocação dinâmica de inodes e tamanhos de blocos variáveis (fragmentos ou caudas).

    Os sistemas de arquivos ext3 não podem ser checados enquanto são montados para escrita. Um dump do sistema de arquivos feito enquanto ele está sendo montado para leitura e escrita pode resultar em dados corrompidos dentro do arquivo de dump.

  • Desfragmentação: Apesar de não fragmentar muito o disco na estrutura do ext3, não há uma ferramenta para desfragmentação online funcional em nível de sistema de arquivos.
  • Recuperação de dados deletados: Diferentemente do ext2, o ext3 zera os ponteiros de blocos nos inodes de arquivos apagados. Ele faz isso para simplificar o acesso de leitura e escrita quando o journal está sendo utilizado após uma montagem.

    Isso, no entanto, previne efetivamente que os arquivos sejam recuperados. Isso provê uma remoção de arquivos um pouco mais segura que em sistemas ext2, o que pode ser tanto uma vantagem quanto uma desvantagem.

  • Verificação do sistema de arquivos: O ext3 é considerado lento na verificação do sistema de arquivos.
  • Criação do sistema de arquivos: O ext3 é lento quando se aplica um sistema de arquivos, e se o disco tiver que marcar badblocks, demora mais ainda.

O sistema de arquivos ext3, apesar de possuir journaling, não foi desenvolvido desde o inicio para suportar o journal, e sim, foi integrado a partir da versão 3 do mesmo, por isso, o journal não é tão eficaz no ext3.

E quando o journal falha, ele faz uso do fsck para verificar a integridade do sistema de arquivos, e se o fsck não conseguir recuperar a integridade do mesmo, seu sistema de arquivos fica corrompido.

Para muitos, este sistema de arquivos é obsoleto e para outros estável, e tem um bom desempenho.

Sistema de arquivos ext4

O sistema de arquivos ext4 é última versão do sistema de arquivos extFS até o momento, ele é na verdade a atualização do ext3, já abordado no artigo.

O ext4 trouxe, de acordo com seus desenvolvedores, alguns recursos que não existiam no ext3, mantendo alguns que a versão anterior já possuía. Na verdade são recursos que estavam tentando implantar na versão 3 do extFS (ext3), porém, devido a alguns problemas na implementação, lançaram essa nova versão com as características descritas abaixo.

Principais vantagens

  • Possui journaling com aprimoramento de checksum.
  • Melhorias no journaling: Checagem no journaling, checksum aprimorado permitindo ao ext4 ter mais tolerância à falhas que o ext3 e restruturação mais rápida;
  • Suporte para tamanhos maiores de volumes e arquivos em relação à versão 3. O ext4 tem uma margem de 1024 PB (Petabytes) ou 1EB (Exabyte) para partições e 16 TB por arquivo. Isto pode não ser importante para desktops ou servidores simples, porém com certeza é útil para servidores grandes, configurados em Raid e de alta disponibilidade.
  • A indexação de quantidade de diretórios foi aumentada;
  • Suporte a recuperação de arquivos Undelete: Suporte à recuperação de arquivos, permitindo que arquivos seja recuperados.
  • Checagem rápida do sistema de arquivos: O fsck está mais rápido por que a nova estrutura de organização de blocos permite que partes não usadas do HD sejam puladas, o que economiza tempo numa eventual checagem.
  • Desfragmentação online: ext3 deixava os arquivos com um pouquinho, mas bem pouquinho de fragmentação. Agora não deixa mais. O ext4 vai desfragmentando enquanto os arquivos vão sendo alocados.
  • Melhorias na pré-alocação: Às vezes um programa vai usar um espaço do HD mas não na hora, então ele reserva o espaço que vai usar, fazendo uma pré-alocação, ou seja, ele guarda aquele espaço pra ele e ninguém mais pode usar, como se fosse uma reserva. Para essa ação, a maioria dos file systems enchem de zeros os inodes que eles vão reservar.

    Quando essa ação é executada milhares de vezes, como em um banco de dados, esse tempo de escritas de zeros geram um delay de tempo desnecessário. O ext4 vai permitir pré-alocação de arquivos sem fazer isso, o que vai garantir uma melhoria na performance, principalmente nas rotinas de bancos de dados e em ferramentas multimídia.

  • Tempo de alocação estendido: O ext4 vai conseguir manter a alocação do espaço em disco até o último momento, o que pode trazer mais performance.
  • Maior número de subdiretórios: O ext3 colocava um limite de subdiretórios ou pastas de 32000, se você achava isso um incômodo, os limites serão apenas o do espaço fornecido pelo disco.
  • Alocação tardia: ext4 usa uma técnica de execução do sistema de arquivos chamado allocate-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.
  • O ext4 ainda pode contar com algumas ferramentas para gerenciamento de sistema de arquivos extFS, tais como o tune2fs, mke2fs, debugfs e e2fsck.

Principais desvantagens

1. Alocação tardia e potencial perda de dados:

Com as mudanças de alocação atrasada, este recurso representa algum risco adicional de perda de dados nos casos em que o sistema trava antes que todos os dados tenham sido gravados no disco.

Devido a isto, o ext4, na versão 2.6.30 do kernel GNU/Linux, detecta automaticamente estes 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 sync.

2. Criação do sistema de arquivos:

Assim como no ex3, o ext4 é lento quando se aplica um sistema de arquivos, e se o disco tiver que marcar badblocks, demora mais ainda.

O sistema de arquivos ext4, apesar de possuir journaling, não foi desenvolvido desde o inicio para suportá-lo e este recurso foi integrado a partir da versão 3 do mesmo, por isso o journal não é tão eficaz, nem no ext3 e no ext4, apesar que o último mencionado teve melhorias.

E quando o journal falhar, ele faz uso do fsck para verificar a integridade do sistema de arquivos, e se o fsck não conseguir recuperar a integridade do mesmo, seu sistema de arquivos fica corrompido.

Atualmente o ext4 é bem rápido, tem um ótimo desempenho, mas seu journal pode deixar a desejar quanto à tolerância de falhas, apesar que o mesmo teve melhorias e resiste bem.

Sistema de arquivos XFS

O sistema de arquivos XFS é considerado por muitos de alto desempenho, é um sistema de arquivos de 64 bits sendo compatível com sistemas de 32 bits. Foi desenvolvido inicialmente para o SO IRIX, depois portado para o kernel GNU/Linux.

O kernel e a maioria dos sistemas GNU/Linux dão suporte durante a instalação para usar o XFS como sistema de arquivos de suas partições, e assim, como os outros sistemas de arquivos apresentados até agora, possui journaling.

Principais vantagens

  • Possui journaling em sua estrutura, porém o journal no XFS se comporta de forma similar a outros sistemas de arquivos, mantendo somente a gravação dos metadados dos arquivos no journaling, fazendo com que a consistência do sistema de arquivos como um todo fique preservada.

    Diferente do que faz outros sistemas de arquivos, que se um arquivo ficar corrompido, o sistema fica inacessível, porém, se um arquivo estiver sendo usado e as alterações nos metadados não forem gravadas antes de um erro ou falha (falta de energia por exemplo), poderá ficar corrompido, já que seu conteúdo não foi salvo e os metadados não foram colocados no journal antes da gravação do arquivo no sistema de arquivos.

  • É um sistema de arquivos de 64 bits compatível com sistemas de 32 bits também.
  • Em sistemas 64 bits há um limite de tamanho de 8 EiB para cada arquivo, já em sistema de 32 bits o tamanho máximo do volume ou arquivo é limitado a 16 TiB.
  • Tamanhos de blocos variáveis: Tamanho de blocos do sistema representa a unidade de alocação mínima. XFS permite que o sistema de arquivos seja criado com tamanhos de blocos que variam entre 512 bytes e 64 kilobytes, permitindo que o sistema de arquivos ajuste-o para o uso esperado.

    Quando está trabalhando com muitos arquivos pequenos, um tamanho de bloco pequeno é o ideal, mas para um sistema lidando principalmente com arquivos grandes, um tamanho de bloco maior pode proporcionar uma vantagem quanto ao desempenho.

  • A desfragmentação online: Embora o XFS use alocação com atraso, isso melhora significativamente a resistência do sistema de arquivos para os problemas de fragmentação. XFS fornece um utilitário de desfragmentação que pode desfragmentar os arquivos com o sistema de arquivos em uso.
  • A criação do sistema de arquivos XFS é muito rápida.
  • Redimensionamento online: XFS oferece a ‘xfs_growfs’, utilitário para executar o redimensionamento online de sistemas de arquivos XFS.

    Espaço onde se encontra o sistemas de arquivos XFS podem ser alterados desde que haja espaço restante não alocado no dispositivo para adicionar ao XFS. Este recurso é normalmente usado em conjunto com o gerenciamento de volume, caso contrário a partição que mantém o sistema de arquivos terá que ser ampliada separadamente.

  • Utilitários para gerenciamento do sistema de arquivos inclusos no xfsprogs, tais para checagem do mesmo, aplicação do sistema de arquivos, ajustes no sistema de arquivos entre outros.
  • Cotas de disco: Cotas para sistemas de arquivos XFS são ativadas quando o sistema de arquivos é montado, diferente de outros sistemas de arquivos que na maioria exigem serem montados primeiro para depois ativar a quota com o quotaon.
  • Trabalha muito bem com arquivos grandes (leitura e gravação), principalmente em sistemas que armazenam muitos arquivos de grande tamanho. Lembre-se o XFS foi desenvolvido para trabalhar em grandes sistemas, principalmente de 64 bits.

Principais desvantagens

  • Redimensionamento do XFS não pode ser usado para diminuir o tamanho do mesmo, apenas aumentar.
  • Operações usando metadados em XFS são muito lentas do que com outros sistemas de arquivos, produzindo mau desempenho em operações como deleções em massa de grandes números de arquivos pequenos.
Sistema de arquivos ReiserFS

O sistema de arquivos ReiserFS foi criado por Hans Reiser e pode ser usado pelas distribuições GNU/Linux, sendo que algumas dão bom suporte durante a instalação e outras não. Sua versão atual é a 3.6.x. O ReiserFS foi o primeiro sistema de arquivos com suporte a journaling incluído no núcleo do GNU/Linux.

Algo muito interessante no ReiserFS é suporte ao journaling implantado desde o início e não depois de ter sido desenvolvido (como foi feito no extFS). Isso garante que o ReiserFS trabalhe melhor com o journal, possibilitando uma tolerância contra falhas mais eficaz.

Principais vantagens

  • Suporte a journaling, o mesmo foi integrado desde de seu desenvolvimento. Diferentemente do que acontece no ext3 e ext4, que foi implementado em versões posteriores após o desenvolvimento da primeira versão.

    O extFS permite trabalhar em vários modos de operação, já no ReiserFS é importante frisar que as técnicas de journaling limitam-se, por padrão, aos metadados (conjuntos de informação sobre arquivos, como tamanho, proprietário, permissões, data de alteração etc). Contudo, o usuário poderá alterar seu modo de operação para journal ou writeback, pois o ReiserFS também suporta os três modos de operação assim como no extFS, versão 3 e 4. Como o journaling está presente desde o inicio, faz com que esse sistema de arquivos seja eficiente na recuperação do sistema operacional como um todo em caso de problemas.

    No caso de um desligamento incorreto do sistema, o ReiserFS é capaz de recuperar a consistência do sistema de arquivos em pouco tempo e a possibilidade de perda de pastas ou partições é reduzida.

    Em compensação, os arquivos que eventualmente estiverem sendo gravados no exato momento em que acabou a energia, ficarão com seus dados corrompidos, haverá acesso aos arquivos normalmente, mas o conteúdo estará truncado ou incompleto.

  • Organização dos objetos do sistema de arquivos em uma estrutura de dados chamada B+Trees (árvores B+). Neste esquema, os dados são fixados em posições organizadas por divisões denominadas folhas.

    As folhas por sua vez são organizadas por nós, chamados de sub-árvores, que estão ligados a um nó raiz. Esse processo organizacional é mais complexo, porém apresenta performance superior na gravação e no acesso aos dados se comparado a outros sistemas de arquivos.

  • Alocação dinâmica de inodes (em poucas palavras, inodes são estruturas que contém informações sobre os arquivos), diminuindo o desperdício de espaço. Outros sistemas de arquivos têm blocos de tamanho fixo para alocação, assim, se não for necessário usar um bloco inteiro, o espaço restante fica em desuso. No ReiserFS a alocação é feita com base no tamanho do arquivo.
  • ReiserFS tem progsreiserfs, que é um conjunto de utilitários para gerenciamento de sistema de arquivos, para checagem, formatação, depuração etc.
  • A formatação em ReiserFS é muito rápida.

Principais desvantagens

  • Uma desvantagem do ReiserFS é seu consumo de CPU muito elevado, chegando a usar até 99% quando a atividade de disco é elevada.
  • O futuro do ReiserFS é atualmente dado como incerto, em virtude da prisão, em 10 de Outubro de 2006, de Hans Reiser, seu criador, e sua condenação em 28 de Abril de 2008 pelo assassinato de sua mulher no início de Setembro de 2006.

Atualmente, devido à paralisação das atividades da Namesys, que é sua principal desenvolvedora junto com Hans Reiser, o projeto ReiserFS está armazenado em kernel.org.

O ReiserFS tem um nova versão, que é a 4, mas a mesma ainda não está inclusa no kernel versão 3.x.x, que atualmente é 3.4.2 no momento da criação deste artigo, pois os desenvolvedores afirmam que o Reiser4 não segue o padrão GNU/Linux de decodificação.

Para mais informações sobre o Reiser4, acesse link:

Sistema de arquivos JFS

O JFS foi criado com o propósito principal de ser utilizado em servidores que deveriam usar poucos recursos do processador, e ser capaz de ser redimensionado mesmo em uso. JFS é um sistema de 64 bits, assim como XFS, onde existem duas versões: JFS1 e JFS2. No pinguim é usada a versão 2.

JFS está disponível na maioria das distros, assim como outros, mas durante a instalação o FS padrão, em sua maioria, é o ext4.

Principais vantagens

  • Reparação muito eficaz de um disco com badblocks, ele consegue marcar os setores defeituosos com muita precisão, algo que outros sistemas de arquivos para Linux não fazem.
  • Criação do sistema de arquivos muito rápida, desde que não inclua para marcar os badblocks existentes do disco, pois se fizer isso vai demorar bastante.
  • Possui vários utilitários para gerenciar o sistema de arquivos, todos eles inclusos no jfsutils, para aplicação e verificação de integridade do sistema de arquivos.
  • Baixo consumo do processador.
  • Suporte a journaling: O JFS usa um journal para manter somente a consistência dos metadados, ou seja, grava somente os metadados dos arquivos que sofrerão ações como modificação, por exemplo. Assim, apenas consistência de metadados (e não o conteúdo de arquivo) pode ser assegurado no caso de desligamento inadequado. Este é também o comportamento de XFS . Ext3 e ext4, por outro lado, usam o journal para gravar os metadados e os dados, apesar de ter outros modos de operação.
  • Alocação dinâmica de inodes: JFS aloca dinamicamente espaço em disco.

Principais desvantagens

  • Taxas de transferências baixas, nunca espere transferências com alta velocidade, pois o mesmo é lento.
  • Foi desenvolvido com o propósito principal de trabalhar com arquivos grandes e não trabalha bem com arquivos pequenos. Na criação e desempacotamento de arquivos sua velocidade é baixa.
  • O tamanho de uma partição e arquivo com o sistema de arquivos JFS aplicado só abriga 2 terabytes de espaço no total.
Benchmark básico dos sistemas de arquivos

Depois de tantas informações sobre cada sistema de arquivos abordado, você pode ficar com, no mínimo, um pouco de curiosidade de saber o desempenho de cada um deles em teste.

Aqui vou mostrar vários gráficos que comparam o desempenho de cada um, trata-se de benchmark básico.

ESCLARECIMENTO: Para este Benchmark não fiz otimização em nenhum dos sistemas de arquivos, todos foram instalados com suas opções padrões. O SO usado para testar foi o Debian 6, rodando em uma máquina com processador Intel Core 2 Duo e espaço em memória de 4 Gigas, além de um disco SATA Samsung.

Todos os testes não informam o uso de CPU, apenas o tempo que foi necessário para concluir a tarefa, e foram feitos em modo texto.

Primeiro teste

Trata-se de criar um arquivo de 10 Gigabytes de tamanho em cada sistema de arquivos usando o comando dd, todos concluíram o teste em minutos. Veja o resultado no gráfico abaixo:

Neste teste o mais veloz foi ext4, seguido de ext3 e logo depois XFS, seguido de ReiserFS e em último ficou o JFS.

Segundo teste

Foi desempacotado um arquivo do kernel 3.4 com tamanho de 77 Megas e todos concluíram a tarefa em menos de um minuto, ou seja, concluíram em segundos. Veja o resultado no gráfico abaixo:

Neste segundo teste, ext4 também foi mais rápido, mas a diferença não foi tanta para ext3 e ReiserFS, XFS veio logo atrás, e no último lugar, mais uma vez ficou JFS.

Terceiro teste

Fiz uso de um script para criar 30 mil arquivos de texto simples, sem conteúdo, e todos concluíram o trabalho em poucos segundos, veja o resultado no gráfico abaixo:

Nesta terceira rodada, o mais rápido foi ReiserFS, seguido de pertinho por ext4 e ext3, e mais uma vez, JFS foi o mais lento.

Quarto teste

Fiz uma listagem de todos os 30 mil arquivos criados no teste anterior, e mais uma vez todos concluíram em poucos segundos. Veja o resultado no gráfico abaixo:

Nesta rodada, o ext3 foi muito mais rápido que os outros, concluindo o trabalho em menos de um segundo, logo depois veio ext4, ReiserFS, JFS e XFS, com pouco tempo de diferença entre eles.

Quinto teste

Fiz a remoção de todos os 30 mil arquivos criados anteriormente, e mais uma vez todos concluíram o teste em menos de um minuto, veja o resultado no gráfico abaixo:

Neste teste o mais rápido foi ext4, seguido de ext3 e ReiserFS, o mais lento foi XFS, aliás, muito lento em comparação com os outros.

Sexto teste

Removi o diretório do kernel 3.4 e todos seus arquivos e subdiretórios criados após a descompactação, e o teste foi concluído em segundos. Veja o resultado no gráfico abaixo:

Neste teste o ext3 e ext4 foram absurdamente mais rápidos, respectivamente, com um pouquinho de tempo a mais, o ReiserFS demostrou muita velocidade. O JFS foi muito lento.

Sétimo teste

Fiz uso de um script para criar 30 mil diretórios vazios e a tarefa levou menos de um minuto para ser concluída, mais uma vez (foi concluída em segundos). Veja o resultado no gráfico abaixo:

Neste teste houve um certo equilíbrio na velocidade de término de tarefa de cada um, dupla exts foram um pouco mais velozes que ReiserFS e JFS, e XFS foi o mais lento mais um vez.

Oitavo teste

Removi os diretórios criados e o término da tarefa foi em segundos também:

Neste último teste os sistemas de arquivos ext4, ext3 e ReiserFS foram absurdamente mais rápidos, acabando a tarefa em menos de um segundo cada.

Você pode ver também um benchmark feito pela Phoronix acessando o link abaixo:

Nota-se neste benchmark básico realizado por mim, que os sistemas mais velozes foram ext4 e ext3, seguido do ReiserFS e depois XFS e por último, o JFS.

Tenho que levar em conta que não foi feito nenhum tipo de personalização no sistema de arquivos aplicado, tal como: aumento de tamanho do arquivo do journaling, ou journaling externo, por exemplo. Ou seja, nenhum sistema de arquivos foi turbinado.

Considerações finais

Todos os testes realizados e mostrados na página anterior foram baseados na velocidade de término de cada tarefa, contudo, não faça a escolha do sistema de arquivos somente pelo desempenho, leve em consideração as características positivas e negativas de cada um.

Quando o assunto é sistema de arquivos no GNU/Linux, é inevitável as comparações entre o ReiserFS, XFS, ext4 e o ext3, além do JFS, que é menos usado. Nada mais natural, afinal, cada administrador de sistemas e ou redes e até mesmo usuários busca qual é o melhor para suas necessidades.

Apontar qual realmente é melhor não é uma tarefa fácil. Há vários comparativos na Internet que tentam oferecer esta resposta, mas na minha opinião, a melhor coisa a fazer é testar os sistemas de arquivos que lhe atraíram para definir qual mais lhe agrada.

Definitivamente, o uso de sistemas de arquivos sem suporte a journaling, ou algum recurso similar, para tolerância de falhas e erros não é recomendável de usar, pois pode deixá-lo na mão.

NOTA: Não incluí o Btrfs, pois o mesmo é considerado instável e não é aconselhável o seu uso em produção, e ainda está em desenvolvimento constante para ser aprimorado.

Se deseja mais informações sobre o mesmo, leia o artigo:

Recomendação de uso

Se quer desempenho, recomendo ext4, pois o mesmo mostra-se muito rápido, e o suporte dele no kernel (usado como default nas instalações até então de muitas distros) é muito bom. E ext3, que apesar de ser considerado obsoleto por muitos, é bem estável e ainda é rápido também, porém, o mesmo não tem tanta eficácia com o journaling (como explicado durante o artigo).

Para isso recomendo ReiserFS e XFS, pois estou usando-os a um bom tempo, e os mesmos até o momento não apresentaram nenhum problema, mesmo já passando por desligamentos inesperados e ambos terem um desempenho muito bom, cada um com suas vantagens. XFS trabalha melhor com arquivos grandes e ReiserFS com arquivos pequenos.

São apenas recomendações, porém, recomendo que teste e veja qual é o que mais o agrada no quesito que deseja e necessita.

Concluindo, menciono mais uma vez que o journal é para tolerar falhas e erros, e não protege 100% contra perda de dados.

Rolar para cima