linux查询硬盘背板fw,Linux 使用statvfs读取文件系统信息

在测试过程中,f_bfree的值比f_frsize的值大于10%的尺寸大小,意味着16G的磁盘

f_bfree测试出来的结果是17G,f_frsize测试的结果是15G

struct statvfs {

unsigned long  f_bsize;    /* file system block size */文件系统块大小

unsigned long  f_frsize;   /* fragment size */碎片大小

fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */

fsblkcnt_t     f_bfree;    /* # free blocks */空闲的块

fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */用户级的空闲节点

fsfilcnt_t     f_files;    /* # inodes */节点

fsfilcnt_t     f_ffree;    /* # free inodes */空闲的节点

fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */用户级的空闲节点

unsigned long  f_fsid;     /* file system ID */

unsigned long  f_flag;     /* mount flags */

unsigned long  f_namemax;  /* maximum filename length */

};

测试环境:ext4

1)分析f_bsize和f_frsize的异同

表示每块包含字节的多少

打印结果都是4096字节,显然都是一样的

2)分析f_bfree和f_bavail

表示磁盘剩余空闲的容量

打印结果是

磁盘为16G的情况下,f_bfree比f_bavail大809MB

磁盘为1.5T的情况下,f_bfree比f_bavail大2585MB

并没有我们想象的成线性增长

实际情况下采用df -Th

f_bavail更加接近显示的值

3)f_blocks表示磁盘的整体空间

4)计算磁盘各个方面的数值如下:

磁盘的整体空间:(buf.f_blocks *  buf.f_frsize)/1024/1024)MB

磁盘的空闲空间:(buf.f_bfree *  buf.f_frsize)/1024/1024)MB

磁盘的用户级空闲空间:(buf.f_bavail *  buf.f_frsize)/1024/1024)MB

#include

#include

#include

#include

#include

//pszDevicePath是设备的文件描述符,pszDeviceMountPoint是设备的挂载点

intGetDeviceMountPoint(constchar*pszDevicePath,char*pszDeviceMountPoint)

{

structmntent*pent;

FILE*pFile;

pFile=setmntent("/proc/mounts","r");

if(pFile==NULL){

perror("setmntent");

return-1;

}

while(NULL!=(pent=getmntent(pFile)))

{

if(strcmp(pent->mnt_fsname,pszDevicePath)==0)

{

sprintf(pszDeviceMountPoint,"%s",pent->mnt_dir);

printf("Device:%smountpointis:%s\n",pszDevicePath,pszDeviceMountPoint);

}

}

endmntent(pFile);

return0;

}

//通过statvfs查询挂载点上文件系统的空间大小

intGetDeviceRoomSize(constchar*pszDeviceMountPoint)

{

structstatvfsbuf;

intrv=statvfs(pszDeviceMountPoint,&buf);

if(!rv)

{

printf("wholespace:%uMbytes\n",(buf.f_blocks*buf.f_frsize)/1024/1024);

printf("availspace:%uMbytes\n",(buf.f_bavail*buf.f_frsize)/1024/1024);

}

else

{

perror("statvfs");

return-1;

}

return(buf.f_blocks*buf.f_frsize)/1024/1024;

}

intmain(intargc,char*argv[])

{

intnDiskRoomSize=0;

charszMountPoint[32]={0};

GetDeviceMountPoint(argv[1],szMountPoint);

nDiskRoomSize=GetDeviceRoomSize(szMountPoint);

printf("DiskRoomSize=%dMB\n",nDiskRoomSize);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值