VídeoTutoriais

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD?

Inodes ou “Index Nodes” são um elemento de sistemas de arquivos que servem para armazenar metadados e fazer com que os seus arquivos possam ser encontrados no seu computador. Eles são mais uma daquelas coisas essenciais para você usar o computador, que muita gente nem sabe que existe.

Por serem um componente tão importante de um sistema de arquivos, problemas em Inodes podem ser responsáveis por erros bizarros, como você não poder criar ou salvar novos arquivos, mesmo que tenha vários gigabytes livres no armazenamento.

Eles podem ser a origem de problemas de boot do sistema, de travamentos, de comportamento errático em aplicações. Inodes também são um tema bem comum em provas de certificação técnica e entrevistas de empregos, especialmente para sysadmins e devOps, ou seja, vale a pena conhecer. Hoje vamos entender o que são os inodes, como eles funcionam e como resolver problemas relacionados.

O que são os inodes?

Você já se perguntou como o seu sistema operacional sabe onde estão os seus arquivos no computador quando você precisa acessar alguma coisa? Você dá dois cliques em um programa ou um arquivo e ele abre. Se você já tem um conhecimento básico de informática, deve ter ouvido falar de sistemas de arquivos ou filesystems.

Sistemas de arquivos são uma forma do computador organizar os seus arquivos numa unidade de armazenamento como um HD ou um SSD. Se os seus arquivos fossem livros, os filesystems seria a biblioteca.

Existem vários tipos de sistemas de arquivos, no Windows o NTFS é muito popular hoje em dia, mas talvez você já tenha ouvido falar de outros, como o FAT32, APFS no mundo Apple, o Ext4 no mundo Linux, e ainda existem vários, como o BTRFS e o ZFS e assim por diante. Mantendo a analogia dos livros, seria como se cada um deles fossem bibliotecas que organizam os livros de formas diferentes, cada qual com seus recursos.

Não vamos entrar nas especificidades de cada um dos sistemas de arquivos, mas apesar das suas diferenças, um elemento que todos eles têm em comum são os chamados “inodes”.

Na verdade, o Windows e o NTFS tem um conceito parecido com outro nome, no NTFS o equivalente aos inodes são os chamados “FilesIDs”, Inodes são mais relacionados a sistemas de arquivos encontramos em sistemas operacionais Unix Like, como Linux, macOS e FreeBSD, ou seja, praticamente qualquer coisa que rode um sistema operacional, menos o Windows e seus derivados.

Apesar do nome diferente e a forma de funcionar distinta, a função dos “inodes” e dos “fileIDs” é basicamente a mesma, eles são conjuntos de dados, como tabelas com metadados dos arquivos contidos no seu disco, que informam ao Kernel do sistema operacional onde cada coisa fica. Metadados são dados sobre dados, ou seja, informação sobre os dados que você tem no seu computador, e os inodes tem vários metadados. 

Veja na prática, os inodes numa distro Linux

No terminal de uma distro Linux você pode usar o comando “ls” para listar arquivos num diretório, se usar o comando “ls” com o parâmetro “-i” vai listar os arquivos contidos no diretório com os seus respectivos números de inode.

Inodes o que e e para que serve esse elemento do Unix Linux macOS e BSD 1

Cada inode recebe um número identificador único para se diferenciar um do outro, como se fosse o número de identidade. Cada inode é associado com um arquivo dentro do seu disco, não importa o que ele seja, uma pasta, um arquivo de texto, um executável, qualquer arquivo tem o seu inode companheiro com informações sobre ele.

Dependendo do sistema de arquivos, nesse caso o Ext4, os inodes são criados no momento da formatação do disco, isso faz com que exista uma quantidade fixa de inodes que não pode ser estendida, posibilitando ter uma quantidade finita de arquivos no disco. Isso não é verdade o tempo todo, em alguns sistemas de arquivos específicos, inodes funcionam de forma diferente.

Cada arquivo no seu computador, não importa o tamanho dele, pode ocupar um 1 inode. Para que esse inode seja a representação lógica desse arquivo para o filesystem, na tabela do inode, serão registrados o tamanho do arquivo, o momento da criação, da modificação, em que bloco do disco o arquivo está gravado, quem são os donos dele, entre outras informações. Quando você der dois cliques em um arquivo, o sistema operacional vai olhar para o inode que representa esse arquivo e verá onde ele está no seu disco para encontrá-lo.

No nosso exemplo da biblioteca, o Inode seria a placa que informa onde estão certos livros, exceto que o inode conseguiria dar ainda mais detalhes sobre os livros, como o tamanho deles, quando foram colocados na prateleira, quando foram removidos, quem é o dono do livro, quem é o autor.

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD 2

Vamos voltar para o terminal, se a gente der um comando “ls -l” para ver as informações dos arquivos do diretório de uma forma mais completa, você deve reparar que agora a gente tem informações sobre as permissões, a quantidade de arquivos que estão em cada pasta, quem é o usuário dono do arquivo, qual é o grupo ao qual ele pertence, data e hora da criação, e assim por diante. Mas de onde vem essas informações?

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD 3

O comando ls busca essas informações nos inodes dos arquivos, e apresenta para você de uma forma que faça sentido. Quer ver isso acontecendo na prática? Podemos criar um arquivo. (touch diolinux)

Se listarmos o número dos “inodes” nesse diretório você vai ver que o nosso novo arquivo chamado “diolinux” rebeceu um número também, esse número serve como identificar único, esse é o “inode” no qual estão armazenados todos os metadados desse arquivo em específico. Mesmo um arquivo vazio tem metadados, é por isso que mesmo arquivos vazios ocupam espaço em disco, embora seja pouco.

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD 4

Repare que vemos muitas coisas interessantes, o nome do arquivo, o tamanho, quantos blocos usa, quando foi criado, quando foi alterado, permissões, donos, grupos, o número de inode que representa esse arquivo, em que dispositivo ele está gravado e quantos links existem para ele.

Traduzindo para o mundo das interfaces, os inodes armazenam aquelas informações que aparecem quando você clica com o botão direito sobre um arquivo e examina as propriedades para saber o tamanho dele, quando foi criado, entre outras coisas. Isso vale para qualquer sistema operacional.

Mensurando os inodes no Linux

O grande problema não é entender o que é um inode, mas gerenciar os inodes e garantir que o sistema se mantenha saudável. A quantidade de “inodes” é criada de forma fixa em alguns sistemas de arquivos como o Ext4, que até hoje é extremamente popular em diversas distros Linux e em servidores.

Essa característica pode gerar o erro de ter esgotado a quantidade inodes disponíveis no seu filesystem, mesmo que ainda tenha espaço disponível em disco. Você vai ver o sistema reclamar que não tem mais espaço para criar um arquivo ou copiar um arquivo, mesmo com muito espaço livre em disco.

O número de inodes criados na hora da formatação depende do tamanho do disco e de alguns outros fatores. O primeiro deles é o tamanho dos blocos, o Ext4 suporta blocos de tamanhos diferentes, 4KB e 8KB, por exemplo, quanto maior o bloco, menor a quantidade de inodes por Gigabyte, nenhum arquivo pode usar menos do que um bloco de dados, mesmo que o seu tamanho seja menor do que isso. Blocos são as menores unidades de armazenamento num sistema de arquivos.

Em instalações avançadas, é possível definir qual o percentual de inodes criado por gigabyte, mas o padrão no Ext4, caso você não altere essa configuração, gira em torno de 0.5%, o que dá mais ou menos 5 inodes para cada 1KB se a gente considerar um disco de 1GB apenas. Arredondando, daria em torno de 5 milhões de inodes.

Isso significa que em uma unidade de 1GB, formatado de forma padrão com Ext4, você pode colocar arquivos até que o 1GB seja preenchido, ou armazenar 5 milhões de arquivos, incluindo o sistema operacional, logs e cache, mesmo que esses 5 milhões somados não cheguem a 1GB.

Para ver quanto inodes foram criados e quanto estão sendo usados e livres num sistema Linux com Ext4, a gente pode usar o comando “tune2fs” e apontar a partição ou disco que queremos consultar, por exemplo, sudo tune2fs -l /dev/nvme0n1p3. Você deve substituir o termo nvme0n1p3 pelo nome da sua unidade de armazenamento.

Na saída, vamos encontrar coisas interessantes como o tamanho dos blocos, a contagem de inodes, assim como a quantidade de inodes livres.

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD 5

Outra forma de ver essa informação é com o comando df -i ou df -ih, se você quiser as unidades em um formato mais legível. O interessante desse comando é que ele te mostra o percentual de inodes usados.

Como você ver, no exemplo, o disco com mais inodes usados tem apenas 3% do volume total no momento, o que significa que dificilmente teremos algum problema com eles, felizmente.

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD 6

Em desktop esse problema é muito pouco provável de acontecer, geralmente temos discos grandes nos nossos computadores, com centenas de gigabytes, até terabytes, onde geralmente armazenamos quantidades moderadas de arquivos, um arquivo de 200GB e um de 1MB ocupa igualmente um inode para armazenar os seus metadados.

Porém, a coisa muda de figura em servidores e é por isso que inodes são assunto em provas de certificação. No mundo dos servidores é muito mais comum o sistema gerar logs de vários serviços, armazenar cache ou simplesmente armazenar muitos arquivos pequenos.

Quais erros podem ocorrer com os inodes?

Um servidor de e-mail, por exemplo, vai precisar de um inode para cada arquivo de texto, cada imagem, cada anexo que você armazenar nele, esses arquivos podem não somar juntos um tamanho muito grande, mas podem ser muitos arquivos, colocando a limitação do seu servidor nos inodes do filesystem, mais do que no espaço de armazenamento.

Um exemplo de vida real para você ter uma noção. Este é o dashboard de um dos servidores do Diolinux, ele está rodando basicamente WordPress, como você pode ver, 50GB utilizados de um SSD de 250GB, mais ou menos 20% da capacidade do disco. São 3 milhões de inodes disponíveis e quase 1 milhão utilizados, incluindo todo e qualquer arquivo no armazenamento do servidor, que nesse caso representa 33% do uso de inodes disponíveis.

Inodes, o que é e para que serve esse elemento do Unix, Linux, macOS e BSD 7

Discos menores em hospedagens mais simples, com 20GB de armazenamento ou algo assim, terão uma contagem menor de inodes, e eles podem encher muito mais rápido do que discos maiores, dependendo do tipo de servidor.

Se o número de inodes chegar próximo dos 80% de uso ou mais do que isso, é possível que você comece a ter problemas devido à incapacidade do seu sistema em mover e criar arquivos dinamicamente.

Mesmo que você não esteja fazendo nada, o seu sistema operacional está sempre criando e apagando arquivos, armazenando logs e cache, algo que é bem mais intenso em um servidor. Se eventualmente você se deparar com um problema de disco desse tipo, existem poucas coisas que pode fazer para solucionar o problema, já que para liberar inodes, precisa apagar arquivos.

Se estiver tendo problema com inodes, tente identificar quais são as pastas que contém mais arquivos desnecessários e apague. Liberando inodes, o sistema deve voltar a funcionar. Caso não consiga apagar arquivos diretamente porque a contagem de inodes ocupados está tão grande que o sistema não consegue nem inicializar, talvez dar boot via livependrive e apagar alguns arquivos dessa forma ajude.

Em servidores, costuma existir algum plano de contingência por parte da hospedagem, como aumentar temporariamente o armazenamento para você fazer a limpeza, sempre com a possibilidade de pagar por mais armazenamento.

Inodes cada vez menos são um problema

Inodes são essenciais para armazenamento de arquivos, eles estão se tornando um problema menor com o tempo devido à evolução dos próprios sistemas de arquivos. Opções empresariais populares no mundo Linux e BSD, como ZFS e BTRFS tratam inodes de forma diferente, não criando uma quantidade finita no momento da formatação, mas dinamicamente conforme a criação de arquivos, isso evita o esgotamento que pode ocorrer com o Ext4, por exemplo.

O NTFS do Windows funciona mais ou menos dessa forma também, duramente o processo de alocação de espaço e criação de um arquivo, o File ID é criado e atribuído ao arquivo, não antes. Apesar do Ext4 funcionar criando inodes em quantidades fixas durante a formatação, ele continua sendo usado em desktops e em alguns casos, até mesmo em servidores, especialmente pela sua estabilidade e confiabilidade.

Com o tempo, tudo evolui e a aposentadoria do Ext4 um dia deve chegar também, o que mantém ele ali é a sua história e robustez, além disso, bugs podem ocorrer em qualquer sistema de arquivos, mesmo os que não deveriam dar problema com isso, como o BTRFS.

Com o amadurecimento do BTRFS, podemos imaginar mais distribuições Linux, mesmo as de desktop, dando preferência a ele sobre o Ext4, alguns sistemas como o Fedora e o openSUSE já fazem isso, e praticamente toda distro pode ser instalada usando BTRFS, mesmo que não seja por padrão.

Agora você já sabe, inodes existem e eles podem ser a causa de alguns problemas que você pode ter na gestão de sistemas operacionais, especialmente servidores.

Conhecer alguns comandos de terminal que podem te ajudar a encontrar e apagar arquivos inúteis é importante num cenário desse tipo, por isso temos um curso de terminal para membros Diolinux Play, além de conteúdos abertos sobre o assunto!

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!