5
respostas

Linux: mais sobre inodes

Ola amigo estudante.
Para quem ficou confuso vamos abordar um pouco mais sobre inodes.
E o que são inodes de fato?
No Linux, inodes são estruturas de dados usadas pelos sistemas de arquivos para armazenar informações sobre arquivos e diretórios, como permissões, proprietário, tamanho, carimbos de data e hora e a localização dos dados no disco.
Cada arquivo ou diretório possui um inode exclusivo, mas o nome do arquivo em si não está armazenado no inode.
Ele fica associado a ele por meio de entradas no diretório.
Os inodes são essenciais para o funcionamento do sistema de arquivos, e um problema comum é o esgotamento dos inodes, que pode ocorrer mesmo que ainda haja espaço em disco disponível.
Isso acontece quando há uma grande quantidade de arquivos pequenos, preenchendo todos os inodes disponíveis.
Quando isso ocorre, não é mais possível criar novos arquivos ou diretórios, mesmo com espaço livre.
Monitorar o uso de inodes é importante em servidores que lidam com muitos arquivos, como servidores de email ou sistemas de cache.
Mais e daí!? Como resolver estes problemas?
Para resolver ou evitar problemas com esgotamento, é importante entender como os inodes são usados e monitorar seu consumo.
Aqui estão as principais formas de lidar com esse problema:

1. Identificar o problema
Use o comando df -i para verificar o uso de inodes nas partições. Ele mostra o total de inodes, os usados e os disponíveis. Se uma partição estiver com 100% de inodes usados, você não poderá criar mais arquivos, mesmo que ainda haja espaço em disco.

2. Encontrar onde estão os arquivos em excesso
Use comandos como:

find / -xdev -type f | wc -l

ou

sudo du -a / | sort -n | tail

Mas para descobrir quais diretórios têm muitos arquivos pequenos:

sudo find / -xdev -type f | cut -d/ -f2 | sort | uniq -c | sort -n

3. Limpar arquivos desnecessários

  • Apague arquivos temporários em /tmp, /var/tmp ou diretórios de cache.
  • Automatize a limpeza com tmpwatch ou systemd-tmpfiles-clean.
  • Verifique aplicativos que geram muitos arquivos (como logs, e-mails, backups, ou sistemas de cache) e configure rotações ou limpezas periódicas.

4. Reformatar a partição (como último recurso)
Se o problema persistir e não for possível liberar inodes suficientes, considere fazer backup e formatar a partição com um sistema de arquivos que tenha mais inodes. Por exemplo, ao criar uma nova partição ext4, você pode ajustar o número de inodes com a opção -T no mkfs.ext4:

mkfs.ext4 -T small /dev/sdX

Isso é útil para servidores que armazenam muitos arquivos pequenos.

5. Planejamento antecipado

  • Ao criar partições, considere o tipo de dados que serão armazenados.
  • Use ferramentas como iostat, df -i e du para monitorar periodicamente o uso de espaço e inodes.

Evitar o esgotamento de inodes requer uma boa organização do sistema de arquivos e práticas regulares de manutenção, especialmente em ambientes que lidam com grande volume de arquivos.
Não é uma tarefa simples, mas o monitoramento constante e a prevenção são as melhores formas de evitar interrupções e perda de desempenho.
Espero que este post tenha sido util e se quiser falar mais sobre o assunto comente ai.
Bons estudos.
Até...
:)

5 respostas

Oi, Ronaldo! Como vai?

Gostei da forma como você explicou o conceito de inodes e mostrou, passo a passo, como identificar e resolver o problema de esgotamento. Sua explicação está bem estruturada e vai ajudar quem ainda tem dúvidas sobre o tema.

Continue compartilhando seus conhecimentos, isso fortalece muito o aprendizado coletivo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Estou rodando o Ubuntu via WSL. Então, ao executar o comando df -i apareceram, na coluna IUsed, valores negativos. O que isso significa?

Ola Naygno.
Não se preocupe que isso pode acontecer no WSL.
Vamos entender!
No WSL, especialmente nas versões que usam drvfs (para acessar o sistema de arquivos do Windows, ex: /mnt/c, /mnt/d etc.), o kernel Linux não tem acesso real ao conceito de “inodes” desses volumes porque o NTFS (do Windows) não usa inodes como o Linux.
Isso ocorre porque:

  • O WSL tenta emular o comportamento de um sistema Linux, mas o NTFS não fornece contadores reais de inodes.
  • O df recebe valores inválidos ou não inicializados de “inodes usados” e, ao interpretá-los como números assinados (inteiros com sinal), o valor se torna negativo.
    Ou seja, é lixo de memória ou valor não definido retornado pela camada drvfs.
    E não se preocupe que seu sistema não está corrompido ou com erros no disco.
    Você pode limitar o comando df -i apenas aos sistemas de arquivos Linux (como o root do WSL):
df -i -x drvfs

Isso ignora os volumes Windows e mostra apenas o sistema de arquivos Linux interno, onde os valores fazem sentido.
Comente ai qualquer duvida.
Bons estudos.

Testei o comando que vc sugeriu, mas continua mostrado os arquivos do tipo drvfs com IUsed negativos.

Dei uma pesquisada aqui, e encontrei algumas sugestões como:

  • findmnt (e em conjunto com grep) que não retorna informações, até onde consigo interpretar, referentes a uso de inodes e
  • df em conjunto com grep e exclusão manual de /mnt/, que ainda retorna um tipo de arquivo com IUsed negativo.

O interessante é que a coluna com IUse% retorna, nesses arquivos com IUsed negativos, o valor -.

Mas está ok, porque entendi que isso não é coisa para se preocupar quando se usa o Linux por WSL.

Grato pela explicação, Ronaldo.
Bons estudos.

Olá, amigo Naygno!
Pesquisar mais sobre o assunto é, sem dúvida, uma ótima iniciativa e mostra seu comprometimento em resolver o problema da melhor forma.
Gostaria de complementar com uma observação: o WSL é basicamente um emulador.
E pode apresentar limitações e comportamentos diferentes de uma instalação nativa.
Por isso, se quer ter um ambiente o mais fiel possível ao Ubuntu real (especialmente para testes, desenvolvimento ou estudos mais aprofundados), o ideal seria considerar uma das seguintes opções:

  • Dual boot com uma distro Linux (como Ubuntu) — proporciona a experiência mais fiel ao ambiente de produção.
  • Máquina virtual (como o VirtualBox ou VMware) — permite mais controle e isolamento, útil para testar configurações e sistemas diferentes.
  • Contêiner Docker com Ubuntu — boa alternativa para isolar ambientes e ainda manter tudo dentro do Windows.
  • Instância na nuvem (como AWS EC2 ou outra) — ideal para simular ambientes de produção ou colaborar em projetos reais.
    Essas opções evitam surpresas causadas por limitações do WSL e permitem resultados mais consistentes com o que se espera de um sistema Linux puro.
    Obrigado por seu feedback e não deixe de comentar.
    Até...