web-dev-qa-db-ja.com

statファイルシステムのサイズ

DebianベースのLinuxでstat 8.13を使用すると、とりわけ、次のFORMATディレクティブ(--format=)が提供されます。

--file-system-f)との組み合わせ:

  • %sブロックサイズ(転送を高速化するため)
  • %S基本ブロックサイズ(ブロックカウント用)

質問:正確にはどういう意味ですか?

私の推測では、%s%S%b(ブロックで表示)および%B(ブロックのサイズを表示)に等しく、後者はファイル用で、最初の2つはファイルシステム用。あれは正しいですか?

7
erch
   %S     fundamental block size (for block counts)

ファイルシステム上の各ブロックの大きさを示します。ほとんどのファイルシステムでは、これはファイルが占有できる最小のスペースです。各ファイルはこれの倍数を使用します。

例えば、

$ 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

常にこのように機能するかどうかは100%わかりません。たとえば、512 * 1024 = stat -c %b FILEの場合、基になるブロックサイズが異なっていても、stat -f -c %S FILEまたはdu --block-size=1 FILEを出力することも決定できると思います。 。正確な実装はファイルシステムによって異なります。


%s     block size (for faster transfers)

大きなファイルをコピーする場合に一度に読み取る必要のあるバイト数を提案します。たとえば、bsを使用するときにdd(ブロックサイズ)パラメーターとして使用する必要があるものです。しかし、私がチェックしたシステムでは、値が大きいほど高速である場合でも、常に4096が出力されます。詳細については、 bsパラメーターのddへの最適値を決定する方法はありますか? を参照してください。


技術的には、この情報(およびstat -fからのすべての情報)は、statvfsシステムコールから取得されます。

%sf_bsizeフィールドに対応し、%Sf_frsizeです。

したがって、 statvfsのマニュアルページ で始まる正確な意味を調べることができます。

 unsigned long  f_bsize;    /* Filesystem block size */
 unsigned long  f_frsize;   /* Fragment size */
4
Mikel