È del tutto possibile che tu abbia un file eliminato molto grande (o molti piccoli) su cui un processo ha ancora un handle di file aperto. Il modo per trovarli è correre
# lsof | grep "deleted"
Se vedi molte righe che terminano con "(eliminato)", puoi trovare l'ID del processo che le ha aperte e riavviarlo. Una volta che ciò accade, lo spazio su disco dovrebbe tornare.
Se questo non risolve il problema, allora consiglierei un fsck.
Ci sono un sacco di motivi per cui du non è uguale a df. Guarda le risposte a questa domanda.
Alcuni sono montaggi sovrapposti, molti file di piccole dimensioni e dimensioni di blocco maggiori e file eliminati che sono ancora in uso. I montaggi in sovrapposizione si verificano quando monti un filesystem su un punto di montaggio che contiene dei file, quindi non li vede.
La differenza principale tra i due è che df controlla solo il superblocco e si fida di esso, mentre as du esegue la scansione di tutti i file che è in grado di vedere e li somma. Vedi questo link IBM per informazioni sul superblocco.
Usa sempre l'opzione -x con du quando stai inseguendo problemi come questo. Impedisce a du di attraversare i filesystem.