ディレクトリファイルのサイズが増える前のディレクトリ内のファイル数

ディレクトリファイルのサイズが増える前のディレクトリ内のファイル数

Linuxまたはより具体的には、EXT4では、カタログファイルの初期サイズは4kBです。しかし、ディレクトリに十分なファイルが保存されると、内部の「ファイルリスト」の増加によりディレクトリファイルのサイズが増加します。しかし、これにはどのくらいのファイルが必要ですか?この質問に答えるリソースが見つかりません。

ベストアンサー1

ext4ディレクトリエントリの形式は次のとおりです。カーネルに記録された。 2つの可能性があります。

  • リニアディレクトリの場合、各エントリは8バイトで4バイトに丸められたファイル名(0で終わる)を占めます。だからNファイル項目は8×を占めます。Nバイトにそれぞれ4に丸められたすべてのファイル名の長さ(0で終わるものを含む)。ディレクトリには常にディレクトリごとに12バイトが含まれ...います。各線形ディレクトリには12バイトのチェックサムがあります。ブロックの最後のエントリのレコード長は現在のブロックの残りのスペースを含むように拡張されるため、ディレクトリエントリは2つのファイルシステムブロックにまたがっていません。
  • ハッシュツリーディレクトリの場合、各ディレクトリの最初のブロックには40バイトのルートエントリ(およびの.ファイルエントリを含む..)があり、後続の各ブロックには18バイトのノードがあります。各ノードは8バイトを占め、ファイルエントリは線形ディレクトリと同じデータ構造を使用して線形配列で終わります。したがって、ディレクトリで消費されるスペースの量を計算することはより困難です。各ファイルは8バイトに名前の長さを加えた値を4バイトとして使用し、ツリー構造では最初のブロックに40バイトを使用し、各追加ブロックに18バイトを使用します。バイト、ノードあたり8バイト。

ディレクトリのサイズが急速に増加するのを見るには、ファイル名の長いファイルで埋めます。ファイル名は最大254バイトに終了0バイトを加えて合計264バイトを占めるため、各Aディレクトリタイプは16バイトです。各ディレクトリのエントリには4096バイト以上が必要です。

ディレクトリが線形​​かハッシュかどうかを確認するには、対応するinodeを確認してください。例えば使用debugfs:

debugfs: show_inode_info /path/to/directory
Inode: 7329   Type: directory    Mode:  0755   Flags: 0x1000
Generation: 2283115506    Version: 0x00000001
...

ディレクトリがハッシュされている場合、フラグは0x1000セットとして表示され、それ以外の場合は設定されません。

おすすめ記事