

Sistemas de Arquivos
23 de janeiro de 2004
Postado por: Thadeu Camargo
Todo
sistema operacional precisa de um sistema de arquivos e o Linux
não
é exceção à regra, pois afinal de contas
um sistema de arquivos serve para fornecer ao sistema operacional
toda a uma estrutura para ler, gravar e executar
arquivos. Dependendo do tipo de sistema de arquivos pode se ter
determinados recursos. Um bom exemplo é a diferença
entre um sistema operacional Windows 2000 formatado em FAT32 e outro
em NTFS. Veremos que o sistema formatado em NTFS terá muito
mais recursos de segurança, assim como regras de
permissões
mais definidas em relação ao FAT32. Hoje em dia, o
Linux tem uma gama muito grande de opções de sistema de
arquivos: Desde o velho EXT2 até os atuais com suporte
a Journaling, como o EXT3,
ReiserFS e XFS. Veremos neste artigo um pouco
das características
dos sistemas de arquivos para Linux.
Um
pouco de história...
Os
sistemas de arquivos utilizados atualmente no Linux são
avançados e tem vários recursos mas não foi
sempre assim. Nas primeiras versões do kernel, o sistema de
arquivos utilizado era o EXT.
Extremamente frágil e com muitas
limitações, como por exemplo, permissão para
criação de partições de somente até
2GB e fácil desfragmentação.
A partir do EXT2
a limitação de 2GB para partições caiu
por terra, já que ele permite criação de
partições de até 4Terabytes!
EXT2
Sem
dúvida alguma o EXT2 foi uma evolução e tanto em
relação ao EXT, pois neste sistema de arquivos muitas
melhorias foram implantadas, fazendo deste modo com que o Linux
tivesse um sistema de arquivos com recursos importantíssimos
para uma boa administração de sistemas, tais como o
suporte a regras de permissões bem definidas. A estrutura do
EXT2 pode ser definida assim:
.: Boot Block
– Onde são gravadas as informações
necessárias
para a inicialização do sistema.
.: Inodes
– Ficam armazenadas todas as informações sobre cada
arquivo: Permissão de acesso, tipo de arquivo,
identificação,
dono do arquivo, data que foi criado e modificado, tamanho e a
localização para o bloco de dados onde o arquivo
está
guardado.
.: Diretórios
– São tipos de arquivos especiais que armazenam uma lista de
todos os arquivos e subdiretórios subordinados a ele.
.: Links -
Um recurso muito interessante no qual pode se apontar para um outro
arquivo ou diretório qualquer.
Quando se fala em arquivos e diretórios no Linux, falamos em tudo, literalmente. Ao contrário do Windows, que trata dispositivos de hardware como tal, o Linux trata tudo como arquivo, ou seja, um disco rígido é um arquivo, um modem também, assim como um CD-ROM, impressora, placa de som, etc.... Os dispositivos de hardware ficam todos no diretório /dev.
Outra característica é o recurso de montagem. O sistema de arquivos do Linux obedece uma hierarquia de arquivos e diretórios, onde pode haver subdiretorios relacionados. E todos devem estar organizados numa partição, que é onde o sistema de arquivos é criado. Estas partições podem ser montadas ou desmontadas. Quando o sistema é iniciado, verifica-se no arquivo /etc/fstab as partições e dispositivos a serem montados. Ao desligar o sistema, as mesmas são desmontadas. Mesmo com o sistema ativo, as partições ou dispositivos podem ser montados ou desmontados a qualquer hora, inclusive em diretórios diferentes, o que dá uma versatilidade muito grande.
No Linux pode se acessar partições de diversos tipos, como FAT, FAT32, iso9660 e outras, inclusive pode se instalar um sistema nestas partições, assim como roda-lo através de um CD-ROM. Isso se deve graças ao VFS ( Virtual File System ), que faz todo um trabalho de gerenciamento do sistema de arquivos “desconhecido”, decifrando sua estrutura e repassando as para o kernel e programas, para que estes possam trabalhar sob o FS. É evidente que isso tem um preço, que se traduz em perda de rendimento, devido a emulação de estruturas.
Para quem tem dual boot a versatilidade do Linux é um bom recurso, mas até pouco tempo atrás ainda existia uma pequena barreira: NTFS, que falarei mais adiante.
Tantos recursos
assim fazem com que o EXT2 seja poderoso, mas é evidente que
ele tem as suas fragilidades. Algumas delas podem até
comprometer o bom andamento do trabalho.
Um grande
problema do EXT2 é a sua baixa tolerância a falhas em
caso de quedas de energia ou desligamento inadequado, sendo talvez
até mais frágil do que a FAT32 do Windows. Um
desligamento inadequado num sistema EXT2 força o uso do fsck
para verificar a integridade do sistema. Algo mais ou menos
semelhante ao que acontece com o Scandisk do Windows. Esta checagem
pode demorar vários minutos, dependendo do tamanho do disco
rígido, e conforme for o caso, pode haver até perda de
dados, se o arquivo estiver sendo gravado na hora do desligamento
pode haver perda de um diretório inteiro. Estes problemas
foram contornados com a criação dos sistemas de
arquivos com Journaling
Journaling
As limitações
do EXT2 comprometiam sistemas de missão crítica, onde
uma parada de alguns minutos ou perda de dados poderiam causar
prejuízos consideráveis. Os sistemas de arquivos com
tecnologia “Journaling” tem a capacidade de acompanhar as
mudanças que serão feitas nos arquivos antes de
serem efetivadas. Estes registros são gravados numa área
separada do sistema de arquivos, chamada “Journal” ou
“registros de LOG”. Depois que as mudanças são
efetivadas, estes registros anteriores são eliminados. Na
prática é como se fosse um log constante, em full time,
constantemente atualizado. Isso faz com que os FS com esta tecnologia
tenham uma alta tolerância a falhas e a perda de dados diminua
consideravelmente. Com estes FS não é mais
necessária
a atuação do FSCK a cada desligamento inadequado do
sistema, visto que ao reiniciar a máquina o sistema
verificará
no registro de LOG se há mudanças marcadas como
não
feitas. Caso positivo, estas serão efetivadas e o sistema
inicializará rapidamente e sem maiores problemas, poupando
tempo e dores de cabeça:-).
Nesta categoria
de sistemas de arquivos existem algumas opções como
EXT3, ReiserFS e JFS, sendo que os mais
utilizados são o EXT3 e o ReiserFS
ReiserFS
Uma das grandes
vantagens do ReiserFS além do recurso de Journaling, é
seu desempenho, principalmente se forem manipulados arquivos
pequenos. Isto se deve graças a seu recurso de blocos
dinâmicos, ou seja, o ReiserFS não se prende a blocos de
tamanho fixo. Ele ajusta o tamanho do bloco conforme o tipo de
arquivo. Isso resulta num ganho de desempenho e espaço em
disco considerável.
Além
destes fatores, o ReiserFS tem uma vantagem de desempenho em
relação
ao EXT3 devido ao modo como ele armazena os registros no “Journal”.
Ele armazena somente as informações sobre a área
de metadata ( estrutura de
controle de um arquivo, ou seja, onde é
especificado seu tamanho, permissões, data de
criação,
modificação, etc..) fazendo com que o disco rode mais
rápido pois menos dados são verificados para armazenar
em LOG.
Os dados do
arquivo em si, ou seja, as informações realmente
armazenadas nos arquivos não são registradas no
Journal. Isto pode fazer com que num desligamento inadequado, possa
se recuperar o arquivo, mas os dados contidos nele podem ficar
truncados ou mesmo perdidos. Pode se considerar isto como uma
desvantagem do ReiserFS, pois existe um risco de perda parcial de
dados. Este FS tem um progresso considerável a cada
versão,
fazendo com que ele seja uma opção cada vez mais
viável
junto com o EXT3.
EXT3
Se
o ReiserFS é um sistema de arquivos com recursos novos, o EXT3
é o sucessor natural do EXT2, fazendo com que este seja o
sistema de arquivos para Linux mais utilizado atualmente. Ele tem as
características do EXT2 com a grande vantagem de ainda ter o
suporte para tecnologia Journaling e ainda por cima ser mais
rápido
que o seu antecessor.
Este FS
diferencia-se do modo de trabalho em Journaling do ReiserFS na
maneira como guarda os registros no LOG. Ao passo que o ReiserFS
guarda apenas informações da Metadata como dissemos
antes, o EXT3 guarda não só as informações
da Metadata como também os dados em si do arquivo. Para isso
ele deve trabalhar no modo ordered, que é o
padrão
no EXT3. Graças a este modo de trabalho, uma perda de dados do
arquivo é reduzida, mas existe um fator preocupante: Devido ao
fato do registro de LOG ser completo, o Journal é acessado com
muito mais frequência do que no ReiserFS, causando uma perda de
desempenho em relação a este FS, além disso,
existe a possibilidade do próprio Journal se corromper num
desligamento incorreto. Caso isto ocorra, ao reiniciar o sistema, o
FSCK rodará, assim como no EXT2 e perda de dados do arquivo
que estava sendo acessado na hora do desligamento podem ocorrer. Se
tiver muito azar pode-se perder até pastas inteiras.
Convertendo EXT2 para ReiserFS
As
distribuições
que vem com o kernel 2.4.18 em diante já tem suporte tanto
para ReiserFS quanto EXT3, não
havendo necessidade de instalar um EXT2 ( a não ser que
você
tenha um motivo forte para isso :-). Podemos nos aproveitar da gama
de possibilidades que o Linux nos propõe e alterar o nosso
sistema quando quiser. Os sistemas de arquivos estão incluidos
nesta festa:-) Infelizmente, devido ao fato do ReiserFS não
ser totalmente compatível com o EXT2, é necessário
fazer um backup de sua partição pois a conversão
é destrutiva, ou seja, apaga-se todos os dados da
partição que se for converter. Então antes
de fazer a conversão, faça um backup ok?
Caso sua
distribuição tenha um kernel inferior ao 2.4.x
será
necessário incluir o suporte para ReiserFS no kernel. Para
isso será necessário a compilação do
mesmo.
Após
verificar tudo, vamos fazer a conversão. Primeiramente temos
que desmontar a partição:
umount /dev/hdnX
Vamos formatar a
partição em ReiserFS:
mkreiserfs /dev/hdnX
Após
confirmar a operação, a partição
será
formatada. Crie um diretório para montar a sua
partição:
mkdir novodiretorio
Agora vamos
montar a partição rejuvenescida em ReiserFS:-)
mount -t reiser /dev/dnX /novodiretorio
Funcionou? Então
agora é hora de marcar a partição no fstab para
que seja montada na inicialização do sistema. Abra o
/etc/fstab e insira esta linha:
/dev/hdnX /novodiretorio reiserfs defaults 0 0
Pronto se tudo
der certo, seu sistema estará funcionando a pleno vapor com
ReiserFS:-)
OBS: Onde lê-se
hdnX - n = Disco Rígido ; X = partição ( a
ser convertida )
Logicamente
o “novodiretório” é um nome que você poderá
dar a sua bel-vontade:-)
Cuidado para não converter a partição errada ok?
Convertendo EXT2 para EXT3
Diferentemente
da conversão de EXT2 para ReiserFS, a conversão para
EXT3 é simples e tranquila pois ela não é
destrutiva, enfim, sem perda de dados. Assim como para o ReiserFS,
é
necessário que a sua distribuição esteja com
suporte para EXT3 no kernel. Se for kernel 2.4.18 em diante, é
certo que a tenha. Caso contrário será necessário
recompilar o kernel.
A conversão
é muito simples. Primeiramente vamos desmontar a
partição:
umount /dev/hdnX
Agora vamos
fazer a conversão:
tune2fs -j /dev/hdnX
Agora vamos
alterar o /etc/fstab para que
as alterações surtam
efeito na inicialização do sistema. Insira a linha no
arquivo:
/dev/hdnX / ext3 defaults 0 0
OBS: Lembre-se
de colocar a partição correta para o seu caso.
O e2fsck faz uma
checagem do sistema de arquivos na vigésima montagem ou a cada
180 dias. Se quiser desabilitar este recurso faça este
comando:
tune2fs -i 0 -c 0 /dev/hdnX
Convertendo EXT3 para EXT2
Graças a
compatibilidade entre estes sistemas de arquivos, podemos fazer o
inverso, ou seja, converter uma partição EXT3 para EXT2
com tranquilidade. Basta remontá-la como EXT2:
umount /;mount -t ext2 /dev/hdnX /
Depois faça
a alteração devida no /etc/fstab:
/dev/hdnX / ext2 defaults 0 0
Linux e NTFS
Como
foi dito antes, os sistemas de arquivos para Linux tem como grande
vantagem a versatilidade, segurança e compatibilidade com
outros sistemas de arquivos. O problema reside no outro lado, como a
Microsoft que visa somente os seus interesses e tenta dificultar
qualquer solução que possa viabilizar uma harmonia de
sistemas. Ela não está muito interessada nesta
compatibilidade, fazendo com que seja necessário o uso de
recursos como engenharia reversa para fazer com que os sistemas
possam trabalhar juntos em paz. Isso é o que acontece com o
NTFS. Proprietário, fechado, este sistema de arquivos devido a
sua obscuridade tem se tornado uma barreira para usuários que
rodam sistemas Linux e Windows em dual boot. As
distribuições
que vem com o kernel 2.4.x, tem suporte para arquivos NTFS somente
para leitura. Como a escrita ainda está em estado
experimental, pode se ter experiências desagradáveis, como
por exemplo, corrupção dos arquivos na
partição NTFS.
Existem projetos como o Linux-NTFS, que tem
obtido bons resultados, mas provavelmente o projeto que conseguiu
fazer realmente o acesso a partições NTFS pleno e
transparente ao usuário foi o Captive.
Além do Captive, o kernel 2.6.1 já apresenta suporte para
escrita
em partições NTFS. Ainda não tive relatos sobre
experiências neste kernel em relação a isto mas
creio que esta barreira já esteja praticamente quebrada.
Considerações
finais
Como era de
esperar, no Linux existem várias opções de
sistemas de arquivos. Boas opções por sinal. Cada um tem
suas características particulares e a escolha final vai depender
do gosto e
conveniência de uso. O importante é que como em tudo no
Linux existe algo imprescindível ( pelo menos para mim :-) :
Liberdade de escolha. Escolha o que for melhor para você e
ponto final.
