Eu tenho um disco SCSI em um servidor (hardware Raid 1), 32G, sistema de arquivos ext3. df
me diz que o disco está 100% cheio. Se eu excluir 1G, isso é mostrado corretamente.
No entanto, se eu executar um du -h -x /
então du
me diz que apenas 12G são usados (eu uso -x
por causa de algumas montagens do Samba).
Portanto, minha pergunta não é sobre diferenças sutis entre os comandos du e df, mas sobre como posso descobrir o que causa essa enorme diferença?
Eu reiniciei a máquina para um fsck que foi sem erros. Devo correr badblocks
? lsof
não me mostra nenhum arquivo excluído aberto, lost+found
está vazio e não há uma instrução óbvia de aviso/erro/falha no arquivo de mensagens.
Sinta-se à vontade para pedir mais detalhes da configuração.
Acabei de tropeçar nesta página ao tentar rastrear um problema em um servidor local.
No meu caso o
df -h
edu -sh
incompatível por cerca de 50% do tamanho do disco rígido.Isso foi causado pelo apache (httpd) mantendo grandes arquivos de log na memória que foram excluídos do disco.
Isso foi rastreado executando
lsof | grep "/var" | grep deleted
onde/var
estava a partição que eu precisava limpar.A saída mostrou linhas como esta:
httpd 32617 nobody 106w REG 9,4 1835222944 688166 /var/log/apache/awstats_log (deleted)
A situação foi então resolvida reiniciando o apache (
service httpd restart
), e liberou 2 GB de espaço em disco, permitindo que os bloqueios dos arquivos excluídos fossem limpos.Verifique se há arquivos localizados nos pontos de montagem. Frequentemente, se você monta um diretório (digamos, um sambafs) em um sistema de arquivos que já tinha um arquivo ou diretórios, você perde a capacidade de ver esses arquivos, mas eles ainda estão consumindo espaço no disco subjacente. Eu tive cópias de arquivos enquanto no modo de usuário único despeja arquivos em diretórios que eu não conseguia ver, exceto no modo de usuário único (devido a outros sistemas de diretórios sendo montados em cima deles).
Concordo com a resposta do OldTroll como a causa mais provável para o seu espaço "ausente".
No Linux, você pode facilmente remontar toda a partição raiz (ou qualquer outra partição) para outro local em seu sistema de arquivos, digamos
/mnt
, por exemplo, basta emitir umentão você pode fazer um
e veja o que está consumindo seu espaço.
No meu caso, isso tinha a ver com grandes arquivos excluídos. Foi bastante doloroso resolver antes de encontrar esta página, que me colocou no caminho correto.
Eu finalmente resolvi o problema usando
lsof | grep deleted
, que me mostrou qual programa estava segurando dois arquivos de log muito grandes (totalizando 5 GB da minha partição raiz de 8 GB disponível).Veja o que
df -i
diz. Pode ser que você esteja sem inodes, o que pode acontecer se houver um grande número de arquivos pequenos nesse sistema de arquivos, que usa todos os inodes disponíveis sem consumir todo o espaço disponível.Os arquivos que são abertos por um programa não desaparecem (param de consumir espaço em disco) quando você os exclui, eles desaparecem quando o programa os fecha. Um programa pode ter um arquivo temporário enorme que você (e du) não consegue ver. Se for um programa zumbi, talvez seja necessário reiniciar para limpar esses arquivos.
Para mim, eu precisava executar
sudo du
, pois havia uma grande quantidade de arquivos docker nos/var/lib/docker
quais um usuário não sudo não tem permissão para ler.Tente isto para ver se um processo morto/travado está bloqueado enquanto ainda está gravando no disco: lsof | grep "/mnt"
Em seguida, tente eliminar quaisquer PIDs que estejam presos (especialmente procure por linhas que terminam em "(excluído"))
Este é o método mais fácil que encontrei até hoje para encontrar arquivos grandes!
Aqui está um exemplo se sua montagem root estiver cheia / (mount /root) Exemplo:
cd / (então você está na raiz)
ls | xargs du -hs
Saída de exemplo:
então você notaria que a loja é grande faça um cd /store
e correr novamente
ls | xargs du -hs
neste caso, o diretório vms é o devorador de espaço.
Mais uma possibilidade a considerar - é quase garantido que você verá uma grande discrepância se estiver usando o docker e executar df/du dentro de um contêiner que está usando montagens de volume. No caso de um diretório montado em um volume no host docker, df relatará os totais df do HOST. Isso é óbvio se você pensar sobre isso, mas quando você receber um relatório de um "contêiner descontrolado enchendo o disco!", certifique-se de verificar o consumo de espaço no arquivo do contêiner com algo como
du -hs <dir>
.