「ls -l」コマンドの出力におけるディレクトリのサイズはどういう意味ですか?

「ls -l」コマンドの出力におけるディレクトリのサイズはどういう意味ですか?

ls -lコマンドの出力におけるディレクトリのサイズはどういう意味ですか?

答え1

これは、ディレクトリのメタ情報 (つまり、このディレクトリに属する​​ファイルのテーブル) を格納するために使用されるディスク上のスペースのサイズです。たとえば、1024 の場合、この目的のためにディスク上の 1024 バイトが使用される (常に完全なブロックが割り当てられる) ことを意味します。

答え2

で印刷される「ディレクトリのサイズ」は(どのファイル タイプの場合もそうですが)の呼び出しls -lによって報告される値です。stat()statbuf.st_size

これがst_sizeディレクトリに対して何を意味するかは、ファイル システムの種類によって完全に異なります。ファイル システムの種類とその概念を理解していない限り、 の値から何かを推測することはできませんst_size

  • 現在、通常 という名前が付けられている歴史的な UNIX ファイルシステムではv7-fs、ディレクトリは 16 ビットの inode 番号と 14 バイトのファイル名を含む 16 バイトのエントリの繰り返しでした。ディレクトリの「サイズ」は操作に関して意味がありread(2)、常に拡大するかそのままでした。.および..エントリは、現在のディレクトリと 1 レベル上のディレクトリに対して手動でハードリンクすることで作成されます。正常な空のディレクトリのリンク数は 2 です。

  • 1989 年以降 (SVr4) と呼ばれている BSD-4.2 ファイルシステムではufs、ディレクトリは、安定しているとは認められていない形式を使用する一連の可変長レコードであるため、ユーザー空間コマンドはこの形式を読み取ることができません。報告される「サイズ」は、v7-fs と同様にバイト単位のサイズです。サイズは通常、大きくなるかそのままですが、ファイルシステムの新しいバージョンでは、状況によってはサイズが縮小することがあります。ただし、常にこれが期待されるとは限りません。空のディレクトリに対して報告されるリンク数は、 と同様に 2 ですv7-fs

  • WOFS1988 年夏から 1991 年 5 月にかけて私が設計し実装したファイルシステムでは、ディレクトリは常に「サイズ」0 を報告し、read(2)呼び出しを使用して読み取ることができる種類のコンテンツを持つことはありません。これは、WOFSが最初の Copy-on-Write ファイルシステムであり、 のWOFSファイルがディレクトリにリストされるのではなく、そのディレクトリを報告するためです。WOFSを使用してディレクトリを読み取るとreaddir()、意図したエントリのデータのみが取得されますが、.およびのデータを取得することはありません..。 の空のディレクトリのリンク数はWOFS1 で、動作全体は完全に POSIX に準拠しています。

  • ではZFS、論文を読んだ後に実装されましたWOFSZFSはコピーオンライトファイルシステムであり、その作成者は の概念をコピーしたことを否定していませんWOFS。 ZFS 上のディレクトリはnumber of directory entriesで を報告するため、報告された「サイズ」は、ディレクトリデータから占有されているディスクスペースに関しては実際の意味を持ちません。 ZFS ディレクトリにはと のエントリst_sizeはありませんが、 を呼び出すと、これらのエントリが偽造されて最初の 2 つの操作に対して返されます。 ZFS は、リストの中でディレクトリのハードリンクをサポートしていない唯一の FS ですが、報告されるディレクトリのリンク数は常に 2 です。 ZFS のこれら 2 つの不規則性は、非 POSIX の歴史的プログラムでの混乱を減らすために実装されています。...readdir()

  • ZFS と同様に、WAFL は のアイデアの一部をコピーしますが、すべてをコピーするわけではありませんWOFS。Netapp の は、論文が発表されてWAFLから 3 年後に書かれました。WAFLWOFSはコピーオンライトですが、ディレクトリにコンテンツがあるという前提で、WAFL は「実際のディレクトリ サイズ」である可能性のある「サイズ」値を報告するようです。

答え3

ディレクトリは、ディレクトリ自体とその内容に関するメタデータ用に (最低でも) 4096 バイトを予約します。

また、4096 バイトは ext2/ext3/ext4 ファイルシステムのデフォルトの割り当て単位 (ブロック) であるため、ディレクトリをこれより小さくすることはできません。

異なるファイルシステムでは、ファイルシステムのデフォルトのブロック サイズにより、異なるデフォルト サイズのディレクトリが見つかる場合があります。

ディレクトリのサイズはいっぱいになると動的に大きくなりますが、いっぱいになると、ディレクトリを削除しない限り、メタデータ用に予約されたスペースを再割り当てすることはできません。

答え4

ディレクトリは、電話帳のような単なるディレクトリです。番号のリストとその横に名前が書かれたファイルです。各番号はファイルシステム内のファイル (inode 番号) を参照し、名前はファイル名です。

そのデータを保存するにはディスク領域が必要ですが、その割り当て方法、拡張方法、縮小方法はファイルシステムに依存します。

関連情報