统计文件系统大小

erc*_*rch 8 linux stat

stat 8.13基于 Debian 的 Linux 上——除其他外——提供了以下 FORMAT 指令 ( --format=):

--file-system( -f)组合:

  • %s 块大小(用于更快的传输)
  • %S 基本块大小(用于块计数)

问题:究竟是什么意思?

我最好的猜测是%s%S等于%b(以块为单位显示)和%B(显示块的大小),其中后者用于文件,前两个用于文件系统。那是对的吗?

Mik*_*kel 5

   %S     fundamental block size (for block counts)
Run Code Online (Sandbox Code Playgroud)

告诉您文件系统上每个块有多大。在大多数文件系统上,这是任何文件可以占用的最小空间量。每个文件都使用此值的倍数。

例如,

$ echo > a           # create a file containing a single byte
$ du -h a            # see how much disk space it's using
4.0K    a
$ stat -f -c '%S' .  # see what stat thinks the block size is
4096
$ tune2fs -l /dev/mydrive | grep '^Block size'
4096
Run Code Online (Sandbox Code Playgroud)

我不能百分百确定它总是这样工作。例如,我希望它也可以决定打印512or 1024,即使底层块大小不同,只要stat -c %b FILE* stat -f -c %S FILE= du --block-size=1 FILE。确切的实现取决于文件系统。


%s     block size (for faster transfers)
Run Code Online (Sandbox Code Playgroud)

建议在复制大文件时一次应读取多少字节,例如bs在使用dd. 但在我检查的系统上,它总是打印4096,即使较大的值可能会更快。请参阅是否有办法确定 dd 的 bs 参数的最佳值?对此进行更多讨论。


从技术上讲,此信息(以及来自 的所有信息stat -f)来自statvfs系统调用。

%s对应于f_bsize字段,并且%Sf_frsize

所以你可以从statvfs 手册页开始了解它们的确切含义

 unsigned long  f_bsize;    /* Filesystem block size */
 unsigned long  f_frsize;   /* Fragment size */
Run Code Online (Sandbox Code Playgroud)