sábado, 5 de dezembro de 2009

Sistema de Arquivos

Sistema de arquivos é a forma que o sistema operacional usa para representar determinada informação em um espaço de armazenagem. É o método de identificar e indexar as informações que estão armazenadas em qualquer mídia: disquetes, discos rígidos, drives em memória, CDs, etc.

Quando se prepara um disco para o trabalho através do processo de formatação física, criam-se os meios magnéticos necessários para armazenar os dados. Este processo faz uma preparação do dispositivo de armazenagem para que ele possa receber um sistema de arquivos e futuramente os dados do usuário. Um sistema de arquivos, portanto, é necessário para manter padrões, para controlar o tamanho das partições, permissões de arquivos, tamanho dos arquivos e sua organização, entre muitas outras funções.

Ext: sistema de arquivos estendido (extended filesystem). É o sistema de arquivos mais utilizado no Linux. Existem ramificações (ext2 e ext3), sendo o ext3 o mais amplamente utilizado pela comunidade Linux atualmente. Ele fornece padrões para arquivos regulares, diretórios, arquivos de dispositivos, links simbólicos e suporte a transações (journalling), entre outras características avançadas, O Ext2 é um sistema de arquivos de disco de alta performance usado nativamente pelo Linuz para dispositivos de armazenamento, como discos rígidos e mídias removíveis.O sistema de arquivos second extended Filesystem foi desenhado como uma extensão de extended Filesystem (ext). O ext2 oferece a melhor performance (em termos de velocidade e uso da CPU) entre todos os sistemas de arquivos suportados pelo Linux, pelo fato de não possuir um journal, sendo assim os dados são gravados diretamente. Quando ocorre algum crash, o fsck é acionado para a verificação do sistema, corrigindo eventuais perdas de dados. O Ext3 (que significa "third extended file system") faz parte da nova geração de sistemas de gestão de arquivos do Linux. A sua maior vantagem é o suporte de journaling, que consiste em guardar informação sobre as transações de escrita, permitindo uma recuperação rápida e confiável em caso de interrupção súbita (por exemplo, por falta de Electricidade).Na maioria dos casos, comparado ao ext2, o uso deste sistema de arquivos melhora o desempenho do sistema de arquivos através da gravação seqüencial dos dados na área de metadados e acesso mhash da sua árvore de diretórios.A estrutura da partição ext3 é semelhante à da ext2, pelo que a migração de um formato para o outro é simples. A adição do journaling é feita em um arquivo chamado .journal que fica oculto pelo código ext3 na partição (desta forma ele não poderá ser apagado, o que comprometeria o funcionamento do sistema). A estrutura idêntica da partição ext3 com a ext2 torna mais fácil a manutenção do sistema, já que todas as ferramentas para recuperação ext2 funcionarão sem problemas, sendo mesmo possível montar uma partição ext3 como se fosse ext2.

Reiserfs: sistema de arquivos com suporte a características como, por exemplo, melhor performance para diretórios muito grandes e suporte a transações (journalling) O REISERFS foi criado por Hans Reiser há cerca de 10 anos atrás que também fundou uma equipe chamada NAMESYS com o objetivo de desenvolver um sistema de arquivos rápido, robusto, seguro e de fácil recuperação em caso de problemas. A partir do Kernel 2.4 o Reiser passou a ser um dos filesystems suportado pelo sistema operacional. Com o tempo, o Reiser passou a ser incluído como filesystem padrão de algumas distribuições respeitadas, citando: SuSE, Slackware 8.1 e Gentoo. Isso trouxe popularidade a esse sistema de arquivos e hoje o mesmo faz parte da lista de ótimas escolhas para os linuxistas o que implica em muitos debates sobre o desempenho do Reiser em relação a outros sistemas de arquivos, principalmente o EXT3. Ao observar superficialmente esse file system é inevitável a comparação com as estruturas de banco de dados. Na verdade, o ReiserFS trata uma partição do disco como se fosse uma tabela de uma base de dados onde diretórios, arquivos e metadados são armazenados em uma eficiente estrutura chamada de "árvore balanceada", a B* Tree, o qual é, junto com o recurso de journaling, as duas engrenagens responsáveis pela popularidade do ReiserFS. O ReiserFS possui um rápido recurso de Journaling garantindo disponibilidade ao seu desktop ou servidor. Isso significa que você não perderá tempo com verificações do FSCK e que em caso de acontecer algo inesperado o sistema será recuperado em poucos segundos.

Esse sistema de arquivos também é baseado em um sofisticado conceito algorítmico de árvores balanceadas, garantindo maior performance principalmente na manipulação de arquivos,pequenos.Paraoqueouquemutilizaarquivospequenos?
Há diversos exemplos a serem dados. Os ganhos de performances serão substanciais em casos como:
compilação de código fonte, no qual diversos arquivos são necessários durante o processo;
utilização do comando find em diretórios muito grandes que possuem arquivos e N diretórios dentro é visivelmente mais rápido;
servidores Web que armazenem centenas de documentos HTML e arquivos de imagens;
servidor cachê, como o exemplo já dado utilizando-se Squid em ReiserFS; uma partição de disco que armazena apenas imagens de CD-ROM.

Existem diversas aplicações como as citadas acima que há maior produtividade utilizando-se ReiserFS. Algo importante de informar é que o fato de o ReiserFS ser muito bom em gerenciar arquivos pequenos não significa que o seu tratamento com arquivos grandes seja ruim. Na verdade, em muitos casos não haverá diferença de performance quando se trata de arquivos enormes tanto ReiserFS como em outros filesystems. Por último, o armazenamento do espaço em disco é mais eficiente.
O ReiserFS armazena em um único bloco quantos arquivos couberem, não tendo que especificar um bloco pra cada arquivo. A proximidade entre os metadados e os dados do arquivo em si no disco físico garante maior performance pois qualquer operação de I/O é feito uma única vez.Uma desvantagem do Reiser que encontrei que pode ser decisiva dependendo do objetivo da aplicação é o mal funcionamento do ReiserFS com NFS. Embora exista alguns patches que aparentemente corrigem os bugs, encontrei algumas informações que sugerem que utilizar ReiserFS e NFS apresenta bastante instabilidade. Outro ponto negativo também é que o ReiserFS não funciona muito bem com softwares de RAID.

Como já explicado, um fator que melhora o desempenho do Reiser em relação ao EXT3 por exemplo é a opção de apenas utilizar os metadados no journal. Porém outro fato importantíssimo é a facilidade na manipulação de pequenos arquivos. Isso acontece devido a utilização das arvores balanceadas B*, que organiza todos os dados no sistema de arquivo. É graças a essa estrutura que é possível termos quantos milhares de diretórios quisermos em um único diretório sem ter degradação na performance. Além disso existem outros recursos no Reiser que melhoram ainda mais a performance com a manipulação de arquivos de tamanho reduzido. Uma característica importante é que o Reiser não aloca espaço em disco de acordo com os blocos disponíveis no HD, mas sim aloca o tamanho exato que é necessário para aquele arquivo. Se você grava n arquivos que no total de 100 bytes, esses são todos agrupados em único bloco, ao invés de por cada arquivo em seu próprio bloco, como acontece no EXT3. Isso significa que além de mais rápido devido ao journal e a forma de organização dos arquivos, o Reiser também consegue armazenar mais em um HD do que conseguiria com o seu concorrente principal, o EXT3. Um exemplo prático é instalar a distribuição Goblinx. Instalado em EXT3 o tamanho ocupado em disco é de 1 GB enquanto no Reiser a mesma instalação tem em uma partição Reiser 800 MB de espaço utilizado. Por último, outro recurso que garante maior performance ao Reiser é que os arquivos em si e seus metadados são gravados muito próximos um do outro. Ou seja os arquivos podem ser lidos em uma única movimentação do cabeçote de leitura do HD, evitando assim, com que o mecanismo tenha que se deslocar diversas vezes.
JFS.
O JFS (Journaled Filesystem) é um sistema de arquivos desenvolvido pela IBM. Inicialmente ele era desenvolvido para o sistema operacional AIX (uma variação do Unix, desenvolvido pela IBM). Com a evolução deste sistema de arquivos, a IBM passou a utilizá-lo no OS/2 (um outro sistema operacional desenvolvido pela empresa), além de utilizá-lo ainda no próprio AIX. Não demorou muito e a IBM começou a adaptar o JFS para uso no GNU/Linux e com isso foi liberando o seu código-fonte aos poucos. Assim, este sistema de arquivos foi incorporado de vez a muitas distribuições GNU/Linux [Gordon & Haddad 2006]. O sistema de arquivos JFS também usa a estrutura I-node para armazenar a localização dos blocos de cada arquivo nas estruturas físicas do disco. A versão JFS2 armazena esses I-nodes em uma árvore binária para acelerar o acesso a essas informações. Esses blocos podem variar de 512 a 4096 bytes, e a alocação dos I-nodes é feita conforme vai sendo necessário. O journaling consiste em reservar um espaço no início do disco para gravar informações sobre as operações que serão realizadas, antes delas serem realmente feitas. Assim, se alguma falha ocorrer durante a operação, seja gravação, movimentação ou exclusão, basta o sistema ler o setor de journaling para facilmente poder desfazer as operações, retornando os arquivos para seu estado anterior, ou então completar as operações,interrompidas.
O espaço onde ficam gravadas as informações de operações chama-se journal, daí o nome journaling. Graças ao journal, a verificação de sistemas de arquivos com suporte a journaling é realizada muito rapidamente, pois basta verificar se existe alguma operação pendente registrada no journal. Dependendo do sistema de arquivos utilizado, essa verificação pode durar de 1 a 2 segundos somente, podendo ser executada toda vez que se carrega o sistema operacional, garantindo uma grande segurança quanto à integridade dos dados. Como no journaling é necessário gravar as informações no journal antes de realizar as operações de fato, o processo de gravação pode se tornar mais lento, sobretudo nos casos de várias operações consecutivas com arquivos pequenos. Entretanto, a velocidade nas operações com dados está mais relacionada a outros aspectos do sistema de arquivos do que com a presença ou não do journaling, de forma que facilmente encontramos sistemas de arquivos como o ReiserFS, com journaling, que possuem um desempenho muito maior que grande parte dos sistemas sem journaling, como o FAT32 e o EXT2.

FAT32: O FAT32 é o sistema de arquivos padrão do Windows, utilizado nas versões 95, 98 e Me, e disponível também para as versões 2000 e XP. É um sistema de arquivos simples, um pouco lento e bastante vulnerável a falhas, motivos pelos quais ele não pôde ser usado nos sistemas operacionais de rede da Microsoft, como as versões NT, 2000 Server e 2003 Server do Windows.
XFS: desenvolvido originalmente pela Silicon Graphics e posteriormente disponibilizado o código-fonte, o XFS possui vários patches e alguns bugs, mas é um sistema de arquivos muito rápido na gravação e possui um desfragmentador para arquivos. XFS é um sistema de arquivos muito rápido na gravação. Considerado um dos melhores sistemas de arquivos para banco de dados.
Possui journaling de metadados que vem com um robusto conjunto de funções e é otimizado para escalabilidade. Entretanto é recomendado usar este sistema de arquivos em sistemas rodando Linux com equipamento SCSI de ponta e/ou armazenamento em canais de fibra e fonte de energia sem interrupção.
Pelo fato de o XFS criar cachês agressivamente de dados em uso na memória RAM, programas mal desenhados (que não tomam precauções na hora de escrever os arquivos em disco, e existem muitos deles) podem perder uma grande quantidade de dados se o sistema for desligado sem aviso.
NTFS: sigla de New Technology File System, foi desenvolvido pela Microsoft para ser utilizado nas versões de rede do Windows, inicialmente o NT, e posteriormente o 2000 Server e o 2003 Server. Baseado no HPFS (High Performance File System), da IBM, O NTFS possui suporte a gravação de permissões de acesso, Reparse Points, que permite associar ações a arquivos e pastas, quotas de discos, entre outros recursos.
Por ser um sistema proprietário, da Microsoft, não foi possível desenvolver para o GNU/Linux um suporte nativo a sistemas de arquivos NTFS. É possível ler, mas não há suporte eficiente à gravação nesse sistema de arquivos. Em alguns casos, pode-se usar o Captive, um programa disponibilizado sob a licença GNU GPL que se utiliza de arquivos de sistema do Windows para permitir a gravação em sistemas de arquivos NTFS, e por isso requer que o Windows esteja instalado no computador. O desempenho do Captive é pobre, a gravação de arquivos é muito lenta, atingindo míseros 2 MB por segundo. Outra alternativa, porém paga, é o Paragon NTFS, que funciona muito bem e possui um desempenho muito superior ao do Captive.
NFS: NFS significa Network File System. Permite que um computador compartilhe um diretório inteiro, exportando-o para outro computador, de forma que para o computador que esta recebendo o compartilhamento, parece que o diretório faz parte dele próprio. Isso facilita em muito o compartilhamento de informações. Ë muito usado em Sistemas Unices.
Smbfs: Este é o Sistema de Arquivo usado pelo Samba para permitir compartilhamento entre um Servidor Linux e estações Windows. Ele basicamente permite montar partições de uma estação Windows em algum ponto da partição Linux.
Hpfs: Sistema de Arquivo do OS/2 e Mac.
SysV: Sistema de Arquivo usado no System Release V/386 e Xenix.
Minix: O mais antigo e, que segundo alguns, um dos mais confiáveis, porém muito limitado. Foi muito popular no final da década de 80 e começo da de 90.
Características: Máximo de 30 caracteres; Capacidade restrita a 64Mb por Sistema de Arquivo; Algumas datas não aparecem;

Xia: O Xia é um aperfeiçoamento do Minix, porém muitos dos problemas anteriores continuaram a existir

Msdos: Este é o Sistema de Arquivo tradicional da Microsoft. O Linux possui compatibilidade com MS-DOS (e OS/2 , Windows NT) através do Sistema de Arquivos FAT16/FAT32.

Umsdos: O Msdos original não suporta nomes com mais de oito caracteres e três extensões. Para isso foi criado o umsdos, que é uma extensão do Msdos, com suporte a nomes longos, donos, permissões, links e arquivos de dispositivos do Linux. Isso permitiu que muitas distribuições (Phat, Win2001, entre outras), pudessem ser instaladas em cima de uma partição Windows, sem necessidade de reparticionamento de disco

Iso9660: O iso9660 é o Sistema de Arquivo padrão nos CD-roms e é totalmente suportada pelo Linux, bem como a sua extensão, a Rock Bridge, para nomes longos.