[Toybox] [df] percentage different from GNU df

Rob Landley rob at landley.net
Thu Nov 8 13:17:18 PST 2012


On 10/28/2012 10:50:50 PM, Roy Tam wrote:
> Hello,
> 
> I noticed that toybox df shows different percentage from GNU df.
> GNU df calculates percentage by used/(used+free) while toybox use
> (blocks-free)/blocks.
> (which one is better by the way?)

According to posix-2008:

> <percentage used>
> 
> The percentage of the normally available space that is currently  
> allocated to all
> files on the file system. This shall be calculated using the fraction:
>   <space used>/( <space used>+ <space free>)
> expressed as a percentage. This percentage may be greater than 100 if  
> <space free> is
> less than zero. The percentage value shall be expressed as a positive  
> integer, with
> any fractional result causing it to be rounded to the next highest  
> integer.

The "space used" and "space free" entries are the used/available  
displayed in columns 3 and 4. The "any fractional result" implies that  
you do something like:

   pct=(used*100)/(used+free)
   if (pct*(used+free) != (used*100)) pct++;

(Except all with 64 bit math so overflow sucks less.)

> toybox$ ../busybox/busybox df
> Filesystem           1K-blocks      Used Available Use% Mounted on
> udev                     10240         0     10240   0% /dev
> tmpfs                    12456       160     12296   1% /run
> /dev/disk/by-uuid/4277274d-e9a1-42ff-a247-b75bde522deb
>                        1913244   1151656    664400  63% /
> tmpfs                    24912         0     24912   0% /run/shm

160/(160+12296.0)
0.012845215157353885

Not doing the pedantic rounding up.

> toybox$ df
> Filesystem           1K-blocks      Used Available Use% Mounted on
> rootfs                 1913244   1151656    664400  64% /
> udev                     10240         0     10240   0% /dev
> tmpfs                    12456       160     12296   2% /run
> /dev/disk/by-uuid/4277274d-e9a1-42ff-a247-b75bde522deb
>                        1913244   1151656    664400  64% /
> tmpfs                    24912         0     24912   0% /run/shm

Doing the pedantic rounding up.

> toybox$ ./toybox df
> Filesystem      1K-blocks       Used Available Use% Mounted on
> tmpfs               24912          0     24912   0% /run/shm
> /dev/sda1         1913244    1151656    664400  66% /
> tmpfs               12456        160     12296   2% /run
> udev                10240          0     10240   0% /dev

Showing used as a percentage of 1K-blocks, ignoring "available"  
altogether.

Right, I fixed it to match what the standard requires, which seems to  
be what upstream is doing.

Thanks for the heads up,

Rob


More information about the Toybox mailing list