Ttry this:
http://www.cyberciti.biz/tips/freebsd-why-command-df-and-du-reports-different-output.html
If the files are deleted (by rm command) while they are being opened or used by a Linux program / process, the evil of "open file descriptor" problem arises and confuse the Linux file system on reporting the real figure of used disk space or free disk space available.
In order to resolve the fake "disk space full" problem, i.e. to reclaim "used disk space", you need to kill or terminate the "defunct process" - in this case, the rm command that turns to be defunct process while the files are being used.
Once these defunct processes are terminated, the "open file descriptor" problem will be resolved, and both the du and df commands will agree to report the real file system used disk space or free disk space!
How to find out and terminate or kill the defunct processes that cause open file descriptor problem, in order to resolve the difference of used disk space in du and df command?
For this particular scenario, the lsof command (list open file command) is great to show light:
#lsof | grep "deleted"
and look for Linux process ID in second column of the lsof command output. The seventh column is the size of file being "deleted" (but not success and turns out to be defunct process).
Now, you'll just need to kill the Linux process IDs to see the correct ouput of DU and DF, Use following command to kill the Process IDs
#lsof | grep "deleted" | awk '{print $2}' | xargs kill -9
Now verify the disk usage by both commands; you should not get the difference.