Em um sistema de arquivos de estilo Unix, um nó de índice, informalmente referido como um nó-i (inode), é uma estrutura de dados usada para representar um objeto do sistema de arquivos, que pode ser uma de várias coisas, incluindo um arquivo ou diretório. Cada inode armazena a(s) localização(ões) de atributos e bloco de disco dos dados objetos do sistema de arquivos. Atributos de objeto do sistema de arquivos podem incluir manipulação de metadados (por exemplo, alteração, acesso, tempo de modificação), bem como dados de proprietário e permissão (por exemplo, id de grupo, id de usuário, permissões).
Um diretório do Linux lista outros objetos do sistema de arquivos pelo nome, normalmente identificando o objeto listado referindo-se ao seu nó-i. O diretório contém uma entrada para si mesmo, seu pai e cada um de seus filhos.
O nó-i armazena informações sobre um arquivo, tais como o dono, permissões e sua localização.
Terminologia e conceitos
Um dispositivo de blocos é um meio de armazenamento em que a leitura e gravação são efetuados usando um conjunto de bytes, denominado setor ou bloco, cujo tamanho é fixo (no caso do disco rígido, o setor geralmente possui 512 bytes). Um sistema de arquivos lê e grava blocos, que são grupos de setores contíguos. Em sistemas derivados do UNIX, como o UFS1 ou Ext2, os blocos tipicamente têm 1024 bytes (2 setores), 2048 bytes (4 setores), 4096 bytes (8 setores) ou 8192 bytes (16 setores). A Microsoft usa a expressão unidade de alocação (cluster) com o mesmo significado de bloco.
Um arquivo é um conjunto de bytes armazenados num dispositivo de blocos. Um diretório é um arquivo cujo conteúdo é uma tabela, onde cada entrada contém um nome de arquivo ou subdiretório e um ponteiro (normalmente um número inteiro) para um nó-i. Um hard link é uma referência a um arquivo por outro nome no mesmo sistema de arquivos.
As permissões são parâmetros definidos por bits sinalizadores (flags) que determinam os direitos de leitura, escrita e execução atribuídos a três grupos de utilizadores: o dono do arquivo ou diretório, um determinado grupo de usuários, e o resto dos usuários.
Estrutura
Os sistemas de arquivos Ext2 e UFS1 são semelhantes em sua estrutura. Neles, o nó-i contém, basicamente, as mesmas informações:
- Permissões. São 9 os bits de permissão: leitura (r), gravação (w) e execução (x); cada um dos quais atribuídos ao dono (u, de user), grupo relativo (g, de group), outros usuários (o, de others), ou todas as classes (a, de all). Além desses, existem o sticky bit, SUID e SGID.
- Tipo de arquivo. Um arquivo pode ser do tipo regular (comum), diretório, associado a dispostivo de bloco ou de caractere, FIFO (named pipe) ou soquete (socket).
- Identificação do dono e do grupo relativo. A identificação é feita por um número inteiro e não pelo nome (UID e GID, respectivamente).
- Tempos (MAC times): último acesso (atime - access time); última alteração do nó-i (ctime - change time); última alteração do arquivo (mtime - modification time).
- Contador de referências (link count). Quando uma referência (nome) do arquivo é apagada, o contador é decrementado; quando o contador chega a zero, o nó-i e os blocos alocados para o arquivo são liberados.
- Tamanho do arquivo em bytes.
- Endereços dos blocos alocados para o arquivo. 12 blocos são alocados diretamente pelo nó-i. Para arquivos que necessitem de mais espaço (12 blocos de 4 KiB limitam o tamanho do arquivo a 48 KiB; já para blocos de 8 KiB, o tamanho máximo será de 96 KiB), pode-se endereçar um bloco indireto simples, o qual contém os endereços de blocos do arquivo (para blocos de 4 KiB, o bloco indireto simples contém o endereço de 1024 blocos do arquivo; se o bloco for de 8 KiB, serão endereçados mais 2048 blocos para o arquivo). É possível alocar ainda um bloco indireto duplo, que contém os endereços de mais blocos indiretos simples e, finalmente, um bloco indireto triplo, que contém endereços de mais blocos indiretos duplos. Portanto, o nó-i do Ext2 (no Linux, com bloco de 4 KiB) suporta arquivos com tamanho máximo de cerca de 4 TiB, enquanto o nó-i do UFS1 no Solaris (com bloco de 8 KiB) suporta arquivos com tamanho máximo de 16 TiB, aproximadamente.
Observe-se que o nome do arquivo não está contido no nó-i. O nome estará apenas no diretório-pai do arquivo, associado ao seu ponteiro para o nó-i correspondente.
Há um nó-i para cada arquivo, e cada arquivo é unicamente identificado pelo sistema de arquivo no qual reside por seu número de nó-i neste sistema.