statfs согласуется с результатами df. Теоретически NSFileSystemFreeSize происходит от statfs, поэтому ваша проблема не должна существовать.
Вы можете запустить statfs, как показано ниже, в качестве замены NSFileSystemFreeSize:
#include <sys/param.h>
#include <sys/mount.h>
int main()
{
struct statfs buf;
int retval = statfs("/Volumes/KINGSTON", &buf);
printf("KINGSTON Retval: %d, fundamental file system block size %ld, total data blocks %d, total in 512 blocks: %ld\n",
retval, buf.f_bsize, buf.f_blocks, (buf.f_bsize / 512) * buf.f_blocks);
printf("Free 512 blocks: %ld\n", (buf.f_bsize / 512) * buf.f_bfree);
exit(0);
}