I read the FAQ first, and this doesn't properly answer the question I am about to ask.
As a refresher: ----------------------------------------snip---------------------------------------- 32 df Size and Used and Available do not add up The df report simply does not add up? Why not? $ df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 40559188 35847132 2651768 94% / $ df -h / Filesystem Size Used Avail Use% Mounted on /dev/sda1 39G 35G 2.6G 94% / The most natural thing in the world is to add the values of Used plus Available and expect to have a result that equals Size. But as we see here 35847132 plus 2651768 is not equal to 40559188 and is missing aproximately 2G of disk. Where did it go? This data is in the minfree percentage of reserved filesystem disk blocks. A typical filesystem value for minfree is 5% reserved to superuser processes. Root can make use of all of the disk space but non-root processes will be restricted by the minfree value. If a user or user process fills up a partition the root user can still create files within the provided space. Additionally modern filesystems attempt to control the amount of disk fragmentation automatically. This requires that there is sufficient free disk space available. When the filesystem is operated very close to 100% full then undesirable fragmentation is increased. This may significantly decrease disk performance. Keeping a minfree reserved is one way to ensure a sufficient amount of disk space for the filesystem to operate at high efficiency. In this example 5% of 39G is reserved and not included in the Available value. 39G * 5% is about 1.9G minfree. 35G used plus 2.6G available plus 1.9G minfree is aproximately 39G and equal to the size of the filesystem. The tunefs command using the tunefs -m NUM option is the traditional command to adjust the filesystem minfree value. More information may be found in the manual pages and documentation for that command. ----------------------------------------snip---------------------------------------- EXT3fs reserves space for the "privigeled user" or "privileged group" The way that I see it, 'df' should show what is available for the UID/GID that calls it, especially if the user is "privileged" such as root running the 'df' process. 'df' should report what said "privileged" user can write. Why, if 'df' is run as UID=0, does it not report what UID=0 is able to consume? I *expect* programs, run as the root user, to realize that things may be different than if run as a non-root user. In pseudocode, this simple logic should work: IF ((running_as_uid == superblock_privileged_uid) || (running_as_gid == superblock_privileged_gid)) { get_fs_blocks_avail_for_privileged_user } ELSE { get_fs_blocks_avail_for_normal_user } ENDIF running 'tune2fs -l' states: Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) Thus, when run as root, I would *really expect* 'df' to realize this and show all blocks available to this "privileged user". The 'tune2fs' manpage states: -m reserved-blocks-percentage Set the percentage of the filesystem which may only be allocated by privileged processes. Reserving some number of filesystem blocks for use by privileged processes is done to avoid filesystem fragmenâ tation, and to allow system daemons, such as syslogd(8), to continue to function correctly after non-privileged processes are prevented from writing to the filesystem. Normally, the default percentage of reserved blocks is 5%. It does *not* specifically state that userspace tools should *never* report this as being 'free'. Only that it is 'reserved for "privileged processes"'. So, I am wondering why 'df' chooses to take the "least common denominator" approach and only display what is available to a "NON-privileged" user. I ask again, is 'df' when run as UID=0 NOT considering that it is privileged ?