私は次のことをしたときにそれを見つけました。
ls -ls file
これはブロック数(例えば8ブロック)を提供します。
私がするとき:
stat file
私はブロック数がlsによって与えられた数の2倍の16であることを知りました。
私のファイルシステムのブロックサイズは4096です。 lsで使用される任意のブロック単位は1024であることを学びました。 statがブロックを報告するときに任意の単位である512バイトを使用すると言うのは正しいですか?
それでは、矛盾の理由はありますか?
私はext4ファイルシステムでUbuntu 11.10を実行しています。
ベストアンサー1
多くのディスクのセクタサイズは512バイトです。これは、ディスクへの読み取りまたは書き込みが一度に512バイトのセクタ全体を転送することを意味します。ファイル間でセクタが分割されないようにファイルシステムを設計すると(設計が複雑になり、パフォーマンスが低下する)、ファイルシステムは512バイトのファイルブロックを使用する傾向があります。したがって、ls
などのレガシーユーティリティはdu
サイズを512バイトブロックとして表示します。
人間にとって512バイト単位はほとんど意味がありません。 1kBはサイズと同じで、より意味があります。ファイルシステムブロック(ファイルパーティションの最小単位)は、実際には複数のセクタで構成されています。 1kB、2kB、および4kBは一般的なファイルシステムブロックサイズであるため、ファイルシステム設計は512バイト単位を完全に正当化できません。ディスクドライバの外で512バイト単位を使用する伝統以外には、妥当な理由はありません。
そのため、長所が多くない伝統があり、より読みやすいルールが登場しています。これは8進数と16進数に少し似ています。正しいことはありませんが、同じ数字を書く方法は異なります。
多くのツールには表示単位を選択するオプションがあります。ls --block-size=512
GNUの場合は、GNUおよびGNU環境でls
512バイト単位を取得するように設定します(または1kB単位を強制的に転送するように渡します)。 GNU coreutilsのコマンドが「blocksize」(値)で表示するのは、オペレーティングシステムに依存する内部インタフェース値であり、ファイルシステムまたはディスクコードで使用されるサイズに関連する場合もあれば、そうでない場合もあります。 (通常そうではありません - 参照POSIXLY_CORRECT=1
df
du
-k
stat
%B
ブロックサイズとクラスタサイズの違い)。 Linuxでは、デフォルトドライバが何をしているかに関係なく、値は512です。価値は%B
決して重要ではありません。その存在は単なる奇妙なものです。