Расхождение между вызовом statvfs и командой df - PullRequest
5 голосов
/ 08 июня 2009

Когда я использую команду statvfs на компьютере с Linux, чтобы получить доступное свободное место в смонтированной файловой системе, число, которое я получаю, немного отличается от того, что сообщает df.

Например, на компьютере с жестким диском 500G я получаю следующий вывод из df:

# df --block-size=1 --no-sync
Filesystem           1B-blocks      Used Available Use% Mounted on
/dev/md0             492256247808 3422584832 463828406272   1% /
tmpfs                2025721856         0 2025721856   0% /lib/init/rw
varrun               2025721856    114688 2025607168   1% /var/run
varlock              2025721856      4096 2025717760   1% /var/lock
udev                 2025721856    147456 2025574400   1% /dev
tmpfs                2025721856     94208 2025627648   1% /dev/shm

Вызов statvfs дает мне размер блока 4096 и 119344155 свободных блоков, так что должно быть 488 833 658 880 байт. Тем не менее, df сообщает, что 463 828 406 272 байта свободны. Почему здесь расхождение?

Ответы [ 2 ]

7 голосов
/ 08 июня 2009

Поскольку ваше расхождение близко к 5% [1], что является процентом по умолчанию, выделенным для root, есть вероятность, что вы сравните результат df с -> f_bfree statvfs и не с -> f_bavail, который используется df.

[1]: (488833658880 - 463828406272) / 492256247808 = 0,0508

0 голосов
/ 04 июня 2011
#include <stdio.h>
#include <sys/statvfs.h>
int main(){
    struct statvfs stat;
    int a=statvfs("/",&stat);
    printf("total free disk space of the partition: %d GB \n",(stat.f_bavail)*8/2097152);
    //512 is 2^9 - one half of a kilobyte. 
    //A kilobyte is 2^10. A megabyte is 2^20. A gigabyte is 2^30. A terabyte
    //is 2^40. And so on. The common computer units go up by 10's of powers
    //of 2 like that.
    //So you need to divide by 2^(30-9) == 2^21 == 2097152 to get gigabytes.
    //And multiply by 8 because 1 byte=8bit
    return 0;
}

Я делаю это в этой форме, потому что я предпочитаю результат в Гб, но вы можете изменить единицы измерения, меняя показатель степени. И первый ответ, как вы видите, верен, я использую это тоже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...