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

lio*_*ori 3 stat api

我正在调试一个保险丝文件系统,该系统报告du. 原来,它是把st_size / st_blksize[*]到st_blocks了的stat结构。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 */
    …
};
Run Code Online (Sandbox Code Playgroud)

什么是st_blksize对,如果st_blocks是在512B块呢?

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

Ste*_*itt 6

st_blocks定义

为此对象分配的块数。

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

st_blksize不相关;它是

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

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