st_blocksが常に512バイトブロックとして報告されるのはなぜですか?

st_blocksが常に512バイトブロックとして報告されるのはなぜですか?

エラーを報告するヒューズファイルシステムをデバッグしていましたが、わかりましたら[*]を構造にdu入れました。 Linux のマニュアルページには次のように記載されています。st_size / st_blksizest_blocksstatstat(2)

struct stat {
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
};

st_blksizest_blocksブロック512Bに配置した場合の用途は何ですか?

[*]整数除算は少数の部分を考慮していないので、これはとにかく間違っているようです...

ベストアンサー1

st_blocksはい限られた〜のように

このオブジェクトに割り当てられたブロックの数。

チャンクのサイズは実装によって異なります。 Linuxでは、歴史的な理由から常に512バイトです。特に以前はディスクセクタの一般的なサイズでした。

st_blksize関係ありません。

このオブジェクトのファイルシステム固有のデフォルトI / Oブロックサイズ。一部の種類のファイルシステムでは、ファイルによって異なる場合があります。

I/O に好ましいサイズを示します。つまり最良の結果を得るために、1回の操作で送信する必要があるデータ量(I / Oスタックの他のレイヤーを無視)。

おすすめ記事