ディスクのファイルサイズとサイズの違いが4KiBを超える理由は何ですか?

ディスクのファイルサイズとサイズの違いが4KiBを超える理由は何ですか?

ext4ファイルシステムは通常4KiBブロックを使用します。これにより、小さなファイルを作成するときにサイズが4KiB未満の場合は、すべてのファイルマネージャで違いを確認できます。通常、ファイルサイズとディスクサイズの2つの値があります。最初の値は正確で、他の値は4KiBの積です。

大きなファイルでは、サイズの違いが4KiB(完全に記録されていない最後のブロック)を超えることはできないと常に考えました。しかし、私のディスク上の一部のファイルでは、4KiBを超える差(例:9425バイト)を見ることができます。したがって、質問は簡単です。サイズが4KiB以上異なる理由は何ですか?断片化のためですか、それとも別の理由ですか?ファイルの途中で一部のブロックが完全に書き込まれていないのは奇妙ではありませんか?

ベストアンサー1

ファイルを構成するブロックのリストはどこかに保存する必要があります。一般に、inodeのスペースは非常に小さいが、inodeにブロックが多すぎる場合、ファイルシステムは割り当てを実行します。間接ブロックファイルデータを含むブロックに加えて、ブロックのアドレスも格納されます。少なくともLinuxのext2 / ext3 / ext4の場合、およびほとんどのUnixシリーズオペレーティングシステムのほとんどのUnixシリーズファイルシステムでは、ファイルのディスク使用量は間接ブロックを考慮します。

Ext4の使用範囲ツリーブロックリストを保存します。ファイルが連続したブロックのリストを順番に使用する場合、これはツリー内の単一項目を占有します。したがって、断片化の少ないファイルには間接ブロックは必要なく、最初のブロックとブロック数を指定するツリー内の単一の項目のみが必要です。最大断片化されたファイルには、ブロックごとに1つのツリー項目を格納するために多数の間接ブロックが必要です。ファイルが断片化されていない場合、または最小限に断片化されている場合は、間接ブロックは必要ありません。ファイルのディスク使用量は、ファイルシステムブロックの整数に丸められたファイルサイズです。断片化されたファイルには間接ブロックが必要です。

Ext2とext3にはより簡単なソリューションがあります。ブロックリストが圧縮されていません。したがって、エントリ数はファイルサイズに直線的に比例するよりもわずかに大きくなり、ファイルが12個以上のブロック(つまり、inodeに直接書き込むことができるブロック数)を使用する場合は間接ブロックが必要です。

次のコマンドを使用して、ext2/ext3/ext4 ファイルシステムに移動できますdebugfs。 debugfs でblocks /path/to/fileファイルが使用するブロックを一覧表示すると、ファイルがどの程度断片化されているかがわかります。このコマンドはfilefrag /path/to/fileフラグメントの数を提供します。 ext4の場合、これは間接ブロックの数とファイルサイズとファイルディスク使用量の違いに関連しています。

おすすめ記事