なぜ。そして..ファイルサイズはそれぞれ4kBと12kBですか? [コピー]

なぜ。そして..ファイルサイズはそれぞれ4kBと12kBですか? [コピー]

ls -alのように、例えば次のようになります。

drwxr-xr-x  9 jb jb 4.0K Mar  8 18:05 ./
drwx------ 49 jb jb 12K Mar 17 14:15 ../

私はこれがinodeメタデータ(例えば返されたもの)を保存するのに必要な最小スペースだと思いますstatが、完全にはわかりません。

答え1

.dotfor ddforディレクトリ)はそのディレクトリへのハードリンクです。あなたは次のことを知るでしょう:

ls -di . "$PWD"

同じ inode 番号を返します。サイズは、コンテンツを保存するために必要な(または必要な場合がある)バイト数です。つまり、参照するファイルのリスト(付随的におよび.を含むリンクされたファイルのリスト..)です。

..dディレクトリ内のディレクトリ)は、それを参照する唯一のディレクトリである親ディレクトリへのハードリンクです(およびエントリを考慮しない場合、ディレクトリdには1つのリンクしかありません)。...

だから:

ls -di -- .. "$(dirname -- "$(pwd -P)")"

同じ inode 番号も返されます。

..したがって、あなたの場合は.。 4kB以上)。...

答え2

一般的なUnixファミリーファイルシステムのディレクトリは、特別な属性を持つファイルにすぎません。シンボリックリンクも同様です。一部のUnixファミリーファイルシステムでは、シンボルフラッシュなどの小さなファイルをinode内に保存することができます。つまり、ファイルにブロックを割り当てる必要はなく、ファイルサイズの計算ではinodeを計算しないため、ファイルサイズは0です。

データがその inode に収まらないファイルは、inode とは別に割り当てられた一種の最小記憶単位を占有しなければなりません。 (インデックスノードのデータ空間は通常、対応するストレージブロックへのポインタ配列に変換されます。)

最も簡単な戦略は、すべてをすべて同じサイズの分割できないチャンクに分割し、2つのファイルが単一のチャンク内でリポジトリを共有できないことです。ただし、一部のファイルシステム(Berkeley FFSなど)では、無駄を減らすために、ブロックを他のファイルに割り当てられたフラグメントに分割することができます。

ブロックサイズは、大きなディスクアドレッシングと小さなファイルのスペースの浪費との間のトレードオフでファイルシステムが作成されたときに決定されます。一般的なブロックサイズは、約512から始まる2の累乗です(最近ではほとんど発生しません)。

ご存知のように、すべての(ルートではない)ディレクトリには少なくとも2つのエントリが含まれています。空のディレクトリにも..リンクが含まれているからです。ゼロ以外の値、または完全に空のディレクトリのサイズが見える場合、これは2つの基本ディレクトリエントリが大きすぎて、指定されたファイルシステム内のinodeの小さなデータ領域に収まらないことを示します。したがって、ディレクトリデータは別々に割り当てられたブロックまたはブロックの断片を占めます。

与えられたファイルシステムでは、ブロックサイズは4096で、小さなフラグメントはないようです。 (そうでない場合はブロックサイズが大きくなり、フラグメントのサイズは4096です。)ディレクトリは4096個のブロック/フラグメントを占め始め、そのセルのスペースを使い果たすのに十分なエントリがディレクトリに追加されるとディレクトリが大きくなります。 8192に増加してから12KBに増加します。

..の値が大きい場合、子ディレクトリのサイズに関係なく、親ディレクトリがかなり大きいディレクトリであることを示します。

関連情報