vps-linux/Artigo

    Disco cheio na VPS: como identificar e liberar espaço

    Quando o disco da VPS chega a 100%, containers Docker param de escrever logs e travam, bancos de dados recusam escritas e o sistema pode ficar inacessível. A causa mais comum em VPS com Docker são imagens e volumes não utilizados — docker system prune resolve em segundos. Veja como diagnosticar e liberar espaço rapidamente.

    Diagnóstico: encontrar o que está ocupando espaço

    Antes de deletar qualquer coisa, identifique os maiores consumidores de disco:

    bash
    # Verificar espaço total e disponível
    df -h /
    
    # Encontrar os diretórios mais pesados (nível 1)
    du -sh /* 2>/dev/null | sort -rh | head -15
    
    # Aprofundar no diretório mais pesado (ex: /var)
    du -sh /var/* 2>/dev/null | sort -rh | head -10
    
    # Encontrar arquivos maiores que 500 MB
    find / -xdev -size +500M -type f 2>/dev/null \
      | xargs ls -lh 2>/dev/null | sort -k5 -rh
    
    # Disco ocupado por Docker (imagens, containers, volumes)
    docker system df
    Dica
    O flag -xdev no find evita atravessar sistemas de arquivos diferentes (como /proc e /sys) que reportariam tamanhos falsos.

    Limpeza do Docker (maior ganho)

    Em VPS com Docker, imagens antigas, containers parados e volumes órfãos são o principal gargalo. Libere tudo de uma vez:

    bash
    # Ver o que será removido antes de remover
    docker system df -v
    
    # Remover imagens sem uso, containers parados e cache de build
    docker system prune -f
    # Output: "Total reclaimed space: X.X GB"
    
    # Remover também volumes não utilizados (CUIDADO: verifique antes)
    docker system prune -af --volumes
    
    # Remover apenas imagens antigas (não as atuais)
    docker image prune -f
    
    # Remover apenas containers parados
    docker container prune -f
    
    # Remover imagens de um repositório específico
    docker images | grep "nome_da_imagem" | awk '{print $3}' | xargs docker rmi
    Atenção
    docker system prune -af --volumes remove volumes não utilizados. Se um volume não estiver conectado a um container ativo no momento mas contiver dados importantes, ele será deletado. Execute docker volume ls antes para identificar volumes existentes.

    Limpar logs do sistema

    Logs do journald e de aplicações podem crescer indefinidamente sem rotação configurada:

    bash
    # Ver tamanho total dos logs do journald
    journalctl --disk-usage
    
    # Manter apenas os últimos 7 dias de log
    sudo journalctl --vacuum-time=7d
    
    # Manter máximo de 500 MB de logs
    sudo journalctl --vacuum-size=500M
    
    # Configurar limite permanente no journald
    sudo nano /etc/systemd/journald.conf
    # Adicionar/descomentar:
    # SystemMaxUse=500M
    # MaxRetentionSec=7day
    sudo systemctl restart systemd-journald
    
    # Limpar logs de aplicações em /var/log
    sudo find /var/log -name "*.gz" -mtime +30 -delete
    sudo find /var/log -name "*.log.*" -mtime +30 -delete

    Limpar cache de pacotes e arquivos temporários

    O cache do APT e arquivos temporários acumulam com o tempo:

    bash
    # Cache do APT (pacotes baixados mas não mais necessários)
    sudo apt autoremove -y        # remover pacotes órfãos
    sudo apt autoclean            # remover pacotes baixados desnecessários
    sudo apt clean                # limpar todo o cache de pacotes
    du -sh /var/cache/apt/archives/
    
    # Arquivos temporários
    sudo rm -rf /tmp/* /var/tmp/*
    
    # Thumbnails e cache de usuário
    rm -rf ~/.cache/thumbnails/*
    du -sh ~/.cache/
    
    # Logs de crash do sistema
    sudo rm -rf /var/crash/*
    
    # Cores de dump
    sudo sysctl -w kernel.core_pattern=/dev/null

    Configurar logrotate para logs de containers

    Logs de containers Docker crescem indefinidamente por padrão. Configure rotação para evitar disco cheio no futuro:

    bash
    # Configurar log driver do Docker globalmente
    sudo nano /etc/docker/daemon.json
    
    # Adicionar configuração de log:
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    
    # Reiniciar Docker para aplicar
    sudo systemctl restart docker
    
    # Por container (no docker-compose.yml):
    services:
      meu_app:
        logging:
          driver: json-file
          options:
            max-size: "10m"
            max-file: "3"
    Dica
    Essa configuração limita cada container a 3 arquivos de log de 10 MB = máximo 30 MB por container. A configuração global em daemon.json aplica a todos os containers novos; containers existentes precisam ser recriados.

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes