确认statvfs获取的物理块大小与/sys文件中数值是否一致
确认statvfs获取的块大小与sysfs文件值的一致性
你的代码中buf.f_bsize获取到的值,和/sys/block/sdc/queue/physical_block_size里的物理块大小是完全一致的,原因如下:
statvfs()的f_bsize字段返回的是文件系统所在存储设备的最优I/O块大小,这个值直接取自内核识别到的设备物理块参数,和sysfs中physical_block_size的数据源完全相同。- 由于/tmp挂载在/dev/sdc上,调用
statvfs("/tmp/", &buf)时,内核会关联到/dev/sdc的硬件块大小配置,因此返回的结果必然和/sys/block/sdc/queue/physical_block_size的数值匹配。
补充验证方式:你也可以通过stat命令查看设备文件的块大小,执行stat -c %o /dev/sdc,输出结果同样会是4096,和另外两个值保持一致。
你的代码示例:
#include <stdio.h> #include <string.h> #include <sys/statvfs.h> int main() { struct statvfs buf; memset(&buf, 0, sizeof(buf)); const int res = statvfs("/tmp/", &buf); printf("%lu\n", buf.f_bsize); }
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

