Sometimes people report a huge size discrepancy between the output of du and df. There are two main reasons for this:
- open file descriptors
- mounted filesystems hiding unmounted filesystems
With regards to open file descriptors, check that any processes that are running are not holding open files. Shut down Apache, or Oracle, or MySQL, or Postgres, etc. That should usually do it.
The other thing you can check is to see that mounted filesystems are not masking (or hiding unmounted filesystems). Unmount all filesystems and check again, you will see what has been hiding behind the mounted FS.