Stat

f_bsize 可以用來做什麼?(它類似於 st_blksize 嗎?)

  • August 18, 2018

stat()在文件上,返回幾個欄位,包括st_blksize. 這被記錄為“高效文件系統 I/O 的‘首選’塊大小”。該值不用作其他stat()欄位的單位,或在 POSIX 標準中的其他任何地方引用。

statvfs()在文件上,返回幾個欄位,包括f_bsize. 它也返回f_frsizef_frsizef_blocksf_bfree和的單位f_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

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’’)。作為標準化,可移植應用程序根本不能依賴這些函式返回任何有效資訊。此實現嘗試提供與底層文件系統提供的一樣多的有用資訊,但受指定數據類型的限制。

statGNU 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

引用自:https://unix.stackexchange.com/questions/463369