Um modo de se organizar os dados é no formato de árvores. Quando
organizamos a informação em um computador, a classificamos tipicamente em pilhas (chamadas de nós ou nodes), e há um nome (ponteiro) para cada pilha. Esse ponteiro é usado para encontrar a pilha. Alguns dos nós podem conter ponteiros através dos quais podemos localizar outros ponteiros para outros nós.
Uma árvore é uma estrutura organizada que tem algumas propriedades úteis para essa finalidade conforme Figura 3.
Assim define-se, segundo Namesys (2004), uma árvore como:
1. Um conjunto de nós organizados em um nó raiz (Root node), e zero ou mais conjuntos adicionais de nós chamados sub-árvores.
2. Cada sub-árvore é uma árvore.
3. Nenhum nó na árvore aponta ao nó raiz, e há exatamente um ponteiro de nó na árvore que aponta para cada nó da árvore que não seja o nó raiz.
4. O nó raiz tem um ponteiro para cada uma das sub-árvores, isto é, um ponteiro para o nó raiz da sub-árvore.
Fonte: Disponível em
http://www.namesys.com
As árvores balanceadas ("balanced tree") (B*) usadas pelo ReiserFS para organizar o sistema de arquivos são uma versão melhorada de árvores B+, onde não existe uma árvore diferente para cada diretório e sim, cada qual possui uma sub-árvore da principal.
O
ReiserFS é um sistema de arquivos com suporte a "journaling" concebido por Hans Reiser e mantido pela empresa The Naming System Venture . São seus patrocinadores as empresas SuSE e Linspire. O ReiserFS já é o sistema de arquivos padrão nas distribuições
GNU/Linux da SuSE, Gentoo e Linspire.
O ReiserFS é uma camada semântica com métodos e funções que são referenciados para executar tarefas no sistema de arquivos fazendo o uso de plug-ins que evocam chamadas de sistema para esses métodos e funções.
Esse método de acesso trata toda a partição como se fosse uma única tabela de banco de dados contendo diretórios, arquivos e metadados dentro de uma mesma árvore.
A implantação dessa característica exigiu que técnicas mais complexas de indexação fossem implementadas no ReiserFS, tornando mais eficientes seus tempos de resposta comparados aos de outros sistemas. ReiserFS usa uma árvore finita (o número de nós é limitado).
Outro termo importante para a definição de árvores é o termo
Edge. Diferentemente de um ponteiro que é unidirecional, o Edge é bidirecional, ou seja, pode ser seguido de um nó a outro e desse para seu antecessor. Então se pode dizer que Edge não é ponteiro.
Atribuímos a tudo que está armazenado na árvore uma chave. A pesquisa
de localização se dá por meio das chaves. O uso das chaves nos dá uma
flexibilidade adicional para classificação da informação, se essas chaves
forem pequenas elas nos dão um modo compacto de especificar como encontrar
as informações. Isto também limita o tipo de informação que podemos usar
como uma chave.
Este limite restringe sua utilidade, e assim tem-se uma camada de
armazenamento, que encontra dados por chaves, e uma camada semântica,
que tem um sistema de nomes rico.
A busca por chaves, então, agiliza a pesquisa em árvores, mas limita o
tipo de chaves que podemos trabalhar.
O ReiserFS possui suporte a arquivos maiores que 2GB.
ReiserFS usa árvores balanceadas para tornar o processo de busca de
arquivos, informações sobre segurança e outros metadados mais eficientes.
Para arquivos muito pequenos, seus dados podem ser armazenados próximos
aos metadados, então, ambos podem ser recuperados com um pequeno movimento
do mecanismo da "cabeça" de leitura do disco. Essa propriedade vai
contribuir para um melhor desempenho caso uma aplicação necessite abrir
muitos arquivos pequenos rapidamente.
Outra grande vantagem do ReiserFS é a alocação dinâmica de inodes, já que
esse sistema de arquivos não os aloca em espaços fixos ou blocos e sim,
aloca o tamanho exato que o arquivo precisa. Em sistemas baseados em
inodes fixos, como o EXT3, o espaço no disco é alocado em blocos que
variam de 512 a 4096 bytes ou até maior, caso o arquivo exceda um
múltiplo exato do tamanho do bloco.
A leitura e escrita de arquivos grandes são limitadas pela velocidade do
dispositivo de armazenamento e pelo canal de entrada e saída da controladora
de discos. Já o acesso a arquivos pequenos, como scripts do Shell, é
limitado pela eficiência do projeto do sistema de arquivos. A razão
disso é que a abertura de um arquivo requer a leitura dos metadados sobre
ele que estão armazenados no inode do diretório em uma área distinta dos
dados. Após localizar a entrada referente ao arquivo no diretório é que o
sistema realiza a leitura dos setores que contêm os dados.
Além disso, o sistema precisa examinar os metadados relativos à segurança
para verificar se o usuário tem permissão de acesso ao arquivo, isso
significa leituras adicionais. O sistema pode gastar mais tempo decidindo
entre permitir o acesso e localizar as entradas de dados do que se as
buscasse dentro do próprio arquivo. Entre o EXT3 e o ReiserFS, a principal
diferença é que o EXT3 tenta guardar informações tanto sobre o metadados,
ou seja, as informações sobre o espaço ocupado pelos arquivos e suas
permissões quanto sobre os dados em si, enquanto o ReiserFS guarda apenas
informações sobre os metadados.
Para completar, o ReiserFS é rápido. Seu ganho de velocidade em relação
a outros sistemas de arquivos varia de acordo com cada operação em disco.
Em quase todas as operações ele é mais rápido, e em algumas não. Não é
incomum alguém utilizar o ReiserFS com milhares de arquivos no mesmo
diretório, uma tarefa para a qual o ReiserFS é especialmente adaptado.
Seu uso de funções hash e árvores balanceadas, ao invés de seqüências
infindáveis de inodes tornam a procura de um arquivo em uma dezena ou em
uma grande quantidade uma operação bem rápida.
No caso de um desligamento incorreto do sistema, o ReiserFS é capaz de
recuperar a consistência do sistema de arquivos em frações de segundo e a
possibilidade de perda de pastas ou partições é nula. Em compensação, os
arquivos que eventualmente estiverem sendo gravados no exato momento em
que acabou a energia ficarão com seus dados alterados. Você continuará
tendo acesso aos arquivos normalmente, mas o conteúdo estará truncado ou
incompleto.
Já o EXT3 tenta sempre preservar não só o metadados, mas também os dados
dos arquivos em si. Isto se revela ao mesmo tempo uma força e uma fraqueza.
A vantagem é que existe uma possibilidade maior de recuperar os arquivos
que estiverem sendo gravados no exato momento em que acabar a energia. Por
outro lado o journal guarda mais informações e é acessado mais
freqüentemente, o que causa degradação no desempenho (é justamente por
isso que o ReiserFS costuma se sair melhor nos benchmarks) e ao mesmo tempo
faz com que exista a possibilidade do próprio journal se corromper
durante o desligamento.
Apesar de ser muito difícil a corrupção do sistema ReiserFS, também pode
acontecer. Porém o gerenciamento de setores defeituosos do sistema de
arquivos ReiserFS é simples de ser realizado já que as ferramentas para
essa operação estão disponíveis. Segundo Morimoto (2004), pode-se usar o
comando
badblocks para fazer um exame de superfície e mostrar uma
lista com os setores defeituosos. Para usar em conjunto com o ReiserFS, é
necessário especificar o tamanho dos blocos (em bytes). Se você não usou
nenhuma opção especial ao formatar a partição, os blocos terão 4096
bytes. O comando para verificar a partição /dev/hda1, por exemplo, fica:
# badblocks -b 4096 /dev/hda1
Ainda segundo Morimoto (2004), o ReiserFS é capaz de marcar, via software,
setores defeituosos que for encontrando. Isso é feito automaticamente,
assim como no NTFS do Windows XP. Só é preciso marcar setores defeituosos
manualmente em sistemas de arquivos antigos, como o FAT32 e o EXT2.
Para ver se existem setores defeituosos na partição, marcados via software, execute o comando:
# debugreiserfs /dev/hda1
Caso exista algum erro no sistema de arquivos, causados por desligamentos
incorretos, por exemplo, você pode corrigir com o comando:
# reiserfsck /dev/hda1
O ReiserFS é um sistema de arquivos relativamente novo, mas que conta com
o patrocínio de grandes empresas. Apesar de ainda estar em desenvolvimento,
seu uso em servidores de produção já é uma realidade. Dadas as
características do sistema tem se mostrado como uma solução a mais para
os usuários do sistema GNU/Linux.