Como verifico o uso de inodes no HestiaCP? O que está causando a impossibilidade de gravar arquivos mesmo com bastante espaço em disco?

Há alguns dias, um amigo me mandou uma mensagem tarde da noite dizendo que o servidor dele havia caído.

Os sintomas específicos eram particularmente bizarros: o site repentinamente começou a apresentar erros, os registros não podiam ser gravados e a criação de novos arquivos exibia imediatamente a mensagem de que o disco estava cheio.

Mas quando ele verificou com `df -h`, ficou chocado ao descobrir que o disco claramente tinha dezenas de gigabytes de espaço livre. Como poderia estar cheio?

Eu disse a ele naquele mesmo instante: "Irmão, você não está apenas com o espaço de armazenamento cheio, seu Inode está sobrecarregado."

Ele respondeu com um ponto de interrogação: O que exatamente é um Inode?

Na verdade, muitas pessoas reagem exatamente da mesma forma que ele quando caem nessa armadilha pela primeira vez, porque ninguém na escola jamais lhes ensinou essas coisas.

Vamos esclarecer primeiro o que é um Inode.

Pense nisso como uma ficha de biblioteca, e será fácil de entender.

O espaço em disco é como uma estante de livros; a quantidade de livros que você pode colocar nela depende da sua capacidade, o que é fácil de entender para todos.

Um inode é como uma ficha para cada livro, registrando seu nome, localização e quem o moveu.

No Linux , todo arquivo e todo diretório deve ocupar um inode, não importa o quão pequeno seja o arquivo.

Mesmo que seja um arquivo vazio, o sistema ainda consumirá um cartão de índice para ele.

O sistema possui um limite para o número total de arquivos que pode criar; esse limite é o número total de nós internos.

Uma vez que o inode se esgote, mesmo que seu disco ainda tenha centenas de gigabytes de espaço livre, o sistema operacional se recusará a criar novos arquivos.

Não é possível gravar registros, criar cache e o site trava completamente — essa é a cena bizarra que você está presenciando.

Sinceramente, esta é uma situação muito complicada porque a mensagem de erro é enviada de um local que você não está visualizando.

O primeiro truque é usar `df -i` para obter uma visão geral completa.

No ambiente HestiaCP , você pode simplesmente acessar o terminal via SSH e digitar esta linha.

df -i

A função listará o número total de nós internos, o número de nós usados ​​e o número de nós restantes para cada partição montada.

Na saída, há uma coluna chamada IUse%, que é a principal métrica que você deve acompanhar.

Se o uso (IUse%) de uma partição atingir 100%, mesmo que essa partição ainda tenha bastante espaço em disco, ela não poderá mais criar novos arquivos ou registros.

Sugeri ao meu amigo que executasse este comando primeiro, para que pudesse identificar se o problema estava no Inode em um segundo momento , o que seria muito mais rápido do que ficar adivinhando.

O segundo método é usar o comando `find` para contar com precisão um usuário específico.

Após confirmar que o problema está no nó de entrada, o próximo passo é descobrir quem está consumindo o cartão de índice em excesso.

O HestiaCP possui um diretório pessoal separado para cada usuário. Você pode simplesmente contar o número total de arquivos e diretórios em um diretório de site específico.

find /home/用户名/web/你的域名/public_html | wc -l

Substitua "username" e "seu nome de domínio" pelo caminho real do seu diretório. O número retornado pelo terminal é a soma de todos os arquivos e pastas nesse diretório.

Cada arquivo ou diretório corresponde a um inode, portanto, esse número representa o uso do inode.

Como verifico o uso de inodes no HestiaCP? O que está causando a impossibilidade de gravar arquivos mesmo com bastante espaço em disco?

Se você estiver com preguiça de verificar cada um individualmente e quiser ver a distribuição de uso de todos os usuários em todo o site de uma só vez, também existe um comando de loop.

for d in /home/*; do echo -n "$d: "; find "$d" 2>/dev/null | wc -l; done

Esta linha irá imprimir o número total de arquivos em cada diretório de usuário em /home, facilitando a identificação de qual diretório de usuário possui um número anormalmente alto de arquivos.

A terceira estratégia consiste em identificar os subdiretórios que consomem mais iodo.

Às vezes você sabe que um site tem valores de Inode absurdamente altos, mas ainda assim não consegue descobrir o que há de errado com a tela cheia de arquivos.

Nesses casos, é necessário explorar um nível abaixo para encontrar subpastas que contenham um grande número de arquivos pequenos, como diretórios de cache, diretórios de sessão e diretórios de logs — essas são as áreas mais problemáticas.

find /home/用户名/web/你的域名/public_html -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -r -k 2 | head -n 10

Este comando listará as 10 subpastas que mais consomem arquivos.

O caminho no topo da lista é onde um grande número de arquivos pequenos estão agrupados.

Eu disse ao meu amigo que provavelmente era algum plugin de cache gerando arquivos pequenos secretamente, e executar essa linha basicamente confirmaria isso.

A quarta dica é verificar o limite de quota usando o repquota.

Se o seu servidor tiver quotas de sistema de arquivos Linux ativadas, você poderá analisar o problema sob uma perspectiva diferente.

repquota -a

Este comando exibirá o limite de arquivos e o uso real de arquivos para todos os usuários.

Preste muita atenção à seção Limites de Arquivos na saída; a coluna "Usado" indica quantos arquivos foram utilizados.

As colunas "soft" e "hard" representam os limites flexíveis e rígidos, respectivamente. Quando o limite "used" atingir o limite "hard", o sistema se recusará a criar novos arquivos.

Essa é uma história completamente diferente da quantidade de espaço livre que você tem no seu disco.

Para concluir, vamos conectar os pontos da investigação.

Vamos voltar ao amigo que derrubou o servidor no meio da noite, lá no começo.

Ele seguiu os quatro passos que descrevi, começando com `df -i` para confirmar que o inode estava de fato cheio.

Em seguida, usando o comando "find", localizamos o diretório de cache de um antigo site abandonado que estava gerando pequenos arquivos em grande quantidade.

Por fim, ao verificar o parâmetro `repquota`, confirmou-se que ele havia de fato atingido o limite máximo.

Após limpar aquele monte de arquivos de cache desnecessários, o site voltou a funcionar imediatamente.

Portanto, da próxima vez que você se deparar com essa situação estranha em que "o disco claramente tem espaço, mas você não consegue gravar arquivos", não se apresse em adicionar um disco rígido.

Primeiro, use `df -i` para dar uma olhada no inode; a verdade pode muito bem estar escondida naquele cartão que você nunca notou antes.

Acredito sinceramente que esses pequenos detalhes de bom senso, ocultos no núcleo do sistema, são mais úteis do que memorizar uma centena de listas de otimização.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Voltar ao Topo