O que é um inode? Explicação do seu funcionamento e utilização
Os inodes são uma estrutura de gestão utilizada nos sistemas de ficheiros dos sistemas operativos de tipo Unix. Os inodes representam cabeçalhos de dados ou estruturas de dados semelhantes que contêm os metadados dos ficheiros armazenados. Os metadados incluem informações como os direitos de acesso, a localização do ficheiro, o grupo, o número do utilizador e a hora de modificação e acesso.
O que é um inode?
Inode significa «index node» e trata-se de um método de gestão de ficheiros que tem desempenhado um papel importante desde a introdução do sistema operativo Unix e de outros sistemas baseados nele, como o Linux ou o macOS. A principal função do Inode nos sistemas de ficheiros é referenciar, gerir e localizar determinados ficheiros através de números de Inode únicos e inconfundíveis. Os Inodes são estruturas de dados definidas, que descrevem e gerem determinados ficheiros através de metadados. Dependendo do sistema de ficheiros em que se encontram, utilizam uns metadados ou outros.
Os inodes não contêm informações sobre o nome de um ficheiro, mas costumam incluir as seguintes informações sobre ficheiros ou blocos de ficheiros:
- Tipo e permissões de acesso
- Número de ligações físicas (em inglês, hard link)
- Número de utilizador (UID)
- Número do grupo (GID) ou GUI (GroupID)
- Tamanho do ficheiro em bytes
- Data da última modificação (mtime)
- Data da última alteração de estado (ctime)
- Data do último acesso (atime)
- Endereço dos blocos de dados
- Endereço da entrada indireta do bloco
- Número de ligações
- Número da versão
Como funcionam os inodes?
Os sistemas Unix não gerem as partições de um disco rígido através de agrupamento em clusters, mas sim sob a forma de blocos de dados. Ao contrário dos sistemas DOS e das suas tabelas FAT, aqui são criados inodes para gerir e referenciar os dados do diretório. Se os dados forem armazenados em blocos fixos do disco rígido, é possível que um ficheiro exceda a capacidade de armazenamento do bloco. Neste caso, o sistema procura outro bloco disponível para guardar o resto do ficheiro. É precisamente aqui que os inodes entram em ação.
Os inodes permitem localizar ficheiros armazenados no sistema através dos seus dados de referência, dos seus diretórios e dos seus números de inode únicos. A principal vantagem dos números de inode é que não dependem do nome do ficheiro. Se copiar um ficheiro e alterar o seu nome, poderá encontrá-lo facilmente, uma vez que mantém o mesmo número de inode que o ficheiro original. Isto também se aplica no caso dos links físicos que os utilizadores criam com o comando ln do Linux. Os links físicos são um sistema de gestão interna que oferece a vantagem de os inodes fazerem referência tanto aos ficheiros originais como às suas cópias de segurança associadas, sem consumir memória adicional.
Dependendo do sistema, os inodes podem ser imutáveis, pelo que pode acontecer que um ficheiro exceda o tamanho dos inodes disponíveis. Neste caso, o inode original remete para outro inode, também chamado de bloco de redirecionamento, que contém o restante dos metadados.
Dependendo do sistema, os inodes disponíveis podem não ser suficientes para um grande número de ficheiros, uma vez que têm um tamanho predefinido. Neste caso, o sistema de ficheiros deve ser reestruturado com um maior número de inodes.
Onde são utilizados os inodes?
Os inodes servem para gerir e estruturar sistemas de ficheiros e são utilizados tanto em sistemas Linux de particulares como em soluções de serviços geridos. É por isso que os utilizadores e as empresas que procuram soluções na nuvem para servidores com sistemas operativos Unixóides podem utilizar as estruturas de dados dos inodes. Tal como acontece com a maioria dos serviços na nuvem, pode tratar-se tanto de uma nuvem pública como de uma nuvem privada, consoante as necessidades de cada um.
Que sistemas de ficheiros suportam inodes?
Todos os sistemas operativos Unix, como o Linux ou o macOS, utilizam inodes. No entanto, a estrutura e a composição dos inodes podem variar consoante o sistema de ficheiros utilizado. Por exemplo, os sistemas ext2/ext3/ext4 utilizam uma estrutura em forma de listas ou tabelas de inodes como cabeçalhos de dados. A lista de inodes é criada automaticamente ao instalar o sistema e não pode ser modificada posteriormente. Além disso, os inodes dos sistemas ext4 de 256 bytes ocupam um espaço de armazenamento fixo que não pode ser utilizado para qualquer outro fim. Um inode descreve um ficheiro ou uma pasta do sistema de dados de acordo com os seus metadados.
O xfs ou o btrfs são sistemas de ficheiros mais complexos, contrastando com o ext2/ext3/ext4, uma vez que os inodes só são criados quando são necessários para localizar determinados ficheiros. No caso do xfs ou do btrfs, não são utilizadas listas ou tabelas de inodes. Também é possível encontrar diferenças na forma de funcionamento dos inodes dos discos rígidos (denominados «Disk Inodes») e dos inodes utilizados para processar a memória no Linux (denominados «In Core Inodes»).
Uma visão geral dos comandos Inode mais importantes
Dependendo do sistema de ficheiros utilizado, existe um limite específico de inodes disponíveis, pelo que é importante saber quais os inodes que estão a ser utilizados e quanto espaço ocupam no sistema. Especialmente se, por exemplo, não houver inodes suficientes para todos os ficheiros.
Comando para mostrar o espaço ocupado no sistema de ficheiros
Utilize o seguinte comando para verificar quanto espaço está ocupado por inodes no sistema de ficheiros:
~ find /home /tmp -xdev -printf ´%h \n´ | sort | uniq -c | sort -k 1 -nr | head -n 20shellComando para obter uma visão geral da atribuição atual de inodes
Utilize o seguinte comando para mostrar todos os inodes que estão atualmente em uso no sistema:
df -ihshellO comando anterior fornece uma visão geral sobre a utilização dos inodes, incluindo o sistema de ficheiros associado, o número total de inodes, a quantidade de inodes atualmente em uso e os inodes que estão livres:
df -ishellComando para mostrar um número de inode
Utilize o seguinte comando para apresentar o número de inode de um determinado ficheiro:
ls -ishellComando para mostrar todos os ficheiros associados a um inode
Utilize o seguinte comando para ver todos os ficheiros (incluindo os ficheiros originais, cópias de ficheiros e cópias de segurança) que têm como referência um determinado inode:
-inumshellDicas para tirar o máximo partido dos inodes
Um elevado consumo de inodes nem sempre significa que a sua capacidade de armazenamento esteja a esgotar-se. Muitas vezes, um maior consumo de inodes também pode ser causado por pequenos ficheiros supérfluos, como ficheiros temporários TMP, caches ou sessões. O problema costuma ser resolvido através da eliminação automática de todos os ficheiros com mais de 14 dias. Para tal, execute uma tarefa cron com o seguinte comando:
03 *** /usr/bin/find /path/to/files/* -type f – mtime +14 -delete > /dev/null 2>&1shellO que acontece se houver muito poucos inodes?
Se não houver inodes suficientes disponíveis para todos os ficheiros, é possível que:
- As aplicações bloqueiem
- Perda de dados
- Ocorrer uma reinicialização não programada
- Os processos travarem e não reiniciarem
- Os processos programados não sejam iniciados automaticamente
Se a capacidade dos inodes estiver a 100 %, é aconselhável libertar a memória ocupada. Outra possibilidade é reestruturar o sistema de ficheiros e, assim, aumentar o número máximo de inodes, embora seja um processo relativamente complexo.