GNU/Linux >> Linux の 問題 >  >> Linux

stat コマンドはファイルのブロックをどのように計算しますか?

stat コマンドライン ツールは stat を使用します / fstat stat でデータを返すなどの関数 構造。 st_blocks stat のメンバー 構造体の戻り値:

<ブロック引用>

ディスク上に実際に割り当てられたサイズ 512 バイトの物理ブロックの総数。このフィールドは、ブロック スペシャルまたはキャラクター スペシャル ファイルには定義されていません。

したがって、サイズが 965 でブロック数が 8 の「電子メール」の例では、8*512=4096 バイトがディスクに物理的に割り当てられていることを示しています。 2 ではない理由は、ディスク上のファイル システムが 512 の単位でスペースを割り当てず、明らかに 4096 の単位でそれらを割り当てるためです。割り当ての単位)

同様に、wxPython の例では、7056*512 バイト、つまり 3612672 バイトがディスクに物理的に割り当てられていることを示しています。わかります。

IO ブロック サイズは、「I/O 操作の「最適な」ユニット サイズに関するヒント」であり、通常、物理ディスク上の割り当ての単位です。 IO ブロックと stat のブロックを混同しないでください。 物理的なサイズを示すために使用します。物理サイズのブロックは常に 512 バイトです。

コメントに基づく更新:

私が言ったように、st_blocks OSがディスク上のファイルによって使用されているスペースの量を示す方法です。ディスク上の実際の割り当て単位は、ファイル システムの選択です。たとえば、ZFS では可変サイズの割り当てブロックを、同じファイル内であっても持つことができます。 、ブロックを割り当てる方法のためです。ファイルは小さなブロックサイズで始まり、特定のポイントに達するまでブロックサイズが増加し続けます。ファイルが後で切り詰められた場合、おそらく古いブロック サイズが保持されます。そのため、ファイルの履歴に基づいて、複数の可能なブロック サイズを持つことができます。そのため、ファイル サイズが与えられた場合、そのファイルが特定の物理サイズである理由が常に明らかであるとは限りません。

具体例:私の Solaris ボックスでは、ZFS ファイル システムを使用して、非常に短いファイルを作成できます:

$ echo foo > test
$ stat test
  Size: 4               Blocks: 2          IO Block: 512    regular file
(irrelevant details omitted)

OK、小さなファイル、2 ブロック、このファイルの物理ディスク使用量は 1024 です。

$ dd if=/dev/zero of=test2 bs=8192 count=4
$ stat test2
  Size: 32768           Blocks: 65         IO Block: 32768  regular file

OK、物理ディスクの使用量が 32.5K で、IO ブロック サイズが 32K であることがわかります。次に、それを test3 にコピーしました この test3 を切り捨てました エディター内のファイル:

$ cp test2 test3
$ joe -hex test3
$ stat test3
  Size: 4               Blocks: 65         IO Block: 32768  regular file

さて、ここに 4 バイトのファイルがあります - ちょうど test のように -しかし、ZFSファイルシステムがスペースを割り当てる方法のために、ディスク上で物理的に32.5Kを使用しています。ファイルが大きくなるにつれてブロック サイズは大きくなりますが、ファイルが小さくなってもブロック サイズは小さくなりません。 (もちろん、ZFS で行うファイルやファイル操作の種類によっては、かなりの無駄なスペースが発生する可能性があります。そのため、ファイルシステムごとに最大ブロック サイズを設定し、動的に変更することができます。)

ファイル サイズと物理ディスクの使用量の間に必ずしも単純な関係があるとは限らないことを理解していただければ幸いです。上記でも、正確に 32K のサイズのファイルを格納するために 32.5K バイトが必要な理由は明確ではありません。ZFS は一般に、独自の追加ストレージ用に追加の 512 バイトを必要とするようです。おそらく、そのストレージをチェックサム、参照カウント、トランザクション状態 (ファイル システムの簿記) に使用しています。これらのエクストラを指定された物理ファイル サイズに含めることで、ZFS はファイルの物理コストに関してユーザーを誤解させないようにしているようです。これは、基礎となるファイル システムの実装に関する詳細を知らずに、計算をリバース エンジニアリングするのが簡単だという意味ではありません。


Linux
  1. statコマンドを使用してLinuxのファイルステータスを確認します

  2. LinuxでTarコマンドを使用する方法

  3. UnixターミナルでExitコマンドはどのように機能しますか?

  1. ティーコマンドはどのように機能しますか?

  2. 出力をファイルに追加する方法は?

  3. Linuxでファイルの物理サイズを取得するには?

  1. Xdg-openコマンドは、ファイルを開くために使用するアプリケーションをどのように認識しますか?

  2. コマンドSed‘1!g; h; $!d’は、ファイルの内容をどのように逆にしますか?

  3. ファイルの行をコマンドの引数として使用するにはどうすればよいですか?