ディレクトリサイズはどのように計算されますか?

ディレクトリサイズはどのように計算されますか?

CentOS 7.3インスタンスでこれを実行しました。

[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/ 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 6           Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 16          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ date > my-very-own-directory/date.txt 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 32          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 47          Blocks: 0          IO Block: 4096   directory
  • 初期生成=>サイズ=6
  • 名前の長さが2バイトの項目を追加=>サイズ16(6 + 8 + 2)
  • 名前の長さが4バイトの別の項目を追加=>サイズ32(16 + 8 + 8)
  • 名前の長さが7バイトの別の項目を追加=>サイズ47(32 + 8 + 7)

質問2:

  1. 生成されたディレクトリサイズは6ですが、なぜですか?
  2. サブディレクトリにファイルがあるかどうかにかかわらず、ディレクトリ内の各新しいエントリは「マイディレクトリ」のサイズを増やします。問題は、サイズが8+(ファイル名/ディレクトリ名の長さ)増加することです。なぜ8ですか?

ベストアンサー1

ディレクトリ形式は完全にファイルシステムによって異なります。

少なくともディレクトリエントリにはファイル名とinode番号を含める必要があります。

使用すべきLinuxext4ファイルシステム(および以前のバージョン)たとえば、ソースディレクトリエントリには、inode番号(4バイト)、ファイル名の長さ(2バイト)、合計エントリの長さ(2バイト)、ファイル名自体が含まれます。 (IIRCの全長は、パディングなどを許可するために明示的に指定されています。)

現在のバージョン(ext3)はツリーストアもサポートしているため、多数のファイルを含むディレクトリをより迅速に取得できますが、フォーマットはもちろん複雑です。

上記では、ext4ディレクトリのサイズはブロックサイズの倍数としてのみ表示されます。つまり、空のディレクトリのサイズは4096あり、新しいデータブロックを割り当てるのに十分なファイルが作成されるまで増加しません。

RHEL 7はXFSをデフォルトのファイルシステムとして使用するため、おそらくそのシステムを実行している可能性があります。XFSには複数のディレクトリ形式があります。、小さなディレクトリの短縮形式は、デフォルトで最小のinode数+ファイル名+ファイル名の長さ+合計の長さの同じセットを持ちます。

おすすめ記事