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 artigoNã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. EsclarecimentosTodo 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
Outras informaçõesOs 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 vantagens1. Possui journaling. Há três níveis de operação do journaling disponíveis na implementação do ext3:
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:
Principais desvantagens
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
Principais desvantagens1. 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
Principais desvantagens
|
|
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
Principais desvantagens
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
Principais desvantagens
|
|
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 testeTrata-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 testeFoi 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 testeFiz 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 testeFiz 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 testeFiz 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 testeRemovi 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 testeFiz 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 testeRemovi 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 usoSe 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. |