为什么 st_blocks 总是以 512 字节块的形式报告?

为什么 st_blocks 总是以 512 字节块的形式报告?

我正在调试一个保险丝文件系统,该系统报告了错误的du.事实证明,它正在将st_size / st_blksize[*] 放入结构st_blocksstat。 Linux 手册页stat(2)说:

struct stat {
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
};

st_blksizeifst_blocks位于 512B 块中到底有什么用?

[*] 无论如何,这看起来都是错误的,因为整数除法不考虑小数部分......

答案1

st_blocks定义的作为

分配给该对象的块数。

块的大小是特定于实现的。在 Linux 上,由于历史原因,它始终是 512 字节;特别是,它曾经是磁盘扇区的典型大小。

st_blksize不相关;它是

该对象的文件系统特定的首选 I/O 块大小。在某些文件系统类型中,这可能因文件而异。

它指示 I/O 的首选大小,IE为获得最佳结果而应在一次操作中传输的数据量(忽略 I/O 堆栈中的其他层)。

相关内容