stat()
在文件上,返回几个字段,包括st_blksize
. 这被记录为“高效文件系统 I/O 的‘首选’块大小”。该值不用作其他stat()
字段的单位,或在 POSIX 标准中的其他任何地方引用。
statvfs()
在文件上,返回几个字段,包括f_bsize
. 它也返回f_frsize
。 f_frsize
是f_blocks
、f_bfree
和的单位f_bavail
。 f_frsize
被不同地称为“基本文件系统块大小”和“片段大小”。
我的手册页statvfs
描述f_bsize
为文件系统的块大小。这基本上什么也没告诉我。介绍已经告诉我 statvfs() 返回有关整个文件系统的信息。
可以
f_bsize
用来做什么?如果文件系统块大小不等于“基本文件系统块大小”,它是什么意思?与Linux 和 BSD 和/或 UNIX 上
f_bsize
的一样吗?st_blksize
让我们忽略 FUSE 文件系统的可能性,其唯一原因是违反此规则。NFS 服务器也是如此。我也不太关心它f_bsize
代表文件系统范围的值,它可能会被特定文件覆盖。我是否认为与 POSIX 不同
st_blksize
,POSIX 没有任何特定含义f_bsize
?
FreeBSD 记录了以下内容:
stat
GNU coreutils 中的命令还可以显示“基本块大小”和“块大小”。它将后者记录为“(用于更快的传输)”。我希望这些都是准确的原始含义。POSIX 文档
st_blksize
说“在某些文件系统类型中,这可能因文件而异”。f_bsize
这表明了 POSIX 避免指定为具有任何特定含义的一个原因。(另一个是块大小的概念在某些文件系统上可能没有同样的意义,例如 UIBFS)f_bsize
如果您熟悉要查询的特定文件系统实现,也可能会有一些用处。f_frsize
作为“片段大小”的本义似乎“片段大小”的描述应该被理解为最初是指像UFS这样的文件系统上的片段。这些是小于“块”的分配单元。请参阅ext3 文件系统中的片段大小是多少?
基于此,它似乎
f_frsize
通常会小于或等于f_bsize
。Linux ext2/ext3/ext4 不支持分片。一些 Linux 文件系统可能会报告较小的
f_frsize
. 尽管那是一个正在开发的 FUSE 文件系统,但我不知道它是什么或为什么要使用“片段” /f_frsize
。