Linux 调用statvfs和df命令之间存在差异
当我在Linux机器上使用statvfs命令获取挂载文件系统上的可用空间时,得到的数字与df报告的数字略有不同 例如,在我有一台500G硬盘的机器上,我从df获得以下输出:Linux 调用statvfs和df命令之间存在差异,linux,file,Linux,File,当我在Linux机器上使用statvfs命令获取挂载文件系统上的可用空间时,得到的数字与df报告的数字略有不同 例如,在我有一台500G硬盘的机器上,我从df获得以下输出: # df --block-size=1 --no-sync Filesystem 1B-blocks Used Available Use% Mounted on /dev/md0 492256247808 3422584832 463828406272 1% / t
# 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个可用块,因此应该有488833658880个字节可用。然而,df报告有463828406272个字节可用。为什么这里会有差异?由于您的差异接近5%[1],这是分配给root的默认百分比,因此您有可能将df结果与statvfs和 不使用->f_bavail,这是df使用的 [1] :(488833658880-463828406272)/492256247808=0.0508
#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;
}
#包括
int main(){
结构国家统计局;
int a=国家公务员(“/”,&stat);
printf(“分区的总可用磁盘空间:%d GB\n”,(stat.f_bavail)*8/2097152);
//512是2^9—半千字节。
//千字节等于2^10。兆字节等于2^20。千兆字节等于2^30。兆字节等于1 TB
//是2^40。以此类推。普通的计算机单位增加10的幂
//像这样的两个人。
//所以你需要除以2^(30-9)==2^21==2097152得到千兆字节。
//并乘以8,因为1字节=8比特
返回0;
}
我这样做是因为我更喜欢用Gb表示的结果,但是你可以修改单位来改变指数。第一个答案是真的,正如你所看到的,我也使用了它。是的,使用f_bavail,数字是相同的。非常感谢您提供的信息。我发现在计算免费服务的百分比时存在差异。当我计算(f_bavail*100.0)/f_块时,我预计会有(100-来自df的使用百分比)。然而,这是4%。如果我使用f_bfree,误差会更大。