Executando verificação de segurança...
5

Caso real: Servidor Linux sem espaço, o que fazer?

Olá pessoal, sei que esse espaço não é 100% focado para pessoas que atuam como analistas de suporte🚒🔥 mas sei que posso compartilhar conhecimento para ajudar a comunidade!

Fase Inicial: Busca de informações.

Trabalho como analista de Suporte Técnico em uma Empresa de desenvolvimento e hoje cedinho peguei um das tasks do suporte de Emergência que estava em fila de atendimento, e assim que iniciei o atendimento descobri que a demanda se tratava de uma falha em nosso sistema.

Fiz o acesso remoto ao servidor do cliente e por lá conectei no servidor via putty para buscar mais informações para descobrir o motivo da falha. Assim que conectei já rodei o comando DF -h para saber o quanto de armazenamento em cada partição o linux tinha, e com esse simples comeando matei a charada!. Descobri que o problema estava ocorrendo por falta de armazenamento em uma das partições do sevidor, a partição onde estava alocado o banco de dados, notei que estava com 0Mb de armazemanemto disponível, sabendo disso comecei uma analise minunciosa em meio aos diretório dentro dessa partição para descobrir o motivo de tal estado.

Fase de execução e resolução

Com a ajudo do chat GPT comecei analisando os arquivos maiores dentro dessa partição usando o comando find / -type f -size +500M 2>/dev/null, onde prontamento retornou os arquivos principais do banco de dados, vendo isso pude ter certeza que alguma coisa tinha que ser feita. mas como se tratava de emergência o o tempo era meu inimigo, sabia que se eu atacasse os processos e dados do banco de dados em busca de limpar ou ganhar armazenamento ia me tomar muuuito tempo, então decidi focar os arquivos fora do servidor que seriam menos criticos de serem apagados pois precisava de apenas 100Mb para o que o sistema pudesse rodar a rotina ao qual estava gerando todo o problema. sabendo disso segui a sugestão do GPT e comecei a "limpar a casa".

As Como as pastas temp e logs são diretório de despejo e para uso de analises fiz o download dos arquivos para meu compotador e adicionei a task com uma forma de backup e removi usando os comandos sugeridos pelo GPT:

Logs

du -h /var/log #Tamanho dos arquivos

rm -f /var/log/*.log.* # Remove logs arquivados
truncate -s 0 /var/log/syslog # Esvazia logs atuais
truncate -s 0 /var/log/auth.log

Feito os logs foi para a pasta temp

Temp

du -h /tmp /var/tmp #Tamanho dos arquivos
rm -rf /tmp/* /var/tmp/* # Remove o diretório temp

Feito isso ganhei armazenamento quase que suficiente mas sabia que podia fazer melhor.

apt-get

E podia também limpar o cache do apt get do linux que despeja arquivos dos pacotes de instalação usados pelo linux...

Usando o comando apt-get autoremove e comando apt-get clean Pude concluir e me certificar que a quantidade que eu precisava.

Feito todos estes processos foi só tentar novamente rodar a rotina necessária dentro do sistema e pronto! Mais uma Task resolvida!

Pessoal, humildemente espero que gostem e me deem feedback sobre!

Espero ter ajudado, forte abraço. Até o próximo post!

Link do chat com o GPT .Link

Carregando publicação patrocinada...
6

Meus 2 cents:

Geralmente ataco de imediato o /var:

cd /var
du -shc *

Com este comando listo os diretorios e vejo o espaco ocupado por cada um

Ali tem alguns diretorios que sao grandes candidatos a limpeza:

var/cache
var/log
var/spool
var/tmp

E com este comando lista em bytes na ordem decrescente

du -sc * | sort -n | tac

E sobre servidores: costumo usar LVM ou ZFS que normalmente sao mais faceis de trabalhar com relacao a espaco em disco.

E uma "dica": se voce tem um servidor que de antemao sabe que vai ficar "esquecido" e receber pouca manutencao e correr o risco disso acontecer, crie um arquivo "falso" no /root com um uns 100Mb (p.ex. dd if=/dev/sda of="/root/espaco-a-liberar.txt" bs=1 count=100M). Assim, caso ocorra, voce tem facil um local que pode recorrer emergencialmente, basta remover.

2

Uma ferramenta excelente que uso é o ncdu (no ubuntu: apt install ncdu).

Dá pra navegar entre todos os diretorios vendo o tamanho de cada um, e assim ir caçando aqueles arquivos maiores.

ncdu /
2

O artigo ficou legal, mas se me permite acrescentar duas observações (2 cents como o Oletros diz hahaha):

prontamento retornou os arquivos principais do banco de dados

Você mencionou que seu comando apontou o banco de dados como maior consumidor. Minha sugestão é analisar quais bases e tabelas estão ocupando o maior espaço.

Na maioria das vezes, clientes deixam logs e registros sem necessidade alguma residindo em alguma tabela sem nunca realizar uma limpezinha.

E quando for fazer tal análise, utilize a CLI da base de dados. Por exemplo, no MySQL/MariaDB, você possui a information_schema que guarda uma porção de estatísticas úteis pra investigar situações assim.

rm -rf /tmp/* /var/tmp/*

Outra coisa que você mencionou foi remover o tmp.

Cuidado com as sugestões do ChatGPT. Elas são valiosas, mas você não pode sair executando à risca tudo que ele sugere sem antes se questionar só um pouquinho.

Por exemplo, você poderia ter removido um arquivo temporário que o MySQL estivesse usando para uma query longa e que estava retornando muitos dados. Sem uma análise mais precisa, você só estaria causando um problema diferente e que provavelmente voltaria assim que o cliente conectado ao MySQL executasse a query novamente.

Você também poderia ter invalidado todas as sessões que uma aplicação php estivesse usando. Se fosse um ecommerce, por exemplo, tchau pros carrinhos das pessoas que estivessem há 30 minutos num site fazendo compras hahahah

1

MySQL/MariaDB, você possui a information_schema que guarda uma porção de estatísticas úteis pra investigar situações assim.

Isso me lembra que eu esqueci ligado o performance_schema do Mysql em um servidor. A base inteira estava usando uns 7GB, e o performance_schema chegando em quase 30GB

1

Como dica, comecem a monitorar esses servidores e os particionamentos e definir limites de atenção, ainda mais porque é um servidor de banco de dados, caso chegasse um valor determinado emitiria um aviso ou executasse alguma ação corretiva. Eu costumo monitorar as vms, containeres e hosts usando prometheus e grafana e definindo alertas de e-mail e whatsapp, mas pode ser somente um cron.

1

Boas sugestões. Apenas dando um cents de contribuição rsrrs. Na verdade um lembrete.
Não encontrei a distribuição Linux que está usando. Perdão se mencionou, não encontrei. Suponho pelo apt que seja um Debian ou Ubuntu Server. Mas boa parte dos servidores usam também (ou até mais, prefiro inclusive) distribuições baseadas no Red Hat (Rocky, Alma...). Aí os comandos relacionados com apt não funcionam, pois eles usam outro gerenciador de pacotes. Inclusive algumas pastas podem ser diferentes (poucas).
Mas o conceito é muito bom!

1
1

Simmmm kkk, estamos avisando o cliente a mais de 2 meses... e ele já comprou um computadr/servidor novo, mas ainda não chegou, ai estamos tendo que fazer esse trabalho paleativo para ganhar tempo.

1

Não necessariamente. A maioria dos casos de espaço em disco assim se deve à desperdício e falta de otimização da aplicação residente.

Por exemplo, no WordPress às vezes o pessoal deixa ligado o WP_DEBUG, que fica gerando log o tempo todo e, se tiver algum errinho em algum tema/plugin, lá se vão GB e mais GB de dados com apenas alguns dias de uso (à depender da quantidade de visitas também).

Antes de pensar em aumentar, é sempre bom primeiro analisar.
Não é à toa que o nome da profissão é "Analista" hahahah