POSIX define "espaço total" como:
The total size of the file system in 512-byte units. The exact meaning of this figure is implementation-defined, but should include "space used", "space free", plus any space reserved by the system not normally available to a user.
Usando meu sistema de arquivos Raspberry Pi como exemplo:
$ df -Ph /
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p2 14G 7.3G 5.8G 56% /
Mas,
$ df -P /
Filesystem 1024-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 14384136 7628204 6005548 56% /
$ dumpe2fs /dev/mmcblk0p2|grep -e 'Block count:' -e 'Block size:' -e 'Reserved block count:'
dumpe2fs 1.43.9 (8-Feb-2018)
Block count: 3670016
Reserved block count: 183500
Block size: 4096
Fazendo o cálculo:
(3670016 - 183500) * 4 / 2**20 = 13.3 # block size
14384136 / 2 ** 20 = 13.7 # df calculation
O que significa que total
inclui o espaço reservado usado, mas não o espaço reservado não alocado.
Olhando para o código fonte:
static void
get_field_values (...)
{
bv->available_to_root = fsu->fsu_bfree
...
bv->used = bv->total - bv->available_to_root;
sysvfs:
fsblkcnt_t f_bfree; /* Number of free blocks */
Compare:
fsblkcnt_t f_bavail; /* Number of free blocks for
unprivileged users */
TL; DR - é o espaço reservado free que faz a diferença entre os dois números. Como observou @cuonglm, o 'legível humano' é completado.