Introdução
No segmento de hospedagem há muitos planos que não estabelecem limites para muitos dos recursos mais importantes, como espaço em disco, tráfego, contas de e-mail, entre outros. Isso tem como objetivo não limitar o crescimento de um negócio na Internet, apenas porque podem ser necessários mais alguns megabytes de espaço para acomodar o site, 4 ou 5 contas de e-mail a mais, por exemplo.
Planos com limites bem definidos para este tipo de recursos, obrigam um upgrade quando muitas vezes o que é necessário, é bem pouco. Flexibilidade é a palavra-chave por trás dos planos com vários recursos ilimitados.
Mas há casos em que não é possível não estipular limites e o exemplo mais importante e que tem associado uma razão técnica, são os inodes. Não sabe do que estamos falando?
Um inode é um conceito associado aos sistemas de arquivos em ambientes Linux. Para ser o mais objetivo possível – visto que o assunto pode ser bastante complexo – um inode contém informações de cada arquivo e pasta / diretório existente nas unidades de armazenamento ou partições das unidades de disco.
Cada registo Inode tem um tamanho de 128 ou 256 bytes, os quais são alocados para armazenar informações como número do Inode, propriedades ou atributos do arquivo correspondente, datas e horários em que ele foi criado, acessado e modificado pela última vez, ID do usuário e do grupo ao qual pertence o usuário, entre outras informações.
Portanto, cada arquivo e cada pasta no Linux, tem um inode associado. A quantidade de inodes de um sistema, é fixa e finita e é determinada quando da instalação do sistema operacional, mais precisamente quando se escolhe o sistema de arquivos (file system) que será utilizado em cada partição e que pode ser EXT4, por exemplo.
Essa característica faz com que em um servidor você possa ter uma apreciável quantidade de espaço em disco disponível e ainda assim não consiga gravar mais nada em uma partição, simplesmente porque o número máximo de inodes disponíveis, esgotou-se.
Da mesma forma, sites ou contas de hospedagem com um número muito grande de arquivos e pastas, podem não acomodar mais arquivos para o site ou outro tipo de conteúdo, mesmo havendo espaço em disco para fazê-lo, se o limite de inodes estabelecido para o plano, tiver sido atingido.
Esse tipo de situação – atingir o limite de inodes – pode ocorrer em função de diferentes cenários em sua conta de hospedagem:
-
O sistema usado pelo seu site utiliza por exemplo, um sistema de cache e/ou arquivos temporários associados a sessões, ou ainda alguma situação similar e não é feita a remoção desse conteúdo com certa regularidade;
-
São gerados muitos arquivos de logs, os quais também não são removidos ou compactos em backups externos;
-
Uma grande quantidade de mensagens de correio eletrônico, especialmente SPAM ou mensagens de devolução, quando por exemplo, é utilizado algum tipo de e-mail Marketing com grande frequência e para grandes bases de nomes;
-
Conteúdo removido pelo Gerenciador de Arquivos do painel de controle ou pelo webmail, mas que não foram removidos das respectivas lixeiras. Assim como o Windows, arquivos que foram removidos, mas não de forma permanente, vão para a lixeira, continuam ocupando espaço em disco e no caso do Linux, ainda têm um inode correspondente a cada arquivo na lixeira;
-
Backups, especialmente os que são apenas cópias de um conteúdo, como pastas e até mesmo sites inteiros e que por não estarem compactados, ocupam mais espaço e têm a cada pasta e arquivo, um inode associado;
-
Sites muito grandes em termos de quantidades de arquivos que produzem, como por exemplo, grandes lojas virtuais, com muitos itens, imagens, arquivos XML, entre outros;
-
Utilização da conta de hospedagem para backup remoto de arquivos das máquinas / computadores dos colaboradores ou como disco virtual. Particularmente neste caso, além do problema de geração de um inode para cada arquivo, deve-se salientar que estamos tratando de um plano de hospedagem de site, o que caracteriza uma infração aos termos de prestação de serviços.
-
Tarefas cron também geram arquivos e a depender da frequência com que uma tarefa é executada, bem como do número de tarefas, facilmente alcançam-se grandes quantidades de arquivos e consequentemente, inodes.
Pré-requisitos para liberar inodes na conta de hospedagem
O conjunto de ações que proporemos mais adiante, exige que a pessoa que realizará os procedimentos atenda alguns requisitos fundamentais:
-
Tenha um backup completo da conta de hospedagem, uma vez que se possa restaurar algum conteúdo que seja removido por engano ou por procedimento incorreto;
-
Dados de acesso à conta de hospedagem e que constam do e-mail de configurações recebido por ocasião da ativação da conta;
-
Conectividade com a Internet, preferencialmente por conexão de alta velocidade;
-
Conhecimento da estrutura do site (pastas de cache, cookies, temporários, etc);
-
Acesso SSH.
Passos para liberar inodes na conta de hospedagem
Antes de prosseguirmos, é importante destacar que as situações que levam ao consumo do total de inodes disponíveis no seu plano de hospedagem, podem variar de acordo com o uso que é feito da conta e que pode compreender todos os cenários que descrevemos anteriormente, ou apenas alguns deles. Sendo assim, os itens a seguir não são exatamente passos, mas procedimentos independentes uns dos outros.
Outro ponto que merece atenção, é que se houver dúvidas quanto a remoção de algum conteúdo, não prossiga, sob pena de ter que restaurar um backup para restituir algo que tenha sido indevidamente removido, bem com atenção na digitação das linhas de comando, sob pena de realizar procedimentos que podem ter graves consequências.
-
Pode-se saber quantos arquivos e pastas e consequentemente quantos inodes a conta tem, efetuando-se o acesso SSH à conta e a partir da raiz, utilizar a linha de comando a seguir, a qual “conta” o número de arquivos e pastas únicos na conta;
find . -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
-
No caso de haver muitas mensagens de SPAM ou qualquer outro lixo eletrônico nas contas de e-mail, o mais indicado é que cada usuário proceda com a remoção, usando para isso o acesso ao webmail, já que somente cada usuário é capaz de determinar quais conteúdos são irrelevantes ou não. Após a remoção das mensagens, deve-se acessar a lixeira do webmail e limpá-la;
-
Ao conectar-se via SSH, a primeira coisa que se tem acesso, é a raiz da conta e sendo assim, todas as pastas e arquivos da conta de hospedagem estão localizados abaixo dela. Por essa razão, vamos executar uma linha de comando, cuja execução produzirá um resultado armazenado no arquivo “resultado_inodes”, localizado na mesma pasta em que a linha for executada. Basicamente o que ela faz é contar todos inodes - na verdade contando diretórios e arquivos - em cada pasta que existe na sua conta de hospedagem, e ordenando das pastas que mais têm inodes, para as que tem menos;
find . -type d > lista; while read line; do echo "$line" && ls -l "$line" | grep -v ^total | wc -l ; done < lista > intermediario; sed -n '$ba;h;n;p;x;:a;p' intermediario > lista; awk 'ORS=NR%2?" - ":"\n"' lista | sort -rn > resultado_inodes
-
Outra situação que pode produzir uma grande quantidade de inodes e que costuma passar despercebida, são as tarefas cron. A cada vez que uma é executada pelo sistema, uma mensagem de e-mail é gerada com informações da tarefa e fica localizada na pasta usuario/mail/new. O acesso também pode ser feito pelo webmail, usando para isso os dados de acesso ao cPanel (usuariocpanel@seudominio.com.br e senha). Na eventualidade de haver muitas mensagens, o gerenciamento desse conteúdo é mais adequado via SSH;
- A seguinte linha de comando apaga todos os arquivos da pasta em que é executado e que foram modificados (mtime), acessados (atime) ou alterados (ctime) há mais de 1 dia. O parâmetro 1 pode ser substituído pela quantidade de dias que desejar, sendo que aumentá-lo fará com que conteúdo mais antigo que o número usado, seja removido;
find . -maxdepth 1 -type f -mtime -1 | xargs rm
- A seguinte linha de comando apaga todos os arquivos da pasta em que é executado e que foram modificados (mtime), acessados (atime) ou alterados (ctime) há mais de 1 dia. O parâmetro 1 pode ser substituído pela quantidade de dias que desejar, sendo que aumentá-lo fará com que conteúdo mais antigo que o número usado, seja removido;
- Não é raro copiar o conteúdo da pasta public_html para alguma pasta criada na raiz da conta, com o objetivo de manter um backup do site. No entanto, tal prática não é permitida segundo nossos termos de prestação de serviços. Alternativamente você pode efetuar um backup via FTP, se deseja resguardar o conteúdo do site. Para remover a pasta em que consta o backup, use o comando a seguir a partir do diretório que contém o backup, tendo em mente que todas as pastas e arquivos contidos em “backup”, serão removidos;
rm -rf backup
-
Arquivos de sessão gerados pela programação PHP, podem se acumular aos montes, dependendo da programação que foi implementada no site. Por padrão na maior parte das hospedagens Linux, eles podem ser encontrados na pasta /tmp, por sua vez localizada na raiz da conta, mas também através de configuração do PHP, podem estar localizados em outro path e neste caso o programador responsável deve informar sua localização. O comando a seguir remove todos os arquivos da pasta em que é executado e que são mais antigos que 120 minutos;
find . -maxdepth 1 -type f -mmin -120 | xargs rm
Conclusão
Controlar a quantidade de inodes usados em uma conta, por meio da remoção de determinados arquivos e pastas obsoletos ou desnecessários, é importante para que o espaço destinado à hospedagem, possa ser usado para criação e armazenamento de conteúdo relevante.