Why ls and du show different size?

I am downloading a file with rtorrent,

When I check the folder that the file is located on, the filesize with ls command is 4.4GB but when I check the disk with du command it shows me 219MB, also the same problem with df command that seems just calculate the 219MB one.


Here is the my console result

root@SERVER:/home/.root/TMP/tnt/d1/xxx# dir -alh

total 219M
drwxr-xr-x  2 root root 4.0K 2010-01-10 15:30 .
drwxr-xr-x 15 root root 4.0K 2010-01-10 15:30 ..
-rw-r--r--  1 root root 4.4G 2010-01-11 10:55 yyy.mkv

root@SERVER:/home/.root/TMP/tnt/d1/xxx# du -h

219M    .

root@SERVER:/home/.root/TMP/tnt/d1/xxx# 

Solution 1:

It's a sparse file. ls is reporting the allocated size; du is reporting the amount of space actually used.

As your torrent client downloads more it will fill in the gaps and the du-reported size will grow to match what ls reports.

To force du and df to include sparces, from the man du the second option listed is --apparent-size:

du -s -B1 --apparent-size