O que é um inode? [duplicado]

5

A documentação dos sistemas de arquivos Unix contém frequentemente o termo 'inode'. O que é isso e o que faz isso? Por que os sistemas de arquivos DOS / Windows não são inodes (ou eles)?

    
por Mnementh 17.12.2010 / 19:48

1 resposta

15

"inode" é o termo informal que se refere a qualquer pedaço de dados no disco que um sistema de arquivos Unix usa para armazenar as informações pertencentes a um único arquivo. Um "inode" tradicionalmente mantém os números de blocos de blocos de disco contendo o conteúdo real do arquivo. Uma entrada de diretório tradicionalmente realizada nome do arquivo, tipo de arquivo, etc. Os dois pedaços de dados foram separados.

Dito isto, muitas coisas do Unixy caem disso. Tradicionalmente, um nome de arquivo não fazia parte do inode. O nome do arquivo veio de um "diretório", um arquivo (que tinha seu próprio inode e conteúdo) que correspondia ao nome do arquivo para o número do inode. Uma macro do pré-processador C permitia que o código passasse do número do inode para o bloco do disco com um cálculo muito pequeno.

Assim, muitos nomes podem se referir ao mesmo inode. Vínculos duros surgem disso. Então, a capacidade de ter "." sempre consulte o diretório atual sem truques. Um diretório sempre contém "." e ".." nomes de arquivos, que correspondem aos números de inode do próprio diretório e ao diretório no qual o diretório reside. "" e ".." nomes de arquivos possuem entradas em cada diretório. Eles não são casos especiais no código do sistema de arquivos que realmente não têm dados em lugar algum.

A hierarquia de arquivos Unix sai dos inodes. Um disco é essencialmente uma matriz linear de "blocos" de um determinado tamanho, 512 bytes, 1 kilobytes, 4 kilobytes, o que quer que seja. O Inode 0 estava sempre em um bloco de disco designado, permitindo que o kernel Unix localizasse a raiz de um sistema de arquivos apenas conhecendo "inode 0" e poderia associar "/" ao inode 9. O Inode 0 também era um arquivo de diretório. "usr", "bin", "tmp", "dev" etc tinham entradas no inode 0. Assim, os inodes permitem mapear uma lista linear de blocos de dados de um disco em uma estrutura hierárquica.

Inodes viviam no disco. No sistema de arquivos original do unix, o primeiro terço ou quarto de um disco era inodes. O resto eram blocos de dados, alocados para arquivos conforme necessário, e cujos números de blocos de disco terminavam em inodes. Vários sistemas de arquivos ao longo dos anos (BSD FFS, por exemplo) tentaram levar em conta a geometria física real do disco, colocando zonas de inodes em lugares diferentes no disco.

O sistema de arquivos "NTFS" do Winodws NT tem algo imediatamente análogo a um inode: entradas na tabela de arquivos mestre. NTFS parece ter herdado isso de seu ancestral, DEC VMS Files-11. Arquivos-11 "cabeçalhos de arquivo" aparecem quase idênticos às entradas em $ MFT.

Eu não sou de todo especialista com outros sistemas de arquivos do Windows / DOS (FAT, FAT32, etc etc), mas os registros na Tabela de Alocação de Arquivos parecem análogos de uma entrada de diretório combinada e inode para mim. Eu imagino que combinar nomeação e hierarquia junto com dados de bloco de disco é o que torna os sistemas de arquivos FAT tão frágeis. Você não pode ter um programa vasculhando dados separados de inode em disco e colocar os arquivos encontrados em "lost + found" - uma vez que a Tabela de Alocação de Arquivos é corrompida, a participação de arquivos nos arquivos é perdida, bem como a participação em arquivos diretório.

    
por 17.12.2010 / 20:25