Sistemas de Ficheiros

Toda a evolução que pudemos apreciar no desenvolvimento do Capítulo anterior permite-nos atualmente dispor de uma enorme quantidade de memória de massa num pequeno prato, mas organizada de tal forma que só mesmo o controlador do HDD sabe lidar com ela. Controladores estes que são o segredo do sucesso de muitos fabricantes, duma enorme complexidade lógica, consequência da permanente investigação de centenas ou milhares de Engenheiros.
Com toda esta complexidade põe-se agora a questão:

Então como é que nós lidamos com esses dados quando precisamos de aceder ao HDD? Temos que indicar o CHS de cada dado e a forma como todos eles estão arrumados para os obter? Temos que referir todos os Setores onde um determinado conjunto de dados que precisamos está guardado? E como é que nós sabemos quais os setores em que o controlador do HDD os guardou?

É evidente que a resposta a todas estas questões é que nós não sabemos nem podemos lidar com um HDD a este nível. Não seria imaginável que um programador, quando necessitasse de aceder a um determinado grupo de dados que guardou ou pretende guardar no HDD tivesse que conhecer todos os pormenores da sua localização.

Foi aqui que os SO (Sistemas Operativos) nos vieram ajudar, criando uma abstração que representa cada tipo de conjunto de dados que nós criamos e manuseamos:
O Ficheiro (File) é a abstração que existe entre os humanos e o HDD.
Um Ficheiro é composto pelo conjunto de informação (bits) que em conjunto forma algo que para nós tem um significado, como por exemplo:

um programa, um filme, uma música, uma fotografia, um texto, uma base de dados, uma palavra, este livro, aquele pequeno programa que fizemos em Assembly quando falámos da CPU, etc…

Tudo o que se regista em HDD é sob a forma de Ficheiros, ficheiros esses que podem conter a essência do funcionamento do nosso computador, ou serem simples armazenamento de dados, cuja dimensão pode ir de alguns Bytes até centenas de Gigabytes ou mais.

Portanto, para nós tudo o que é a informação com que trabalhamos está contida em ficheiros, que o HDD guarda em Setores por ele espalhados, da forma que o seu controlador lhe indicar. Nós falamos com o HDD em ficheiros, aquilo que entendemos e tem significado lógico para nós, a tal abstração. O HDD transforma-a em posições CHS que só ele conhece e de que nós nos abstraímos.

O Cluster é mais uma abstração lógica que estes humanos arranjaram no HD para conseguirem lidar com ele. O cluster é um bloco de dados formado por um determinado conjunto de setores, desde 1 até 64.
Mas se já tínhamos os setores, uma unidade física em disco que agrupava muitos bytes, porquê agora mais esta unidade lógica a agrupar setores?
Para isto se poder entender, precisamos de dizer que cada Cluster só pode conter um Ficheiro ou parte do mesmo. Isto é, um Ficheiro pode dividir-se por muitos Clusters mas um Cluster só pode conter um Ficheiro.
A dimensão do cluster num HDD é fixa e única, isto é, é a mesma para todo o HDD. Podemos no entanto variar a dimensão do Cluster em diferentes HDD que irão armazenar diferentes tipos de ficheiros.
Para que tal seja possível, não precisamos mesmo de várias unidades físicas de HDD pois, como veremos, num mesmo HDD podem ser criados vários Volumes, correspondentes a Partições do mesmo HDD.

Um HDD para nós e para o SO contém dados organizados em ficheiros. Para o controlador do HDD os ficheiros são uma transparência. Simplesmente não existem, só há Setores, organizados em geometrias CHS, onde vai colocar ou procurar os dados a que pretendemos aceder, os tais ficheiros, arrumados à sua maneira, certamente a mais eficiente nos seus termos físicos. O SO fala em ficheiros e o HDD em CHS.

Mas não é possível atualmente ensinar o SO a falar em CHS, pois a geometria dos HDD evoluiu de tal forma que cada fabricante tem os seus algoritmos de organização e controladores próprios. Então lá vem mais uma abstração, o LBA (Logical Block Addressing) usado pelo SO para falar com o controlador do HDD, que por sua vez o traduz em CHS deixando pelo meio um desatualizado BIOS por meras questões de compatibilidade com versões mais antigas. Veremos como.
Mas nós não vamos endereçar ficheiros em LBA quando lhes queremos aceder. Nós limitamo-nos a comunicar qual o ficheiro que queremos. O resto é com o SO. Os Sistemas de Ficheiros são a forma que cada SO arranjou para organizar os ficheiros no HDD. E não só. Hoje em dia um sistema de ficheiros deve não só organizar os ficheiros, mas também garantir a segurança e restrições de acesso que tenham que ser impostas aos ficheiros e a  consistência da sua organização.
Poucas palavras para uma enormidade de trabalho. É o que vamos tentar mostrar como é feito, dentro dos limites do razoável e inseridos num determinado objetivo.

A nossa análise vai incidir mais exaustivamente sobre um Sistema de Ficheiros de grande implantação atual, o NTFS (New Technology File System), o atual Sistema de Ficheiros do Windows, já vindo do XP nos SO de PC,  agora a ser substituído a nível dos servidores, para já no Windows Server 2012, pelo ReFS (Resilient File System).

Vamos acompanhar o NTFS nas diversas consultas que faz à sua árvore binária até chegar a um determinado ficheiro que escolhemos. Vamos analisar ao Byte (também ao bit), através de editores hexadecimais, a composição dos diversos setores do HDD que vão sendo indicados por LBA e a forma como nos dizem o que são, as suas características e para onde devemos ir a seguir. Veremos o que são os ficheiros de metadados, os atributos dos ficheiros, os seus cabeçalhos, a MFT (Master File Table), as suas entradas, os Index files as Cadeias de Data Run e muito mais.

Vamos perceber o que é a Formatação de um HDD e os seus dois níveis. Vamos começar pelo MBR (Master Boot Record), independente de qualquer SO, que nos dá os elementos necessários para o Boot do Sistema, a composição do HDD em Partições (terá sempre pelo menos uma, aquela em que estará instalado o SO) e o Sistema Operativo instalado.
Daí vamos para o PBR (Partition Boot Record), aí já entregues pelo BIOS ao SO instalado, iniciando assim o caminho por toda a árvore binária até ao ficheiro escolhido.
Pelo caminho e conforme necessário iremos vendo como é que o NTFS é organizado e constituído e como vai dando informação do caminho do Ficheiro em LBA.

Por fim iremos fazer uma abordagem mais ligeira do Sistema de Ficheiros FAT (File Allocation Table).

É uma viagem longa este Capítulo, que passa por vários níveis de conhecimento ao longo de diversas partes, convidando-vos a irem até onde vos apetecer e interessar, sabendo desde já que no fim vão encontrar o ficheiro que vos interessa e procuram e

vão ficar a saber como podem encontrar qualquer outro no vosso HDD pela simples leitura dos seus setores com um editor hexadecimal.

Boa viagem.

Ver a síntese global deste trabalho

Inserimos de seguida o índice da edição em livro como forma de descrição dos temas abordados neste Capítulo

C12_Indice_Prt