Stat

為什麼 st_blocks 總是以 512 字節的塊報告?

  • May 27, 2019

我正在調試一個 fuse 文件系統,它報告了錯誤的du. 原來它是把st_size / st_blksize

$$ * $$進入結構st_blocksstatLinux手冊頁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_blksize無論如何,如果在 512B 塊中是什麼意思st_blocks

$$ * $$無論如何,這看起來是錯誤的,因為整數除法不考慮小數部分……

st_blocks定義為_

為此對象分配的塊數。

塊的大小是特定於實現的。由於歷史原因,在 Linux 上它總是 512 字節;特別是,它曾經是磁碟扇區的典型大小。

st_blksize不相關;它是

此對象的特定於文件系統的首選 I/O 塊大小。在某些文件系統類型中,這可能因文件而異。

它表示 I/O 的首選大小,在一次操作中應傳輸的數據量以獲得最佳結果(忽略 I/O 堆棧中的其他層)。

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