Entendendo du vs df: Medindo o Uso de Disco Corretamente
O Que Voce Vai Aprender
- Explicar os papeis diferentes de
duedf - Entender por que
dfmostra cheio mas os totais dedunao batem - Resolver sozinho o misterio "deletei mas o espaco nao voltou"
- Dominar um padrao sistematico de investigacao para incidentes de disco cheio
Publico-alvo: Iniciantes em Linux, qualquer pessoa que usa du e df sem entende-los completamente
Introducao: O Incidente de Disco Cheio da Lina
du, mas o total nem chega perto. O que esta acontecendo?du e df nao sao basicamente a mesma coisa?A Resposta Curta
df= espaco livre por sistema de arquivos (visao do ponto de montagem)du= uso por diretorio ou arquivo (agregacao baseada em caminho)- Divergencias vem principalmente de arquivos deletados mas abertos, limites de montagem e blocos reservados para root
df - Espaco Livre por Sistema de Arquivos
Conclusao:
dfmostra espaco livre por sistema de arquivos e retorna instantaneamente.
df. Significa "disk free" e reporta espaco total, usado e disponivel por sistema de arquivos, ou seja, por ponto de montagem./, /home, um drive USB em /mnt/usb) e contado separadamente.Experimente
$ df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 42G 5.5G 89% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda2 100G 60G 40G 61% /home
Como Interpretar
Filesystem: Nome do dispositivo (ex.:/dev/sda1)Size: Capacidade totalUsed: Espaco usadoAvail: Espaco livreUse%: Percentual de uso (fique atento acima de 90%)Mounted on: Ponto de montagem
-h faz?--human-readable. Mostra tamanhos como 50G ou 5.5G em vez de kilobytes brutos. Sem -h, voce ve numeros como 52428800 -- bem dificil de ler.Opcoes Comuns
$ df -h # Unidades legiveis (G, M, K) $ df -T # Mostrar tambem o tipo de sistema de arquivos (ext4, xfs, etc.) $ df -i # Mostrar uso de inodes em vez de bytes $ df -h /var # Apenas o sistema de arquivos que contem este caminho
Nao Esqueca do df -i
Quando voce ve "No space left" apesar de ter bastante espaco em bytes, exaustao de inodes e frequentemente a causa (tipicamente por muitos arquivos pequenos).
Sempre verifique ambos df -h e df -i.
du - Uso por Diretorio
Conclusao:
dupercorre arquivos para totalizar o uso;-shfornece o resumo.
du. Significa "disk usage" e percorre os arquivos sob o caminho dado para calcular o tamanho total.du em um diretorio enorme pode demorar bastante. Isso e o oposto de df, que retorna instantaneamente.Experimente
$ du -sh /var/log
1.2G /var/log
Combinacoes Uteis de Opcoes
-s(summary): Mostrar apenas o total-h(human-readable): Unidades amigaveis--max-depth=N: Limitar a recursao a N niveis
-sh e a combinacao essencial -- memorize.
Encontrar Subdiretorios Pesados por Nivel
$ du -h --max-depth=1 /var
4.0K /var/games 1.2G /var/log 512M /var/cache 24M /var/lib 1.7G /var
Ordenar por Tamanho
$ du -sh /var/* 2>/dev/null | sort -h
4.0K /var/games 4.0K /var/opt 24M /var/lib 512M /var/cache 1.2G /var/log
Pontos-chave
2>/dev/null: Suprimir erros de permissao negada de subdiretorios inacessiveissort -h: Ordenar corretamente com unidades legiveis (trata1.2Gcomo maior que512M)
sort -n simples so olha o numero inicial, entao colocaria 1.2G antes de 512M. Use -h.
A Diferenca Decisiva Entre du e df
Conclusao:
dfmede sistemas de arquivos,dumede diretorios.
Tabela Comparativa
| Aspecto | df | du |
|---|---|---|
| Unidade | Sistema de arquivos | Diretorio / arquivo |
| Como obtem os dados | Do superbloco | Percorre os arquivos diretamente |
| Velocidade | Instantaneo | Lento em caminhos grandes |
| Arquivos deletados mas abertos | Incluidos | Nao incluidos |
| Outras montagens | Contadas separadamente | Cruza por padrao (bloquear com -x) |
| Blocos reservados para root | Afeta Avail |
Sem efeito |
df diz "90% cheio" mas du so encontra 60% em arquivos, e exatamente essa diferenca?Causa #1: Arquivos Deletados Mas Abertos
Conclusao: Arquivos deletados mas abertos sao contados pelo
dfmas nao pelodu.
df e du: "arquivos que foram deletados mas ainda estao abertos por um processo."rm nao remove verdadeiramente um arquivo enquanto um processo ainda o tem aberto. Os dados permanecem ate o ultimo descritor de arquivo ser fechado. Imagine alguem executando rm /var/log/access.log enquanto o nginx ainda esta escrevendo nele.du nao consegue encontra-lo porque nao ha mais um nome de arquivo para percorrer. Mas df ve os blocos como ainda alocados. Dai vem a diferenca.Encontrar Arquivos Deletados Mas Abertos
$ sudo lsof | grep deleted
nginx 1234 root 5w REG 8,1 524288000 ... /var/log/nginx/access.log (deleted) mysqld 5678 mysql 7w REG 8,1 104857600 ... /tmp/ibdata.tmp (deleted)
Como Interpretar
- Coluna 1: Nome do processo (
nginx,mysqld) - Coluna 2: PID (ID do processo)
- Coluna 7: Tamanho em bytes
(deleted)ao final: Indicador de arquivos que foram desvinculados mas ainda estao abertos
Liberar o Espaco
# Reiniciar ou recarregar o processo que mantem o arquivo $ sudo systemctl restart nginx $ sudo systemctl reload mysql # Avancado: redirecionar o fd aberto sem reiniciar # (ex.: truncar /proc/<PID>/fd/<N> para /dev/null -- territorio de especialista)
Verifique o Impacto Antes de Reiniciar
Antes de systemctl restart em producao, confirme a janela de indisponibilidade e quaisquer servicos dependentes. Veja No space left on device para o guia completo de incidentes.
Causa #2: Limites de Montagem
Conclusao:
ducruza montagens por padrao; use-xpara corresponder aodf.
/home montado em sua propria particao. O que acontece quando voce executa du -sh /?/home no total?du cruza pontos de montagem. Mas df conta cada sistema de arquivos separadamente. Entao du -sh / pode resultar maior que o numero do df para /.# Permanecer dentro de um sistema de arquivos (corresponde ao escopo do df) $ sudo du -sh -x /
-x (--one-file-system)
Isso diz ao du para agregar apenas arquivos no mesmo sistema de arquivos que o caminho inicial. Torna o resultado diretamente comparavel ao df.
Causa #3: Blocos Reservados para Root
Conclusao: ext4 reserva ~5% para root, entao o Avail do
dfparece menor.
Avail do df subtrai esse bloco reservado. E por isso que Size - Used nem sempre e igual a Avail.# Verificar a contagem de blocos reservados $ sudo tune2fs -l /dev/sda1 | grep -i reserved
Reserved block count: 655360 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root)
Reduza a Reserva com Cuidado
Voce pode diminui-la com tune2fs -m 1 /dev/sda1, mas mantenha a reserva no sistema de arquivos raiz. Considere diminuir apenas em particoes dedicadas a dados.
O Padrao Pratico de Investigacao
Conclusao: Execute
df -h, depoisdf -i, depoisdu, depoislsofnessa ordem.
Guia de Investigacao de Disco (de cima para baixo)
- Visao geral:
df -h(qual sistema de arquivos esta cheio?) - Verificar inodes tambem:
df -i(caso de exaustao por arquivos pequenos) - Encontrar diretorios pesados:
sudo du -h --max-depth=1 / 2>/dev/null | sort -h - Se df e du discordam:
sudo lsof | grep deleted - Limpar logs antigos: Procure em
/var/logpor arquivos.gzrotacionados - Nao libera?: Reinicie o servico que mantem o arquivo com
systemctl restart
Comandos para Cada Etapa
# 1. Visao geral df -h # 2. Verificacao de inodes df -i # 3. Detalhar diretorios pesados (um nivel por vez) sudo du -h --max-depth=1 / 2>/dev/null | sort -h sudo du -h --max-depth=1 /var 2>/dev/null | sort -h sudo du -h --max-depth=1 /var/log 2>/dev/null | sort -h # 4. Arquivos deletados abertos (ordenados por tamanho, maior primeiro) sudo lsof | grep deleted | sort -k7 -n -r | head # 5. Buscar arquivos grandes individualmente sudo find / -type f -size +100M 2>/dev/null
Mini Exercicios: Experimente no Seu Sistema
Conclusao: Tres exercicios: uso, diretorios maiores e explicar a diferenca entre df e du.
Exercicio 1: Mostre o uso da sua particao /.
Exercicio 2: Encontre os 3 maiores diretorios diretamente abaixo do seu home.
Exercicio 3: Compare df -h com sudo du -sh -x /, depois explique a diferenca em uma frase.
Dica para o Exercicio 1
df -h /
A coluna Use% mostra o uso. Qualquer coisa acima de 90% merece limpeza.
Dica para o Exercicio 2
du -h --max-depth=1 ~ 2>/dev/null | sort -h | tail -3
tail -3 pega as tres maiores entradas.
Dica para o Exercicio 3
Razoes comuns para os numeros divergirem:
- Arquivos deletados mas ainda abertos (contados apenas pelo
df) - Limites de montagem (a menos que
du -xseja usado) - Blocos reservados para root do ext4 (afeta o
Availdodf)
Armadilhas Comuns
Conclusao: Verifique tamanhos com
ls -lhantes de deletar; prefiratruncate.
Tres Padroes a Evitar
- Executar
du -sh /via SSH semnohup--> a varredura morre se sua sessao desconectar no meio - Deletar arquivos baseado apenas no
df--> inutil quando a causa sao arquivos deletados abertos rm -rf /tmp/*como limpeza geral --> corrompe arquivos de trabalho de aplicacoes em execucao
Habitos Seguros
- Use
sudo du -sh /*para detalhar a partir do nivel superior, nao varrer toda a arvore de uma vez - Sempre execute
ls -lhprimeiro para verificar o tamanho e timestamp antes de deletar - Para logs grandes, prefira
truncate -s 0 logfileem vez derm-- esvazia o arquivo no lugar, mesmo enquanto um processo o mantem aberto