私はいつも/ ...システムコールによって返されたフィールドがst_blocks
512バイト単位で表されるファイルのディスク使用量を取得するために使用されると仮定します。stat()
lstat()
du
調査するPOSIX仕様今、POSIXはこれについていかなる保証もしないことがわかりました。perl
独自のstat()
機能に関する文書化また、このような仮定をしないように警告します。
st_blksize
それにもかかわらず、POSIXが示すように、このブロックサイズは返されたフィールドとは関係がないため、stat()
他の場所で見つける必要があります。
GNUdu
またはGNUfind
ソースコードを確認すると、HP / UXが1024バイト単位を使用しているという証拠が表示されます。 GNUは常に複数の512バイト単位を提供するように出力をfind
調整します-printf %b
が、これが混乱の原因となる可能性があります。
st_blocks
512バイト単位で表現されていない他のUnixシリーズシステムはまだ使用されていますか? POSIXで提案されているように、ファイルシステムによって異なりますか? HP / UX NFS共有をマウントすると問題が解決するようです。
答え1
st_blksize
これを使用する単位に関係なく、「最適I / Oサイズ」と呼びますst_blocks
。もちろん、最適なI / Oサイズはファイルシステムによって異なります。これはfast filesystem
1981/1982年のBerlekey開発の結果です。以前は、利用可能なファイルシステムの中で最適なブロックサイズはありませんでした。
st_blocks
単位で表現すると、DEV_BSIZE
実際にはHP-UXでは1024です。DEV_BSIZE
プラットフォーム固有の定数です。後でFFS
名前が変更されたとき、UFS
間接ブロックとは異なる動作を持ち、この新しいstat()
フィールドを必要とする2番目のファイルシステムがBSD UNIXに登場しました。以前は、du
ファイルシステムの間接ブロックのアルゴリズムだけを知っていました。
df
HP-UX NFSファイルサーバーや他のNFSクライアントを実行している場合、HPは過去15年間に問題を解決し、最新バージョンのHPにアクセスできない場合を除き、HP-UX NFSサーバーからエラーレポートを受け取ります。 - UX。私が知っている限り、他のUNIXには同様のNFS関連のバグはありません。
注:NFSv3まで、NFSはブロックサイズを512と仮定し、HPはサーバー上のNFSレポートを変換する必要がありました。 NFSv4はこれらの暗黙的な仮定をしませんが、HP-UXはまだ間違った数を報告します。
私が知る限り、他のUNIXは1024に基づいていませんDEV_BSIZE
。