Servidor VPS (Cloud)
Disco cheio no Linux: como ver o que ocupa espaço na VPS
Use este guia com IA
Escolha o que você quer e abra no seu assistente preferido.
1 O que a IA deve fazer?
2 Abrir no assistente
Neste artigo
Resposta rápida: para ver o espaço em disco no Linux, rode df -h. Para descobrir o que está ocupando, use sudo du -xh --max-depth=1 / | sort -h e desça pela maior pasta, ou navegue com sudo ncdu -x /. Os suspeitos mais comuns são journal, logs, cache do apt, imagens do Docker e backups esquecidos. Se o df mostra disco cheio e o du não acha nada, procure arquivos apagados ainda abertos com sudo lsof +L1.
Comece pelo df: o que encheu
df -hT
df -iFilesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 39G 37G 1.6G 96% /
tmpfs tmpfs 197M 1.1M 196M 1% /runOlhe a linha montada em /, a raiz, onde o problema está em quase todos os casos. As linhas tmpfs ficam na memória e não ocupam disco. O nome do disco (/dev/sda1, /dev/vda1) varia conforme a VPS. Se Size menos Used não bate com Avail, é normal: o ext4 reserva cerca de 5% para o root conseguir trabalhar com o disco cheio.
O df -i mostra os inodes, as entradas que o sistema usa para cada arquivo. Se IUse% está em 100% com espaço sobrando, o problema são milhões de arquivos pequenos: sessões de PHP, cache ou fila de e-mail. Para achar onde, conte arquivos em vez de bytes:
sudo du --inodes -x --max-depth=1 / | sort -nAja cedo: com o disco cheio, o banco para de gravar, aplicações falham e atualizações do apt quebram no meio.
As pastas mais pesadas com du e ncdu
O du soma o tamanho de cada pasta. Olhe um nível por vez e desça sempre pela maior:
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h
sudo du -xh --max-depth=1 /var 2>/dev/null | sort -h
sudo du -xh --max-depth=1 /var/lib 2>/dev/null | sort -hO -x não entra em outros sistemas de arquivos, o -h mostra tamanhos legíveis e o sort -h põe a maior pasta por último. Para investigar com mais conforto, o ncdu varre uma vez e deixa você navegar com as setas:
sudo apt install -y ncdu
sudo ncdu -x /Enter entra na pasta, a seta para a esquerda volta, d apaga (com confirmação) e q sai.
Atenção: não apague nada dentro de
/var/lib/mysql,/var/lib/postgresqlou/var/lib/dockercomrmou pelo ncdu. Esses diretórios são controlados pelos próprios programas, e remover arquivos na mão corrompe o banco ou o Docker. A limpeza deles é feita pelos comandos mostrados mais abaixo.
Arquivos grandes com find
# arquivos acima de 500 MB, do maior para o menor
sudo find / -xdev -type f -size +500M -exec du -h {} + 2>/dev/null | sort -rh | head -n 20
# arquivos acima de 100 MB alterados nos últimos 7 dias
sudo find / -xdev -type f -size +100M -mtime -7 -exec ls -lh {} + 2>/dev/null
# dumps e backups compactados esquecidos
sudo find / -xdev -type f \( -name "*.sql" -o -name "*.sql.gz" -o -name "*.tar.gz" -o -name "*.zip" \) -size +100M -exec du -h {} + 2>/dev/null | sort -rhO segundo comando é o melhor quando o disco encheu de repente: o culpado quase sempre é recente.
Os suspeitos de sempre
| Onde | O que acumula | Limpeza segura |
|---|---|---|
/var/log/journal | Journal do systemd, pode passar de 1 GB | journalctl --vacuum e limite no journald.conf |
/var/log | Logs e versões rotacionadas | Apagar os .gz antigos e esvaziar com truncate o log em uso |
/var/cache/apt | Pacotes baixados nas atualizações | apt clean |
/boot e /usr/lib/modules | Kernels antigos | apt autoremove --purge |
/var/lib/snapd | Revisões antigas de snaps | Remover revisões desativadas |
/var/lib/docker | Imagens, containers parados, cache e logs | Comandos prune do Docker |
/home e /root | Backups, dumps e downloads esquecidos | Mover para fora da VPS e apagar |
/var/lib/mysql | Binlogs do MySQL ou MariaDB | PURGE BINARY LOGS e prazo de expiração |
# journal
journalctl --disk-usage
sudo journalctl --vacuum-size=200M
# cache do apt e kernels antigos
sudo apt clean
sudo apt autoremove --purge
# snaps: manter só duas revisões daqui em diante
snap list --all | awk '/disabled/{print $1, $3}'
sudo snap remove NOME_DO_SNAP --revision=NUMERO
sudo snap set system refresh.retain=2Para o journal não voltar a crescer, defina SystemMaxUse=200M em /etc/systemd/journald.conf e rode sudo systemctl restart systemd-journald. Evite rm em /var/log inteiro: alguns serviços, como o Nginx, nem iniciam se a pasta de log sumir. Apague arquivos, não a estrutura.
Docker: imagens, volumes e logs
Em VPS com containers, o Docker é o culpado mais frequente. Cada deploy baixa uma imagem nova e a antiga fica, o cache de build cresce e o log de cada container cresce sem limite na configuração padrão.
docker system df
docker container prune # containers parados
docker image prune -a # imagens que nenhum container usa
docker builder prune # cache de buildVolumes guardam dados de banco e uploads. Liste com docker volume ls, confira a quem pertence cada um e só então remova o que for lixo. Nunca rode limpeza de volumes no automático.
Para limitar o log dos containers, crie ou edite /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}Reinicie com sudo systemctl restart docker. O limite vale só para containers criados depois; recrie os existentes, por exemplo com docker compose up -d --force-recreate.
df mostra cheio, mas o du não acha nada
A causa mais comum é um arquivo apagado que continua aberto por algum processo. Alguém removeu um log de 10 GB com rm enquanto o serviço ainda escrevia nele: o nome sumiu, mas o Linux só libera o espaço quando o processo fecha o arquivo.
sudo lsof +L1A lista mostra arquivos marcados como deleted, com o processo (COMMAND e PID) e o tamanho. A solução mais limpa é reiniciar o serviço dono do arquivo com systemctl restart. Se não puder reiniciar agora, esvazie pelo descritor, usando o número da coluna FD sem a letra:
# exemplo: PID 1234 e FD 3w na saída do lsof
sudo truncate -s 0 /proc/1234/fd/3Para não cair nisso de novo, em vez de apagar um log em uso, esvazie: sudo truncate -s 0 /caminho/arquivo.log.
Evitar que o disco encha de novo
- Alerta quando o disco e os inodes passarem de 80% (veja monitorar a VPS 24 horas).
- Limite do journal no
journald.confe regra de logrotate para cada log de aplicação. - Limite de log nos containers Docker.
- Backups enviados para fora da VPS, com retenção automática (veja backup com rsync).
- Rotina mensal com
apt autoremovee limpeza de imagens antigas do Docker.
Quando limpar não basta
Se o disco volta a passar de 80% em poucas semanas, os dados estão crescendo de verdade: banco, uploads, mundos de jogo. A resposta é mais disco. Nas VPS da RoxyCloud, todas com NVMe, o disco cresce junto com o plano: por exemplo, a linha Xeon vai de 20 GB no plano de 2 GB a 300 GB no de 64 GB, e a Ryzen 9 vai de 35 GB a 250 GB. O upgrade é feito sem recontratar (veja upgrade e downgrade). Depois do upgrade, pode ser preciso expandir a partição e o sistema de arquivos; no Windows, siga como expandir o disco no Windows. Para grandes volumes de dados, compare os servidores dedicados.
Perguntas frequentes
Qual comando mostra o espaço em disco no Linux?
O df -h mostra tamanho, uso e espaço livre de cada sistema de arquivos. Para ver quais pastas ocupam esse espaço, use sudo du -xh --max-depth=1 / ou o ncdu.
Por que o df mostra disco cheio e o du não encontra os arquivos?
Quase sempre é um arquivo apagado que continua aberto por um processo. Rode sudo lsof +L1 para achar o processo e reinicie o serviço para liberar o espaço.
Posso apagar a pasta /var/log inteira?
Não. Alguns serviços nem iniciam se a pasta de log sumir. Apague só os arquivos antigos, esvazie o log em uso com truncate e limite o journal.
Como liberar o espaço usado pelo Docker?
Veja o que pode ser recuperado com docker system df e use docker image prune, docker builder prune e docker container prune. Cuidado com volumes, que guardam dados.
O que são inodes e por que eles acabam?
Inode é a entrada que o sistema usa para cada arquivo e pasta. Milhões de arquivos pequenos podem esgotar os inodes antes do espaço. O df -i mostra o uso.
Precisa de mais ajuda?
Abra um ticket, entre no Discord ou acesse o painel da RoxyCloud.