Por que o tamanho do inode é fixo?

2

Estou lendo sobre sistemas de arquivos e mídia de armazenamento e não consigo entender por que, se eu criar um arquivo de tamanho de um bloco, não posso ter um inode menor do que um arquivo maior. O sistema operacional não pode escolher dinamicamente o tamanho do inode de acordo com o tamanho do arquivo?

    
por sworwitz 16.10.2016 / 15:44

2 respostas

4

Uma razão para os inodes serem fixos é que no formato tradicional do sistema de arquivos Unix (o qual, por exemplo, o ext4 ainda segue bem de perto), os inodes são armazenado no que é essencialmente uma única tabela . Com itens de tamanho fixo, localizar um item com base em seu número de índice é trivial. Com qualquer outra estrutura de dados, seria necessário mais trabalho e, talvez mais importante, mais leituras de acesso aleatório na estrutura de dados.

O tamanho do arquivo em si não influencia o próprio inode, que tradicionalmente armazena a localização dos primeiros blocos de dados. Para arquivos mais longos, o sistema aloca blocos extras (blocos indiretos) para manter os locais no restante. (Veja a página da wikipedia para uma bela foto.)

Eu disse "tradicionalmente", desde O ext4 realmente faz as coisas de maneira diferente, ele pode salvar o conteúdo de links simbólicos no próprio inode (eles são geralmente curtos, então é útil não alocar um bloco inteiro), e a árvore tradicional de blocos únicos é substituída por um caminho de extensões , ou seja, extensões de vários blocos.

Tanto quanto eu posso dizer, no ext4 a razão para suportar inodes maiores que o tamanho mínimo, é permitir que novos campos sejam armazenados e usar o espaço extra para atributos estendidos. Observando a tabela no primeiro link, os campos extras acima dos 128 bytes originais em um inode ext4 armazenam principalmente carimbos de hora de maior precisão. Nos sistemas SELinux, os rótulos de segurança são implementados como atributos estendidos, portanto, poder armazená-los diretamente no inode pode ser muito útil.

Novos sistemas de arquivos como o btrfs, o XFS e o ZFS com formatos menos ortodoxos provavelmente farão as coisas de maneira diferente, e eu não sei muito sobre os sistemas de arquivos usados, digamos, sistemas BSD.

    
por 17.10.2016 / 14:32
2

O próprio inode contém metadados de arquivos e não dados. Como tal, não importa se o tamanho é pequeno ou grande. Além disso, existem inodes para outras coisas além de arquivos simples. Por exemplo. para pipes nomeados, que não possuem dados.

Dito isto, o formato e o tamanho exatos de um inode são específicos do sistema de arquivos e podem ter qualquer tipo de comportamento que o projetista do sistema de arquivos queira. Para sistemas Linux / Unix, o sistema de arquivos deve ser capaz de fornecer um conjunto mínimo de informações no inode, mas os sistemas de arquivos podem armazenar mais que internamente, tanto no disco como na memória.

    
por 16.10.2016 / 15:50