As chances são de que o espaço excedente seja alocado para arquivos abertos, mas já excluídos.
du
mostrará apenas os arquivos que estão acessíveis através do sistema de arquivos (ou seja, possuem um nome de arquivo). Quando um arquivo é excluído, seu nome de arquivo é removido do diretório, mas os blocos de disco (e o inode) são liberados somente quando todos os processos fecham o arquivo aberto para esse arquivo. A maneira mais trivial de ter problemas com isso é excluir arquivos de logs abertos e esperar que o espaço seja liberado. Então você tem que coagir os processos de retenção para fechar suas alças de arquivo ou matar esses processos (um processo de saída sempre fecha todas as suas alças de arquivo). Existem outras maneiras de um processo estar usando um arquivo (executá-lo como um binário, carregando-o como um objeto compartilhado, mapeando-o no espaço da memória).
Para ver quais arquivos abertos, mas excluídos, são mantidos pelos processos em execução, você pode usar utilitários como lsof
ou pode procurar em /proc/*
. Lá, há um diretório para cada processo em execução, nomeado com seu PID (como: /proc/1
para PID número 1). Sob o diretório, um link simbólico chamado exe
mostra o binário executando o como o processo, um arquivo chamado maps
mostra os arquivos mapeados no espaço de memória do processo, e um diretório chamado fd
lista todos os identificadores de arquivos abertos do processo. Se você ver (excluído), é isso.