ls -l
コマンドの出力で、ディレクトリのサイズは何を意味しますか?
これは、ディレクトリのメタ情報(このディレクトリに属するファイルのテーブル)を格納するために使用されるディスク上のスペースのサイズです。つまり1024の場合、これはディスク上の1024バイトがこの目的で使用されることを意味します(常にフルブロックを割り当てます)。
_ls -l
_で出力される「ディレクトリのサイズ」は、(他のファイルタイプと同様に)_statbuf.st_size
_のstat()
呼び出しによって報告される値です。
これが_st_size
_がディレクトリに対して何を意味するかは、ファイルシステムのタイプに完全に依存します。ファイルシステムのタイプを理解し、その概念を理解していない限り、_st_size
_の値から何も推測できません。
現在通常_v7-fs
_という名前の歴史的なUNIXファイルシステムでは、ディレクトリは、16ビットのiノード番号と14バイトのファイル名を含む16バイトのエントリが繰り返されていました。ディレクトリの「サイズ」はread(2)
操作に関して意味があり、常にそのままであるか、そのままです。 _.
_および_..
_エントリは、現在および上位レベルのディレクトリに対して手動でハードリンクすることによって作成されます。正気の空の乙女ディレクトリのリンク数は2です。
1989年以降(SVr4)がufs
と呼ばれるBSD-4.2ファイルシステムでは、ディレクトリは一連の可変長レコードであり、安定であることが許可されていないフォーマットを使用しているため、ユーザー空間コマンドは読み取ることができません。このフォーマット。報告される「サイズ」は、v7-fsと同様にバイト単位のサイズです。サイズは通常、そのままか、そのままですが、ファイルシステムの新しいバージョンでは、状況によってはサイズが縮小される場合がありますが、これが常に期待できるとは限りません。空のディレクトリについて報告されるリンク数は、_v7-fs
_と同様に2です。
1988年夏から1991年5月の間に設計および実装したファイルシステムWOFS
では、ディレクトリは常に「サイズ」0を報告し、read(2)
呼び出しを使用して読み取ることができるタイプのコンテンツはありません。これは、WOFS
が最初のコピーオンライトファイルシステムであり、WOFS
ファイルでは、ディレクトリにリストされるのではなく、そのディレクトリを報告するためです。 readdir()
を使用してWOFS
ディレクトリを読み取る場合、目的のエントリのデータのみを取得し、_.
_および_..
_のデータは取得しません。 WOFS
上の空のディレクトリのリンク数は1で、全体の動作は完全にPOSIXに準拠しています。
ZFS
では、WOFS
の論文を読んだ後に実装されました。 ZFS
はコピーオンライトファイルシステムであり、作成者はWOFS
からコンセプトをコピーしたことを否定しません。 ZFSのディレクトリは_number of directory entries
_の_st_size
_を報告するため、報告された「サイズ」は、ディレクトリデータの占有ディスクスペースに関して実際の意味を持ちません。 ZFSディレクトリには_.
_および_..
_エントリはありませんが、readdir()
を呼び出すと、これらのエントリは偽装され、最初の2つの操作で返されます。 ZFSは、リスト内の唯一のFSは、ディレクトリをハードリンクすることをサポートしていませんが、報告されるディレクトリのリンク数は常に2です。ZFSのこれら2つの不規則性は、 POSIX歴史的プログラム。
ZFSと同様に、WAFLはWOFS
からすべてではなく一部のアイデアをコピーします。 NetappのWAFL
はWOFS
論文が発行されてから3年後に作成されたもので、WAFLはコピーオンライトですが、WAFLは「サイズ」の値を報告するようです。ディレクトリにコンテンツがあるという前提。
ディレクトリは、それ自体とその内容に関するメタデータ用に(最低でも)4096バイトを予約します。
また、4096バイトがext2/ext3/ext4ファイルシステムのデフォルトのアロケーションユニット(ブロック)であるため、ディレクトリをこれ以上小さくすることはできません。
異なるファイルシステムでは、異なるデフォルトサイズのディレクトリが見つかる場合があります。これは、ファイルシステムのデフォルトのブロックサイズが原因です。
ディレクトリのサイズは、いっぱいになると動的に大きくなる可能性もありますが、いったんいっぱいになると、ディレクトリを削除せずにメタデータ用に予約されたスペースを再割り当てすることはできません。
ディレクトリは、電話帳のような単なるディレクトリです。それは、番号のリストとそれらの隣に名前が付いたファイルです。各番号はファイルシステム内のファイル(iノード番号)を参照し、名前はファイル名です。
そのデータを保存するためのディスク容量が必要です。データがどのように割り当てられ、拡張され、縮小されるかは、ファイルシステムに依存します。