Silly question regarding "du" and "df".

Marius Gedminas marius at pov.lt
Fri Jan 26 13:39:47 UTC 2007


On Fri, Jan 26, 2007 at 05:45:48PM +0800, Michael T. Richter wrote:
> Being who I am, I also run df and get this:
> 
> Filesystem             Size   Used  Avail Use% Mounted on
> /dev/sda1               79G    38G    38G  50% /media/Repository80GB
> 
> Now I cannot for the life of me make the numbers add up.

That's because by default 5% of disk space in ext3 partitions is
reserved and not included in the Avail column.  79G * 5% ~= 4G.  38G +
38G + 4G = 80G. The 1G difference is just rounding error, run df without
-h to see the exact block counts.

There are two reasons for reserving 5%:

  * It reduces disk fragmentation.

  * If a user fills up the partition, the superuser can still create
    files.

> Absolutely the
> only thing on the disk is this (partial) mirror.  Yet "du" reports that
> only 35GB is used up while df reports that 38GB is used up.

That's a bit more interesting.  Here's the du report I snipped above:

> 22G     pool/main
> 2.8G    pool/multiverse
> 591M    pool/restricted
> 9.2G    pool/universe
> 35G     total

The difference can consist of:

  * files/directories that are siblings of 'pool' (there may be hidden
    ones), but I think that's unlikely

  * deleted files that are still opened by some application (their space
    will be freed when all applications close them).

  * filesystem metadata (block usage bitmaps, inodes, the ext3 journal).

  * errors in accounting if the machine crashed and didn't unmount the
    filesystem, or if there's corruption of some sort.

I'm pretty certain that in your case those 3 gigs are in filesystem
metadata.

> Now perhaps
> I can see slack space making up the difference (although almost 10%
> slack space is pretty odd for such large files).

du includes slack space in its calculations.  Compare the files sizes
printed by du with those printed by ls -l.

> In case there's some kind of "quota only for root" thing going on (I
> know I can do this in other operating systems so I assume that even
> UNIXen can do it), I su -i and try again.  Same numbers all around.

Being root does not change the numbers shown by df.  You can see the
number of reserved blocks in a filesystem with tune2fs -l /dev/hdaX.
Midnight Commander also shows the whole available space, IIRC.

> So why do "du" and "df" report different amounts used?  And why do the
> numbers reported by "df" not add up?  (And why does System
> Monitor->Devices report for that drive a size of 73.4GB instead of 79
> but reports the same amount used as "df"?)

That may be a difference in units.  1G can mean 1000000000 bytes, or it
can mean 1073741824 bytes.  73.4 metric gigabytes = 78.8 binary
gigabytes (or "gibibytes", see http://en.wikipedia.org/wiki/Gibibyte).

> Is this a case of the man
> with two watches never knowing what time it is?

No, just historical legacy.

Marius Gedminas
-- 
The memory management on the PowerPC can be used to frighten small children.
		-- Linus Torvalds
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/ubuntu-users/attachments/20070126/b1116787/attachment.sig>


More information about the ubuntu-users mailing list