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

LocalO que costuma serComo liberar
/var/log/journalLogs do systemdjournalctl --vacuum-size=500M
/var/logLogs de aplicação sem rotaçãoConfigurar o logrotate; para esvaziar um log em uso, truncate -s 0 arquivo.log
/var/cache/aptPacotes baixadosapt clean
/boot e /usr/lib/modulesKernels antigosapt autoremove --purge (mantém o kernel atual)
/var/lib/vz/dumpBackups vzdump do ProxmoxApague pela interface (Storage > Backups) ou defina retenção no job
/var/lib/vz/template/isoISOs esquecidasRemova as que não usa mais
/var/lib/dockerImagens, volumes e logs de containersdocker system df e depois docker system prune
/tmp e /var/tmpTemporários antigos, dumpsApague o que for seu e antigo
/home, /rootDumps de banco, cópias manuais, .tar.gzMova para fora do servidor ou apague
Não apague com 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 df engana em pools ZFS. Use zfs list -o space e zfs 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% e Meta% no lvs. Dentro das VMs, ative o Discard no disco virtual e rode fstrim -av (Linux) ou "Otimizar unidades" (Windows) para devolver ao pool o espaço apagado pelo convidado.

Como saber se funcionou

  • df -h mostra uso abaixo de 80–85% no sistema de arquivos afetado.
  • Os serviços que falharam voltam a subir: systemctl --failed deve vir vazio.

Problemas comuns

  • Não consigo nem fazer login: use o console IPMI/iLO e libere espaço com journalctl --vacuum-size=200M e apt 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 use PURGE BINARY LOGS; nunca apague os arquivos binlog na mão.
  • O disco volta a encher rápido: descubra quem escreve com iotop -o ou 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.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também