Today I tried figuring out how much disk space a small file took. I used
stat, but that turned out surprisingly difficult:
# LANG=C stat htpasswd.setup
File: `htpasswd.setup'
Size: 54 Blocks: 8 IO Block: 4096 regular file
Device: 805h/2053d Inode: 5268976 Links: 1
Access: (0640/-rw-r-----) Uid: ( 0/ root) Gid: ( 33/www-data)
Access: 2012-01-19 15:00:58.000000000 -0500
Modify: 2012-01-19 15:00:54.000000000 -0500
Change: 2012-01-19 15:00:54.000000000 -0500
Birth: -
root@vinci:/etc/phpmyadmin#
The "real" size is clear, but at first I thought that didn't say the
size on disk.
There are 3 interesting format sequences:
%b
Number of blocks allocated (see %B)
%B
The size in bytes of each block reported by %b
%o
I/O block size
In the default format, %b is shown as "Blocks" and %o is shown as "IO
Block".
On my system, there are 2 kinds of blocks, those on the HDD, 512 bytes
each, and those of the filesystem, 4096 each. The manual's descriptions
do not make it clear which kind of block is referred to. After
verification, %b refers to HDD blocks.
I'm not sure what language should be used instead. Perhaps instead of
blocks the manual should talk about "data storage device blocks".
As for %o, if you'd ask me what "I/O block size" means without any
context, I'm far from being sure I would answer it means size on disk. I
suggest to call this Size on disk, or Size used on the filesystem.