Introdução ao sistema de arquivos ReiserFS

Introdução

O sistema operacional GNU/Linux (por comodidade, neste artigo o chamaremos somente de Linux) é muito abrangente no que se refere à compatibilidade com sistemas de arquivos (ou filesystems) variados. A maioria dos usuários de Linux o instalam em partições ext3 e ReiserFS (além de outras menos conhecidas), sendo que este último vem ganhando cada vez mais notoriedade. Prova disso, é que ele já tem até um sucessor, o Reiser4. Mas, o que é que o ReiserFS tem de vantajoso? Quais são as suas principais características? Quais as suas desvantagens? As respostas para essas perguntas você encontra no decorrer deste artigo.


O que é um sistema de arquivos?

Antes de conhecer o ReiserFS em si, é conveniente saber o que é um sistema de arquivos. Em poucas palavras, trata-se de uma estrutura que indica como os dados devem ser gravados em dispositivos de gravação. É de acordo com os recursos oferecidos por essa estrutura que é possível determinar o espaço disponível e ocupado em disco, e gerenciar como partes de um arquivo podem ficar "distribuídas" nas áreas de armazenamento. É também o sistema de arquivos que determina como os dados podem ser acessados, copiados, movidos, renomeados, protegidos e eliminados. Portanto, sem um sistema de arquivos, é impossível utilizar um disco rígido (e outros dispositivos) para armazenamento de informações.


O sistema de arquivos ReiserFS

Principais características

O sistema de arquivos ReiserFS teve sua primeira aparição no ano de 2001 pelas mãos de Hans Reiser (daí o nome do padrão), que também montou uma equipe de nome NAMESYS para gerenciar os trabalhos do projeto. Desde então, o ReiserFS vem sendo cada vez mais utilizado, principalmente por estar disponível como padrão em muitas das distribuições Linux, fazendo frente ao sistema de arquivos ext3.

A boa aceitação do ReiserFS é devida ao seu conjunto de características, que o tornam um sistema de arquivos seguro, eficiente, rápido e confiável. Entre seus principais recursos, tem-se:

- Journaling, um recurso que ajuda a manter a integridade dos dados em caso de erros no sistema causados por desligamento incorreto ou determinadas falhas de hardware, por exemplo. O journaling é uma das características mais importantes do ReiserFS, motivo pelo qual é explicado com mais detalhes adiante;

- Suporte a arquivos com mais de 2 GB (limitação existente em alguns filesystems);

- Organização dos objetos do sistema de arquivos em uma estrutura de dados chamada B+Trees (árvores B+). Nesse esquema, os dados são fixados em posições organizadas por divisões denominadas folhas. Por sua vez, as folhas são organizadas por nós ou ponteiros chamados de sub-árvores, que estão ligados a um nó raiz (ver ilustração abaixo para entender melhor). Esse processo organizacional exige algoritmos mais complexos, porém apresenta performance superior na gravação e no acesso aos dados, se comparado a outros sistemas de arquivos;

Esquema de árvores - ReiserFS

- 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.

Organização

O ReiserFS tem como referência o já mencionado esquema B+Trees para organizar e localizar os itens que compõem, em sua essência, todo o sistema de arquivos, isto é, os dados em si e as informações associadas (data de criação, permissões de acesso, proprietário, etc). Basicamente, todos esses itens são classificados em diretórios (directory items), blocos de dados diretos e indiretos (direct items / indirect items) e inodes (stat data items).

Nos inodes é que são classificadas as informações referentes a cada arquivo, isto é, os metadados. Os direct items são os arquivos em si, mas quando armazenados nas "folhas" das sub-árvores e, embora tenham tamanho variável, são compostos por blocos de dados pequenos. Os direct items ficam próximos aos metadados, já que tanto um como o outro são organizados nas árvores. Já os blocos maiores, isto é, os indirect items, não são incluídos nas árvores (por isso recebem esse nome) e são "localizáveis" por ponteiros que indicam onde estão armazenados.

Todo esse esquema acaba fazendo com que o espaço em disco seja melhor aproveitado no ReiserFS. Por outro lado, também há desvantagens, já que pode causar maior fragmentação de dados, assim como exigir mais recursos de processamento.


O que é Journaling?

Um dos recursos que faz o ReiserFS ser bastante seguro é a funcionalidade Journaling (também presente em outros sistemas de arquivos, como o ext3). Com ela, 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 execução 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 esse procedimento acontece de maneira extremamente rápida.

Mas, no que, exatamente, o Journaling se mostra vantajoso? Os registros de log são escritos antes que as mudanças efetivamente ocorram no sistema de arquivos. Esses 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".

É importante frisar que, no caso do ReiserFS, as técnicas de Journaling se limitam aos metadados (conjuntos de informação sobre arquivos, como tamanho, proprietário, permissões, data de alteração, etc), fazendo com que esse filesystem seja eficiente na recuperação do sistema operacional como um todo em caso de problemas. Por outro lado, o sistema de arquivos ext3 é capaz de usar Journaling preservando metadados e as informações dos arquivos em si, mas isso pode fazer com que o desempenho do sistema de arquivos diminua.


Reiser4

O Reiser4 é uma nova implementação do ReiserFS, ou seja, é seu sucessor natural. Sua proposta é a de oferecer, entre outros recursos, o seguinte:

- Journaling mais eficiente;
- Melhor suporte a grandes quantidades de arquivos pequenos;
- Gerenciamento mais rápido de diretórios com muitos arquivos (na casa dos milhares);
- Estrutura de arquivos dinamicamente otimizada;
- Transações atômicas na modificação do sistema de arquivos. Neste caso, uma operação só pode ser tida como concluída se executada por completo, ou seja, não há meio termo: ou está feito ou não está.

O Reiser4 é um projeto que demorou alguns anos para ser concretizado e, embora já tenha uma versão estável disponível para uso, sua adoção é muito lenta devido a alguns entraves, sendo um deles, a demora de sua inclusão no kernel. Essas questões ainda estão sendo tratadas.


Finalizando

Quando o assunto é sistema de arquivos no Linux, é inevitável as comparações entre o ReiserFS e o ext3, além de outros menos usados, como o XFS. Nada mais natural, afinal, cada usuário procura o melhor para o seu computador. Mas apontar qual realmente é melhor não é uma tarefa fácil. Há vários comparativos na internet que tentam oferecer essa resposta, mas, aqui no InfoWester, somos da opinião de que a melhor coisa a se fazer é testar os sistemas de arquivos que lhe atraíram para definir qual mais lhe agrada.

Como este artigo trata especificamente do ReiserFS, nada melhor que finalizar sugerindo aos que desejam mais detalhes, as leituras que serviram de referência para este texto:

- www.namesys.com/X0reiserfs.html
- www.namesys.com/v4/v4.html
- www.cerias.purdue.edu/homes/florian/reiser/reiserfs.php
- en.wikipedia.org/wiki/Reiser4

Escrito por - Publicado em 27_05_2007 - Atualizado em 27_05_2007