Disco cheio no Linux? Descubra o que ocupa espaço com df, du e ncdu, limpe logs, cache e snapshots com segurança e resolva o espaço fantasma do lsof.
Para que serve
Com o disco cheio no Linux, bancos de dados param de gravar, serviços não iniciam, o SSH pode falhar e, no Proxmox, VMs ficam travadas. Este artigo mostra um roteiro para achar rapidamente o que está ocupando espaço e o que pode ser apagado sem risco.
Pré-requisitos
- Acesso root (se o SSH falhar por falta de espaço, use o console IPMI/iLO).
- Calma para não apagar nada antes de entender o que é. Arquivos de banco de dados, discos de VM e backups não se apagam "para testar".
Passo a passo para resolver o disco cheio no Linux
1. Descobrir qual sistema de arquivos encheu
df -hT
df -i
O primeiro comando mostra o espaço por ponto de montagem; o segundo mostra os inodes. Se IUse% estiver em 100%, o problema não é tamanho, e sim quantidade de arquivos (geralmente milhões de arquivos pequenos de sessão, cache ou fila de e-mail).
2. Achar os diretórios que mais ocupam
du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
O -x faz o du ficar no mesmo sistema de arquivos, sem contar outros discos montados. Repita entrando no maior diretório (por exemplo, du -xh --max-depth=1 /var | sort -h) até achar o culpado.
Para navegar de forma interativa, o ncdu é mais prático:
apt install ncdu
ncdu -x /
Use as setas para entrar nos diretórios; a tecla d apaga (com confirmação) e q sai.
Para listar arquivos grandes diretamente:
find / -xdev -type f -size +1G -exec ls -lh {} \; 2>/dev/null
Para inodes, descubra o diretório com mais arquivos:
du -x --inodes --max-depth=2 / 2>/dev/null | sort -n | tail -15
3. Suspeitos frequentes e como limpar
| Local | O que costuma ser | Como liberar |
|---|---|---|
/var/log/journal | Logs do systemd | journalctl --vacuum-size=500M |
/var/log | Logs de aplicação sem rotação | Configurar o logrotate; para esvaziar um log em uso, truncate -s 0 arquivo.log |
/var/cache/apt | Pacotes baixados | apt clean |
/boot e /usr/lib/modules | Kernels antigos | apt autoremove --purge (mantém o kernel atual) |
/var/lib/vz/dump | Backups vzdump do Proxmox | Apague pela interface (Storage > Backups) ou defina retenção no job |
/var/lib/vz/template/iso | ISOs esquecidas | Remova as que não usa mais |
/var/lib/docker | Imagens, volumes e logs de containers | docker system df e depois docker system prune |
/tmp e /var/tmp | Temporários antigos, dumps | Apague o que for seu e antigo |
/home, /root | Dumps de banco, cópias manuais, .tar.gz | Mova para fora do servidor ou apague |
rm um log que está aberto por um serviço: o espaço só volta quando o serviço fechar o arquivo. Prefira truncate -s 0. Também nunca apague arquivos dentro de /var/lib/mysql, /var/lib/postgresql ou dos discos de VM manualmente.4. Espaço "fantasma": o df diz cheio, o du não encontra
Quando um arquivo é apagado enquanto um processo ainda o mantém aberto, ele some da listagem, mas continua ocupando o disco. Procure assim:
lsof +L1 2>/dev/null | sort -k7 -n | tail
A saída mostra o processo e o tamanho do arquivo apagado. Reiniciar esse serviço (systemctl restart nome) libera o espaço.
5. Limitar os logs do journal de forma permanente
mkdir -p /etc/systemd/journald.conf.d
printf '[Journal]\nSystemMaxUse=1G\n' > /etc/systemd/journald.conf.d/limite.conf
systemctl restart systemd-journald
6. Proxmox: ZFS e LVM-thin
- ZFS: o
dfengana em pools ZFS. Usezfs list -o spaceezfs list -t snapshot -o name,used -s used. Snapshots antigos costumam ser os vilões; apague os desnecessários pela interface da VM (aba Snapshots). Mantenha o pool abaixo de 80% de uso para não perder desempenho. - LVM-thin: veja a coluna
Data%eMeta%nolvs. Dentro das VMs, ative o Discard no disco virtual e rodefstrim -av(Linux) ou "Otimizar unidades" (Windows) para devolver ao pool o espaço apagado pelo convidado.
Como saber se funcionou
df -hmostra uso abaixo de 80–85% no sistema de arquivos afetado.- Os serviços que falharam voltam a subir:
systemctl --faileddeve vir vazio.
Problemas comuns
- Não consigo nem fazer login: use o console IPMI/iLO e libere espaço com
journalctl --vacuum-size=200Meapt clean, que são seguros. - Banco de dados encheu o disco com logs binários: no MySQL/MariaDB, defina a retenção (
binlog_expire_logs_seconds) e usePURGE BINARY LOGS; nunca apague os arquivosbinlogna mão. - O disco volta a encher rápido: descubra quem escreve com
iotop -oou monitore o tamanho dos diretórios ao longo do dia. A causa costuma ser um log em modo de depuração ou um backup local sem retenção. - Precisa mesmo de mais espaço: veja o artigo «Como aumentar volume LVM e o sistema de arquivos sem desligar o servidor» ou abra um ticket para consultar as opções disponíveis para o seu servidor.
Se os backups do Proxmox são os que mais ocupam, veja também o artigo «Como fazer backup no Proxmox: VMs com vzdump e Proxmox Backup Server» para configurar a retenção. Para ser avisado antes de o disco encher, veja «Como receber alertas do servidor no Telegram, e-mail ou WhatsApp».
Perguntas frequentes
Como ver o que está ocupando espaço no Linux?
Use du -xh --max-depth=1 / | sort -h para listar os maiores diretórios ou o ncdu -x / para navegar de forma interativa até o culpado.
Por que o df mostra o disco cheio e o du não encontra nada?
Geralmente é um arquivo apagado que continua aberto por algum processo. Encontre-o com lsof +L1 e reinicie o serviço que o mantém aberto.
Posso apagar os arquivos de /var/log?
Logs antigos e compactados, sim. Para logs em uso, prefira truncate -s 0 e, para o journal, journalctl --vacuum-size. O ideal é configurar o logrotate para que não cresçam de novo.
O que significa inodes em 100%?
Significa que acabou a quantidade de arquivos que o sistema de arquivos suporta, mesmo com espaço livre. Procure o diretório com milhões de arquivos pequenos com du --inodes.
Leitura complementar
Precisa de ajuda?
Se o servidor não inicia por falta de espaço ou você não conseguiu identificar a causa, abra um ticket com a saída de df -hT, df -i e lsblk.
