Disco cheio na VPS ("No space left on device"): o que fazer
O erro No space left on device quer dizer que o disco da VPS encheu. As causas mais comuns são logs grandes, imagens, contêineres e volumes do Docker sem uso, cache do apt e backups guardados na própria VPS. Veja o tamanho com df -h, ache o que ocupa com du e, se o disco é pequeno para o que você usa, aumente o plano.
O erro No space left on device quer dizer que o disco da VPS encheu. As causas mais comuns são: logs grandes, imagens, contêineres e volumes do Docker sem uso, cache do apt e backups guardados na própria VPS. Comece vendo o tamanho do problema com df -h, ache o que ocupa espaço com du e só apague depois de saber o que é. Se o disco é pequeno para o que você usa, a solução é aumentar o plano.
Atenção: alguns comandos abaixo apagam arquivos de vez. No terminal não há lixeira. Antes de qualquer limpeza, crie um snapshot da VPS pelo painel, como em "Como criar um snapshot da sua VPS pelo painel antes de uma mudança", e leia o que cada comando apaga.
Sintomas
- Programas e comandos falham com
No space left on deviceouwrite error: No space left on device. - O site ou a aplicação sai do ar, o banco de dados para ou não sobe mais.
- O
aptfalha comYou don't have enough free space. - O Docker não cria contêiner nem baixa imagem (
no space left on device). - No painel, o quadro Disco raiz da Visão geral da VPS aparece cheio.
Os comandos deste artigo valem para o Ubuntu e o Debian, os sistemas das VPS da StayCloud, e supõem que você entrou como root (veja "Como acessar sua VPS por SSH pelo terminal (Linux, Windows e Mac)"). Primeiro, veja o tamanho do problema:
df -h /
A coluna Use% mostra quanto do disco principal está ocupado. Para achar as pastas maiores:
du -sh /* 2>/dev/null | sort -h | tail -n 10
Causa 1: logs grandes
Como confirmar: veja o tamanho dos logs do sistema e das pastas de log:
journalctl --disk-usage
du -sh /var/log/* 2>/dev/null | sort -h | tail -n 10
Logs de vários GB, no journal ou em /var/log, são a causa.
Como resolver: reduza o journal (o registro do sistema), que apaga as mensagens mais antigas e mantém as mais recentes até o tamanho indicado:
journalctl --vacuum-size=200M
Para o journal não crescer de novo, abra /etc/systemd/journald.conf, coloque a linha SystemMaxUse=200M e rode systemctl restart systemd-journald.
Para um arquivo de log de aplicação muito grande, esvazie o arquivo em vez de apagar (apagar um log aberto não libera o espaço até o programa reiniciar). Isto apaga o conteúdo do log:
truncate -s 0 /var/log/<ARQUIVO>.log
Causa 2: imagens, contêineres e volumes do Docker sem uso
Como confirmar: se a VPS usa Docker, veja quanto ele ocupa e quanto dá para recuperar (coluna RECLAIMABLE):
docker system df
Os logs dos contêineres também crescem. Veja os maiores:
du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -h | tail -n 5
Como resolver: limpe por partes, sabendo o que cada comando apaga (a documentação oficial está em docs.docker.com/engine/manage-resources/pruning/):
docker container prune
Apaga todos os contêineres parados. Se a VPS usa o instalador do painel ou o EasyPanel, os apps rodam em contêineres: um app parado de propósito também é apagado.
docker image prune -a
Apaga as imagens que nenhum contêiner usa. Elas são baixadas de novo quando você precisar.
docker builder prune
Apaga o cache de build de imagens.
docker volume ls
docker volume prune
Cuidado: volumes guardam dados, como os de um banco de dados. O volume prune apaga os que nenhum contêiner está usando agora. Só rode depois de conferir a lista com docker volume ls e com o snapshot feito. Evite o docker system prune -a --volumes, que apaga tudo isso de uma vez.
Para os logs dos contêineres não crescerem sem limite, configure a rotação no /etc/docker/daemon.json, como na documentação oficial (docs.docker.com/engine/logging/drivers/json-file/), e reinicie o Docker. A regra vale para contêineres criados depois da mudança.
Causa 3: cache do apt
Como confirmar: veja o tamanho do cache dos pacotes baixados:
du -sh /var/cache/apt
Como resolver: apague os pacotes baixados (eles já foram instalados e podem ser baixados de novo) e remova os pacotes que não são mais usados, como kernels antigos:
apt clean
apt autoremove
O apt autoremove mostra a lista do que vai remover e pede confirmação: leia antes de responder Y.
Causa 4: backups e arquivos grandes guardados na VPS
Como confirmar: procure arquivos acima de 500 MB no disco principal:
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
Cópias de banco (.sql, .sql.gz), arquivos compactados (.tar.gz, .zip) e backups em /root, /home ou /var/backups costumam aparecer aqui.
Como resolver: baixe para o seu computador o que precisa guardar e depois apague na VPS. No terminal do seu computador:
scp root@<IP_DA_VPS>:/root/<ARQUIVO> .
Depois, na VPS, apague o arquivo com rm /root/<ARQUIVO>. Backup guardado só na própria VPS some junto com ela: mantenha uma cópia fora.
Causa 5: arquivo apagado que ainda está aberto
Como confirmar: o df -h mostra o disco cheio, mas o du não encontra onde está o espaço. Um programa pode estar segurando um arquivo já apagado:
find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'
Como resolver: reinicie o serviço que aparece segurando o arquivo, por exemplo systemctl restart <SERVICO>. O espaço é liberado na hora. Veja "Como ver e gerenciar serviços na VPS via SSH".
Causa 6: o disco é pequeno para o que você usa
Como confirmar: depois da limpeza, o uso volta a passar de 90% em pouco tempo, ou o que ocupa espaço são dados que você precisa manter.
Como resolver: aumente o plano em Minhas VPS › Gerenciar › Plano, com Mudar de plano. O passo a passo está em "Como mudar o plano da VPS pelo painel". Depois da troca, confira o tamanho novo com df -h.
Quando chamar o Suporte
Na VPS, você tem acesso root e cuida do que instala; o suporte da StayCloud cuida da infraestrutura: a VPS ligada, a rede e o painel, e não escolhe nem apaga os seus arquivos. Veja "Perguntas frequentes sobre o que o suporte da StayCloud faz". Abra um chamado se, depois de mudar o plano, o df -h não mostra o disco maior, ou se o disco cheio impede a VPS de ligar e nem o Console SSH do painel abre.
No chamado, informe o IP da VPS ou o nome dela no painel, o horário, a mensagem de erro literal, a saída de df -h e de du -sh /* 2>/dev/null | sort -h, o que você já apagou e o que já tentou. O passo a passo está em "Como abrir um chamado no Suporte".
Relacionados
- Como ver o consumo de CPU, memória e disco da VPS via SSH
- Como ver o uso de CPU, memória e disco da sua VPS pelo painel
- Como criar um snapshot da sua VPS pelo painel antes de uma mudança
- Como mudar o plano da VPS pelo painel
- Como instalar o Docker na VPS via SSH
- Comandos básicos de Linux para usar na sua VPS via SSH
- Perguntas frequentes sobre o que o suporte da StayCloud faz
- Como abrir um chamado no Suporte
Viu algo errado ou desatualizado?