Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
07/07/2008

< Sistemas de arquivos de Windows >


Não, embora pareça, eu não vou interromper hoje a série de colunas sobre Vista. Mas como a próxima irá se apoiar fortemente em conceitos relativos a sistemas de arquivos e como eu não gosto de deitar falação sobre assuntos que os leitores não conhecem, vamos abrir um parêntese para falar um pouco sobre a história dos sistemas operacionais adotados por Windows desde os tempos em que Windows sequer existia, ou seja, desde a época do DOS. Os que “sabem tudo” sobre o assunto (e, pelo teor de certos comentários às colunas anteriores, tenho constatado que há um aguerrido grupo de leitores que se enquadram nesta classificação – ou que, pelo menos, acham que se enquadram) podem pular esta coluna enquanto afiam as garras para a próxima. Nesse ínterim meu lombo descansa um pouco das sucessivas pancadas que vem recebendo de leitores que se ofendem por eu não compartilhar sua (deles) opinião.

Um sistema de arquivos é uma forma sistemática de gerenciar e encontrar arquivos gravados em um meio de armazenamento.

O primeiro PC lançado pela IBM não tinha disco rígido. Na verdade, não tinha disco algum (havia, sim, um acionador – ou “drive” – de disquetes, mas era opcional). Por padrão, sua unidade de armazenamento externo (memória secundária) era uma unidade de fita cassete.

Hoje, na era dos CDs de áudio e música digitalizada, fica até difícil explicar aos mais jovens o que vem a ser uma “unidade de fita cassete”. Então, a guisa de lembrete para os coroas e ilustração para os garotos, a Figura 1 (obtida no sítio do < http://www.mci.org.br/ > Museu da Computação e Informática) mostra uma peça publicitária veiculada na saudosa revista Micro Sistemas de março de 1985 na qual um gravador cassete marca National, usado comumente para gravar e reproduzir áudio, é anunciado como “a segunda memória de seu computador” porque, de acordo com o texto do anúncio, “tem um sistema de cabeçote próprio para uso em micro” – o que hoje em dia seria certamente considerado propaganda enganosa pois cabeçotes de leitura e gravação em fitas cassete são cabeçotes de leitura e gravação em fitas cassete seja qual for o uso dado para a fita. Mas vale a pena ressaltar que este tinha “um contador de fita que facilita a localização do programa a ser utilizado” (aquele contador numérico que mostra o quanto a fita deslocou-se de um lado para outro, semelhante a um odômetro de automóvel, situado logo acima da maior tecla de acionamento, a da esquerda).

Figura 1: anúncio de gravador cassete para micro

Como funcionava este trambolho? Bem, digitava-se o comando “load” (ou algo parecido; dependia do sistema usado pelo micro e diversos micros “de 8 bits” também usavam cassete) seguido do nome do arquivo que se desejava carregar na memória, teclava-se ENTER e esperava-se pacientemente enquanto a fita era movimentada e o trecho inicial (“cabeçalho” ou “header”) de cada arquivo encontrado era examinado e seu nome comparado com o do que se havia comandado a carga. Se não coincidisse, a fita continuava desenrolando até o próximo cabeçalho e assim por diante, até o arquivo ser encontrado. A partir deste ponto, a fita continuava a mover-se, mas seu conteúdo era lido e carregado na memória do micro até que fosse encontrado o código EOF (“End Of File”, ou final de arquivo). Isto feito, se o usuário tivesse sorte, o arquivo teria sido lido da fita sem erros, ele seria avisado disso e poderia começar a usar seu arquivo. Do contrário, o que era bastante comum, aparecia um aviso de erro de leitura e fazia-se nova tentativa.

Se a fita contivesse arquivos usados com grande freqüência, o usuário experiente já teria tido o cuidado de anotar mais ou menos em que ponto da fita cada arquivo seria encontrado e a coisa ficava mais rápida: ele rebobinaria a fita até o início, ajustaria o “contador” para zero apertando aquele pequeno botão ao lado do mostrador numérico, faria a fita avançar rapidamente até um ponto anterior àquele onde o arquivo se localizava e, somente então, emitiria o comando de leitura. Se o arquivo fosse muito grande, dava para fazer um lanche enquanto ele era extraído byte a byte da fita cassete. Vocês, que reclamam quando um arquivo de algumas dezenas de MB demora mais de dois segundos para carregar depois do clique, pensem nos velhos pioneiros que usavam fita cassete antes de começar a se lamentar.

Pois é. Era assim que funcionava. E, assim funcionando, com os arquivos sendo encontrados pelo usuário “na força bruta”, para que “sistema de arquivos”?

A preocupação com o sistema de arquivos surgiu mais tarde, com o aumento da capacidade dos discos magnéticos. E me refiro aos disquetes, que no início tinham capacidade de 160 KB (sim, quilobytes) em sua única face de gravação, mas que rapidamente evoluíram e chegaram até, imaginem, quase três MB (embora os maiores usados em larga escala fossem os de 1,44 MB). Aí, sim, em um meio que permitia leitura direta (em contraposição à leitura seqüencial da fita), podia-se fazer a cabeça magnética de leitura e gravação do acionador de disquetes saltar diretamente para os setores que armazenavam os arquivos seja lá quais fossem a face ou trilha onde se aninhavam. Mas para isto era preciso saber quais eram estes setores – ou, mais explicitamente, onde, nas diversas trilhas do disco, localizavam-se os setores que, juntos, constituíam cada arquivo. Ou seja: era preciso um sistema de arquivos.

A forma de se resolver a questão foi a mais simples possível: anotar, nos primeiros setores das primeiras trilhas do disco, a lista (atualizável, naturalmente) de todos os arquivos contidos no disco, com seus nomes e alguns dados importantes, inclusive a localização de seu primeiro setor. E, em alguns setores subseqüentes, uma tabela que informava onde se localizavam os demais setores que formavam cada arquivo.

A primeira lista era pouco mais que isto: uma lista. Com “entradas” de 32 bytes cada que continham o nome (limitado a oito caracteres), extensão (limitada a três caracteres) e, além da  localização de seu primeiro setor, alguns atributos do arquivo, incluindo data de criação e alteração. Parecia com uma lista telefônica: nomes (de arquivos) seguido de números (seus atributos). Por isso recebeu o nome de “directory”, o nome pelo qual as listas telefônicas são conhecidas nos EUA. E que foi (mal) traduzido para o português como “diretório”.

Já a segunda lista era mais complexa. Suas “entradas” consistiam apenas de números, uma enorme sucessão deles, cada um correspondendo a um setor do disco (ou seja: era uma tabela com tantas “entradas” quantos eram os setores do disco). Através dela, por um método notavelmente engenhoso (que não cabe descrever aqui mas que, aos que se interessarem pelo assunto, está detalhadamente descrito na série de colunas “Microcosmos” publicadas em O Globo nos primeiros meses de 1995 e disponível na seção < http://www.bpiropo.com.br/escritos.htm > Escritos do Sítio do Piropo), conhecida a posição do primeiro setor que continha um arquivo qualquer (informação obtida na entrada correspondente do “diretório”) podia-se localizar, um a um, todos os demais. Esta tabela recebeu o nome de FAT (“File Allocation Table”).

Este modo de encontrar arquivos em disco, ou seja, este sistema de arquivos, era tão dependente desta tabela que recebeu seu nome. Ficou conhecido por “FAT”. As primeiras tabelas tinham entradas de doze bits, mas foram logo abandonadas em favor de tabelas com entradas de dezesseis bits, o que fez o sistema passar a ser conhecido por “FAT 16”. Mais tarde o aumento da capacidade dos discos magnéticos obrigou um novo aumento do tamanho das entradas da FAT, que passaram a 32 bits e levou o sistema a ser conhecido por “FAT 32”.

No início da era PC não existiam discos rígidos. Quer dizer: existir, existiam. Mas dificilmente seria possível encaixar um deles no interior do gabinete de um micro pessoal. Veja, na Figura 2 (obtida não sei onde; ela circula na Internet há tanto tempo anexada a tantas mensagens de correio eletrônico que já a recebi dezenas de vezes; se alguém souber a fonte original terei prazer em citá-la), um desses pioneiros. Segundo consta, um disco rígido fabricado pela IBM em 1956 para o 305 RAMAC, seu primeiro computador equipado com disco rígido. A capacidade? Menor, bem menor que a de qualquer cartãozinho de memória usado hoje em micros de mão e máquinas digitais. O bicho, que pesava perto de uma tonelada, armazenava, imaginem, cinco gordos Megabytes (por extenso, para não deixar dúvidas).

Figura 2: Disco rígido de 5 MB em 1956

Mas, como é notório, os discos rígidos “encolheram”. E em 1982, um ano depois do lançamento do PC e com seu sucesso de vendas, começaram a aparecer os primeiros discos rígidos capazes de serem integrados aos micros pessoais. O que propiciou duas evoluções: o lançamento da linha XT (de “eXtended Technology”), nada mais que um PC com disco rígido, e o de uma nova versão do DOS, o DOS 2.0, com um sistema de arquivos hierárquico.

Como é que é?

Explico. Embora o tamanho físico do disco rígido tenha se reduzido drasticamente (o lançado para o XT era mais ou menos do tamanho de um tijolo, dos médios), sua capacidade não aumentou na mesma proporção: cabiam nele os mesmos 5 MB de seu bisavô mostrado na foto. Mas não se deixe enganar: em uma época em que os maiores disquetes tinham 360 KB de capacidade, um disco rígido de 5 MB era um portento. E não dava mais para manter uma lista de entradas para todos os seus arquivos porque, por projeto, o “diretório” de um disco magnético não podia conter mais de 120 entradas (e qualquer um que tenha uma vez na vida recebido a frustrante mensagem de erro “diretório cheio” há de se lembrar disso). E em um disco de 5 MB cabiam muito mais que 120 arquivos.

A solução foi simples: rebatizar o “diretório” do disco de “diretório raiz” e fazer com que algumas de suas entradas, em vez de apontarem para arquivos, apontassem para novos “diretórios” (listas de arquivos) que passaram a ser conhecidos como “subdiretórios” que, por sua vez, podiam conter não apenas arquivos como também outros diretórios a eles subordinados e assim por diante. Para apontar para os demais setores de cada arquivo estes “subdiretórios” usavam a mesma FAT da versão anterior, localizada nas primeiras trilhas do disco. Diz-se de uma estrutura assim organizada (diretórios que contêm diretórios que por sua vez podem conter outros diretórios e assim por diante) que “obedece a uma hierarquia” e por isso o sistema de arquivo dela derivado é um sistema hierárquico.

Em essência, esta foi a grande mudança introduzida no sistema de arquivos do DOS 2.0. O restante pouco mudou. E se isto lhe faz lembrar vagamente a estrutura atual de seus discos rígidos, com “diretórios” substituídos por pastas que podem conter outras pastas além de arquivos, não é por acaso: o sistema de arquivos FAT vem sendo usado até hoje em algumas versões de Windows e, opcionalmente, até em Windows XP. Ou seja: tem muita gente que ainda usa em Windows o mesmo sistema de arquivos do início da era DOS (bem, na verdade uma evolução dele: o sistema FAT 32, com algumas mudanças como o aumento do número de caracteres usados para nomes de arquivos para 255 e mais alguns aperfeiçoamentos, mas cuja estrutura básica sofreu pouquíssimas alterações) no qual os diretórios são chamados de pastas.

O fato notável de que algo aparentemente tão singelo tenha sobrevivido tantos anos alterando tão pouco sua estrutura básica deve-se à extraordinária engenhosidade com que foi concebida a tabela de alocação de arquivos. Mas, por melhor que fosse, evidentemente o sistema tinha lá suas desvantagens, pouco notadas nos primórdios da era da informática pessoal, mas que foram se tornando cada vez mais evidentes na medida que evoluíam tanto o hardware quanto os sistemas operacionais. A mais óbvia era o crescimento excessivo da FAT, obrigada agora a “apontar” para um número cada vez maior de setores (ou conjunto de setores denominados “clusters” para evitar crescimento ainda maior) dos discos modernos, que embora fisicamente menores, apresentam uma capacidade centenas de milhares de vezes maior que a do pioneiro de 5 MB (embora continuem usando setores de 512 bytes). Além disso, recursos de segurança como permissões de uso de arquivos (ou seja, quem pode ter ou não acesso a determinados arquivos), criptografia e compressão de arquivos, não eram aceitos pela boa e velha FAT nem havia como inclui-los. Portanto se impunha o desenvolvimento de um novo sistema de arquivos.

Com esta idéia em mente, durante os anos oitenta do século passado a MS deitou mãos à obra, inicialmente em parceria com a IBM, com a qual então desenvolvia em conjunto o novo sistema operacional OS/2.

O sistema operacional desenvolvido pela dupla MS / IBM e adotado no OS/2 denominou-se HPFS (“High Performance File System”, ou sistema operacional de alto desempenho) e foi usado pela MS na versão OS/2 1.0, lançada juntamente com a IBM no final de 1987. A partir de então a MS passou a desenvolver sozinha seu próprio sistema de arquivos, que recebeu o nome de NTFS (New Technology File System) por ter sido adotado pela primeira vez na versão pioneira do Windows NT lançada pela MS seis anos depois. Este sistema, com algumas alterações e aperfeiçoamentos, é usado até hoje pelos novos sistemas operacionais da MS, inclusive Windows 2000, XP, Server 2003, Server 2008 e Vista.

O NTFS é um sistema de arquivos moderno que herdou muito do HPFS que a MS havia desenvolvido em conjunto com a IBM que, por sua vez, havia adotado alguns conceitos do Unix, então usado basicamente em máquinas de grande porte.

Uma das características mais importantes do NTFS é sua flexibilidade. Tanto assim que vem incorporando novas características à medida em que evolui (Vista já usa a versão 6.0 do NTFS). E o responsável por isto é o uso de “metadados” distribuídos por um conjunto de arquivos de sistema ocultos e inacessíveis aos usuários.

“Metadado” é um conceito interessante que vem se tornando cada vez mais usado, embora pouco compreendido. Vamos gastar algum tempo com ele que, garanto, será tempo bem empregado.

“Meta” é um prefixo de origem grega cujo significado, segundo o Houaiss, é “no meio de, entre; atrás, em seguida, depois; com, de acordo com, segundo; durante”. No termo “metadado” ele tem a acepção de “em seguida”, “depois de”, no sentido de “a respeito de”. Então, por “metadado” (ou “metainformação”) se entende um “dado sobre um dado” (ou uma “informação sobre uma informação”).

Dito assim, na língua culta, parece coisa complicada. Mas na verdade o conceito é de uma simplicidade franciscana. Expliquemo-lo de uma forma inteligível para o comum dos mortais.

Metadados são usados para facilitar a compreensão, a localização e o manejo ou gerenciamento dos dados correspondentes. Vejamos um exemplo corriqueiro. É provável que você tenha uma câmara digital e, quem sabe, uma coleção de fotos, digitalizadas em seu computador ou empilhadas em uma prateleira. Cada foto tem um conjunto de características que ajudam a classificá-la.

As principais destas características são: o autor da foto, a data em que foi produzida e a descrição da imagem. Além destas, podem ser agregadas uma infinidade de outras, como as dimensões da foto, a marca e modelo da câmara fotográfica, condições em que foi tirada (tempo de exposição e abertura do diafragma), distância focal da lente usada e mais um mundo de outros detalhes. Pois bem: o conjunto (ou um subconjunto, ou seja, apenas algumas) destas características constituem os “metadados” da foto.

Pode-se imaginar metadados de qualquer coisa. Um livro, por exemplo: título, autor, classe (ficção, não ficção), assunto, formato, tipologia usada, encadernação e mais um mundo de outros. Um carro: marca, modelo, ano, cor, tipo, número de portas, potência do motor, etc. Uma música: título, autor, letrista, estilo, intérprete, e por aí vai. Em suma: de tudo o que se possa imaginar que faça parte de uma coleção, ou conjunto, pode-se listar um grupo de metadados.

Para que servem os metadados? Ora, sobretudo para organizar e encontrar aquilo a que eles dizem respeito. Imagine novamente sua coleção de fotos. Empilhe-as (ou, se são digitais, armazene-as todas em uma única pasta). Agora encontre no meio daquelas centenas, talvez milhares de imagens de diferentes tamanhos e formatos, a foto 3x4 que você “tirou” de seu irmão quando ele tinha quatro anos de idade. Se você tivesse as imagens classificadas por metadados, mesmo estando todas na mesma pilha (ou pasta) seria fácil encontrar a que você procura. Afinal você conhece o autor, assunto, formato e data aproximada. Junte apenas aquelas que satisfazem a estes metadados e você terá sua imagem – ou pelo menos um pequeno grupo de imagens entre as quais ficará bem mais fácil encontrar a que deseja.

Pois é isso. Se o conceito de “metadados” lhe parecia complicado, agora provavelmente ficou mais fácil. Afinal, embora pouca gente se dê conta disso, é através dele que organizamos nossa vida e encontramos tudo o que procuramos em nosso dia-a-dia. Senão, como encontrar aquela camiseta azul, sem gola e mangas curtas, na pilha de camisetas do armário? Você passou a vida recorrendo a metadados para encontrar coisas e não fazia a menor idéia disso. Curioso, nénão?

 Pois bem: se toda coleção de objetos, físicos ou virtuais, tem seus metadados, por que não a de arquivos?

Pois é neste conceito que se baseia o sistema de arquivos NTFS.

Em vez de usar apenas duas estruturas (diretório e FAT) para identificar, gerenciar e localizar arquivos no disco, o NTFS usa diversos arquivos ocultos, denominados “arquivos de sistema”, para armazenar diferentes conjuntos de metadados referentes aos arquivos contidos no disco. Os nomes destes arquivos começam sempre pelo caractere “cifrão” (“$”; na verdade, um dos mais importantes, aquele que no sistema FAT corresponderia ao diretório raiz, chama-se simplesmente “$”) e nenhum deles é acessível ao usuário, nem mesmo na qualidade de administrador.

O mais importante deles é a MFT (“Master File Table” ou tabela mestre de arquivos, cujo nome em disco é “$Mft”). Trata-se de uma tabela que contém metadados sobre todos os arquivos e diretórios (ou pastas) contidos no disco. Seus primeiros 16 registros são reservados e contêm informações sobre a própria MFT. Do décimo sétimo em diante, cada registro corresponde a um arquivo.

Uma das grandes “sacadas” da MFT é o fato de que, se um arquivo é muito pequeno, menor que o espaço destinado a seus dados na MFT, o próprio arquivo é incluído na MFT, ou seja, não será preciso “gastar” espaço em disco para arquivos mínimos: encontrada sua entrada na MFT, encontrado foi o arquivo e ele é lido de lá mesmo. Mas a flexibilidade não pára aí: se o arquivo for muito grande ou se as informações sobre ele (seus metadados) necessitarem de mais espaço que um único registro da MFT, ele receberá tantos registros quantos necessários. E os diretórios (ou pastas) são “vistos” pelo NTFS como qualquer outro arquivo, portanto a eles correspondem igualmente entradas na MFT. A MFT (ou pelo menos seus primeiros 16 registros) é tão importante que uma segunda cópia destes 16 registros é um dos outros arquivos de sistema (“$MftMirr”, de “MFT Mirror”, ou espelho da MFT).

E quais são os demais? No total são nove (onze, se incluirmos as duas cópias da MFT). Todos contendo metadados, ou seja, dados sobre os arquivos armazenados em disco. Um deles, o “$Boot”, contém o “setor de inicialização” usado para “montar” o volume (“Ah!”, vociferarão os torcedores do Linux, “montar volume! Eu não disse que eles tinham copiado do Unix?”) e inicializar o sistema. Outro é o “$LogFile”, que contém uma lista de transações realizadas e que é usada no caso de falha da máquina para recuperar o sistema de arquivos (sim, o NTFS é auto-recuperável, portanto se algum arquivo se corromper devido a um desligamento abrupto da máquina ou algo parecido, o sistema efetuará automaticamente as correções necessárias; além disso, apelando para outro dos arquivos do sistema, o “$BadClus”, caso um “cluster” – conjunto de setores usado como unidade de alocação de espaço em disco – apresente um defeito físico, o sistema anota este “cluster” como defeituoso, realoca seus dados em outro “cluster” e segue adiante sem a necessidade de executar periodicamente utilitários de verificação do estado do disco).

O NTFS é um sistema de arquivos interessantíssimo. Como pouca coisa nele é fixa por definição, ele permite atualizações e aperfeiçoamentos sem perder a compatibilidade com versões anteriores. Por exemplo: o serviço “Active Directory”, que armazena informações sobre recursos de toda uma rede e permite a administradores de redes atribuir políticas de segurança, distribuir software e controlar a rede, foi criado em 1996 e implementado em uma nova versão do NTFS inteiramente compatível com as anteriores.

Mas o objetivo desta coluna não é entrar em detalhes técnicos, apenas dar uma idéia geral sobre os sistemas de arquivo atualmente disponíveis para Windows. Sugiro a quem desejar saber mais sobre o NTFS uma consulta ao sítio < http://www.ntfs.com/ > NTFS.com, um formidável repositório de informações sobre o assunto. Vale a pena.

Mas o NTFS ainda usa o velho estilo de organização hierárquica: “Meu computador” (ou “Computador”, em Vista) contendo unidades de disco que contêm, cada uma, seu diretório raiz e pastas que por sua vez podem conter outras pastas.

Afinal, para um sistema que usa metadados, não haveria uma forma mais racional de ajudar o usuário a encontrar seus arquivos? Algo mais parecido com o que ele adota em sua vida diária para encontrar objetos?

Hoje, não. Mas no futuro, quem sabe, Windows disporá de um sistema de armazenamento que se aproveite melhor do uso de metadados. Que poderia se chamar “Sistema futuro de armazenamento para Windows”, ou Windows Future Storage.

Não lhe parece um bom nome?

 

B. Piropo