stat()
ファイルでは、を含むいくつかのフィールドが返されますst_blksize
。これは、「効率的なファイルシステムI / Oのための「優先」ブロックサイズ」として文書化されています。この値はstat()
他のフィールドの単位として使用されず、POSIX 規格の他の場所では参照されません。
statvfs()
ファイルでは、を含む複数のフィールドが返されますf_bsize
。f_frsize
、、、の単位ですf_frsize
。 「基本ファイルシステムブロックサイズ」および「断片サイズ」とも呼ばれます。f_blocks
f_bfree
f_bavail
f_frsize
私のマニュアルページでは、statvfs
これをf_bsize
ファイルシステムのブロックサイズとして説明します。これは基本的に何も教えてくれません。はじめに、statvfs()はファイルシステム全体の情報を返すことをすでに説明しています。
f_bsize
それは何に使用できますか?ファイルシステムブロックサイズが「デフォルトファイルシステムブロックサイズ」と異なることはどういう意味ですか?Linux、BSD、および/またはUNIXでも同じ状況が発生しますか
f_bsize
?st_blksize
FUSEファイルシステムがこの規則に違反するように設計されている可能性は無視してみましょう。 NFSサーバーでも同様です。また、f_bsize
特定のファイルによってオーバーライドされる可能性のあるファイルシステム全体の値を表すことについてはあまり心配しません。st_blksize
POSIXとは異なり、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
。