f_bsizeはどこで使用できますか? (st_blksizeに似ていますか?)

f_bsizeはどこで使用できますか? (st_blksizeに似ていますか?)

stat()ファイルでは、を含むいくつかのフィールドが返されますst_blksize。これは、「効率的なファイルシステムI / Oのための「優先」ブロックサイズ」として文書化されています。この値はstat()他のフィールドの単位として使用されず、POSIX 規格の他の場所では参照されません。

statvfs()ファイルでは、を含む複数のフィールドが返されますf_bsizef_frsize、、、の単位ですf_frsize。 「基本ファイルシステムブロックサイズ」および「断片サイズ」とも呼ばれます。f_blocksf_bfreef_bavailf_frsize

私のマニュアルページでは、statvfsこれをf_bsizeファイルシステムのブロックサイズとして説明します。これは基本的に何も教えてくれません。はじめに、statvfs()はファイルシステム全体の情報を返すことをすでに説明しています。

  1. f_bsizeそれは何に使用できますか?ファイルシステムブロックサイズが「デフォルトファイルシステムブロックサイズ」と異なることはどういう意味ですか?

  2. Linux、BSD、および/またはUNIXでも同じ状況が発生しますかf_bsizest_blksizeFUSEファイルシステムがこの規則に違反するように設計されている可能性は無視してみましょう。 NFSサーバーでも同様です。また、f_bsize特定のファイルによってオーバーライドされる可能性のあるファイルシステム全体の値を表すことについてはあまり心配しません。

  3. st_blksizePOSIXとは異なり、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には、「一部のファイルシステムタイプではファイルごとに異なる場合があります」と記載されています。これはf_bsize、POSIXが特定のセマンティクスを避ける理由の1つを示しています。 (もう一つのことは、ブロックサイズの概念がUIBFSなどの一部のファイルシステムでは同じ意味を持たない可能性があることです。)

f_bsizeクエリしている特定のファイルシステムの実装に精通している場合にも便利です。

f_frsize「彫刻サイズ」の本来の意味

「断片サイズ」を説明することは、元のファイルシステムの断片を参照することを理解する必要があるようです。超高速ファイルシステム。これは「ブロック」より小さい割り当て単位です。バラよりext3ファイルシステムの断片サイズはいくらですか?

f_frsizeこれに基づいて、通常は.より小さいか等しいようですf_bsize

Linux ext2/ext3/ext4 はフラグメントをサポートしていません。一部のLinuxファイルシステムより小さく報告できるf_frsize。これは開発中のFUSEファイルシステムですが、それが何なのか、なぜ「セグメント」/を使用するのかわかりませんf_frsize

関連情報