f_bsize 可以用来做什么? (和st_blksize类似吗?)

f_bsize 可以用来做什么? (和st_blksize类似吗?)

stat()在文件上,返回多个字段,包括st_blksize.这被记录为“高效文件系统 I/O 的‘首选’块大小”。该值不用作其他stat()字段的单位,也不在 POSIX 标准中的任何其他地方引用。

statvfs()在文件上,返回多个字段,包括f_bsize.它也返回f_frsize。 是、、 和 的f_frsize单位。 也被称为“基本文件系统块大小”和“片段大小”。f_blocksf_bfreef_bavailf_frsize

我的手册页statvfs描述f_bsize为文件系统的块大小。这基本上没有告诉我什么。简介已经告诉我 statvfs() 返回有关整个文件系统的信息。

  1. f_bsize可以用来做什么?如果文件系统块大小不等于“基本文件系统块大小”,那么它意味着什么?

  2. 与 Linux 和 BSD 和/或 UNIX 上的f_bsize情况相同吗?st_blksize让我们忽略 FUSE 文件系统因违反此规则而设计的可能性。 NFS 服务器也是如此。我也不太关心f_bsize代表文件系统范围的值,该值可能会被特定文件覆盖。

  3. 我的想法是否正确,与 POSIX 不同的是st_blksize,POSIX 没有暗示 的任何特定含义f_bsize

答案1

FreeBSD 文档如下:

f_frsize- 此文件系统上的最小分配单位的大小(以字节为单位)。 (这对应于f_bsize的成员struct statfs。)

f_bsize- 此文件系统上文件的 I/O 请求的首选长度。 (对应于f_iosize的成员 struct statfs。)

statvfs() 和 fstatvfs() 函数用垃圾填充 buf 指向的结构。这些垃圾有时会与文件系统统计数据相似,但可移植应用程序不得依赖于此。

statvfs() 和 fstatvfs() 函数符合 IEEE Std 1003.1-2001 (``POSIX.1'')。按照标准化,便携式应用程序根本不能依赖这些函数返回任何有效信息。此实现尝试提供与底层文件系统提供的一样多的有用信息,但受指定数据类型的限制。

GNU coreutils中的命令stat还可以显示“基本块大小”和“块大小”。它将后者记录为“(为了更快的传输)”。

我希望这些都是准确的原意。 POSIX 文档st_blksize说“在某些文件系统类型中,这可能因文件而异”。这表明 POSIX 避免指定f_bsize具有任何特定含义的原因之一。 (另一个是块大小的概念在某些文件系统上可能没有相同的意义,例如 UIBFS)

f_bsize如果您熟悉您正在查询的特定文件系统实现,也可能有一些用处。

f_frsize“片段大小”的原始含义

似乎描述“片段大小”应该理解为最初指的是文件系统上的片段,例如超高速文件系统。这些是小于“块”的分配单元。看ext3 文件系统中的片段大小是多少?

基于此,它似乎f_frsize通常会小于或等于f_bsize

Linux ext2/ext3/ext4 不支持片段。一些 Linux 文件系统可能会报告较小的f_frsize。虽然那是一个正在开发的 FUSE 文件系统,但我不知道它是什么,也不知道它为什么要使用“片段” / f_frsize

相关内容