Como Funcionam os Inodes do Linux?

Se você tem usado Linux por tempo suficiente, já deve ter visto o termo “inodes”. É algo que aparece ocasionalmente, mas não afeta o que você está fazendo. Aqui vamos explicar o que são inodes e como funcionam.
O que são Inodes?
Em uma biblioteca, todos os livros são organizados por gênero, nome do autor ou faixa etária do público. Se você quiser localizar um thriller de “Bobby Daniels”, você iria diretamente para a seção de thrillers e começaria a procurar nomes de autores que começam com “B”. Assim como em uma biblioteca, todos os arquivos em um sistema Linux são organizados para recuperação e uso eficientes. Um inode é uma entidade que auxilia na organização de arquivos dentro de um sistema Linux.
O que é Metadados de Arquivo?
Vamos supor que temos um arquivo chamado “sample.txt” contendo os dados “hello”.
Este arquivo possui alguns dados e informações relevantes, como tamanho do arquivo, permissões, propriedade de usuário e grupo, timestamps de criação/acesso/modificação, contagem de links, etc. Todas essas informações são coletivamente referidas como metadados de arquivo.

O que são Sistemas de Arquivos?
Em um dispositivo de armazenamento como um disco rígido, uma partição é formatada como um sistema de arquivos antes de ser usada para armazenamento de arquivos. Um sistema de arquivos é o bibliotecário do disco rígido. Formalmente, é um conjunto de estruturas de dados e algoritmos que trabalham em conjunto para armazenar arquivos de maneira metódica na partição.
Partições em sistemas Linux são frequentemente formatadas com EXT4. Outros sistemas de arquivos como B-Tree File System (BTRFS), Reiser File System, ZFS, etc. também estão disponíveis para uso.
Ligando Tudo Junto
Um inode é uma estrutura de dados no Ext4 que contém todos os metadados de um arquivo.

Claro que haveria inúmeros arquivos em um sistema de arquivos. Como você já deve ter adivinhado, cada arquivo teria seu próprio inode. Para identificar os inodes de forma única, cada inode é numerado.
Como seria a Numeração dos Inodes?
Os números dos inodes em um sistema de arquivos começam a partir de 1. Os primeiros dez inodes são reservados para uso do sistema. Os arquivos de usuário têm seus metadados armazenados a partir do inode 11. Todos os inodes são organizados de forma ordenada em uma Tabela de Inodes.
Uma entrada na Tabela de Inodes teria 256 bytes de tamanho. Para um arquivo, o Linux organiza inteligentemente todos os metadados dentro de 256 bytes! Além disso, um inode para um arquivo também teria informações sobre onde, no sistema de arquivos, os dados do arquivo estão localizados. Lembre-se – apenas os metadados do arquivo são armazenados no inode.
O número total de inodes em um sistema de arquivos depende do espaço disponível e do número de arquivos que podem ser armazenados na partição.
Como os Inodes são alocados e desalocados?
À medida que o usuário adiciona arquivos a um sistema de arquivos recém-formatado, os inodes a partir do 11 são alocados para manter os metadados do arquivo.
Há outra estrutura de dados chamada “Inode Bitmap” para rastrear o status de alocação de um inode. É uma coleção de bits que atua como um mapa.
Vamos considerar oito bits no bitmap de inodes para denotar o status de alocação dos inodes 11 a 18, conforme mostrado na tabela abaixo. Um valor de 1 no bitmap significa que o inode está alocado, ou seja, usado para manter os metadados de um arquivo. Um valor de 0 no bitmap significa que o inode não está atualmente em uso. Aqui, podemos ver que o inode 17 está em uso.

Caso o arquivo que tem seus metadados no inode 17 seja deletado, então seu status correspondente no bitmap se tornaria 0, indicando que está livre para ser usado por outro arquivo.

Como visualizar o Número do Inode de um arquivo?
Existem duas maneiras de fazer isso.
A primeira é usando o comando ls com a opção -i, seguido pelo nome de um arquivo. O primeiro campo na saída é o número do inode que contém os metadados de “sample.txt”.
As mesmas informações podem ser obtidas usando o comando stat seguido pelo nome do arquivo.

Para visualizar o número total de inodes disponíveis para uma partição, o comando df pode ser usado com a opção -i.
Na partição “ /dev/sda4 “, 404754480 inodes estão disponíveis para uso, dos quais apenas 359044 inodes estão utilizados.
Conclusão
Por natureza, a Tabela de Inodes organiza meticulosamente os metadados de todos os arquivos em inodes, juntamente com informações sobre a localização dos dados do arquivo. Tudo o que discutimos sobre inodes do Linux é apenas a ponta do iceberg. Para mais informações sobre seu funcionamento interno, você pode dar uma olhada neste link.