web-dev-qa-db-ja.com

ディレクトリのサイズが0または4096であるのはなぜですか?

$ ls -l
total 28
drwxrwxrwx 1 t t 4096 May  8  2018  dir1
drwxrwxrwx 1 t t    0 Mar 12  2015  dir2
drwxrwxrwx 1 t t 4096 Jan 17  2014  dir3
drwxrwxrwx 1 t t 4096 Jun 12  2017  dir4
drwxrwxrwx 1 t t    0 Aug 24  2012  dir5

ディレクトリのサイズが0または4096であるのはなぜですか?

ディレクトリ内のエントリがそのiノードに収まるので、ディレクトリのサイズは0ですか?

ディレクトリ内のエントリがそのiノードに収まらず、データブロックが必要なため、ディレクトリのサイズは0ではありませんか?

ディレクトリのゼロ以外のサイズが常に4096であるのはなぜですか?

ありがとう。

私の観察はext4ファイルシステムとNTFSファイルシステムで同じであることに注意してください。それは両方のファイルシステムタイプが同じようにディレクトリを実装することを意味しますか?

9
Tim

一部のファイルシステムでは、非常に小さなディレクトリを保持するために使用できるiノード内にスペースがあります。ただし、ディレクトリがその領域に収まらないほど大きくなると、OSはファイルアロケーションユニット全体を割り当てます。この場合、4096バイトと思われます。

Ext4では、これはinline_data ext4オプションで有効になります。

https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inline_Directories

7
Ed Grimm

約4096

引用するには Terry Wangの答え

ディレクトリは、ファイル名とiノード番号の配列を含む特別なファイルです。ディレクトリが作成されたとき、ファイルシステムは1つのiノードを「ファイル名」(実際にはディレクトリ名)のディレクトリに割り当てました。 iノードは、4096バイトの単一のデータブロック(最小オーバーヘッド)を指します。

ディレクトリは4096より大きくなる可能性があり、- ext4の固有の「バグ」の1つ まだ優先度があまり高くないファイルシステムは、ディレクトリ情報が4096バイトを超えた後、ファイル数が増加してもその数は減りません削除されました。そしておそらく大きなニュースは、ディレクトリに情報がどのように割り当てられるかは、ファイルシステムと、有効/無効になっているオプション( source )に依存するため、特別な番号4096がext4に固有であることですケースですが、たとえばUFSなどの他のファイルシステムでは別の可能性があります。

ただし、Terryはディレクトリを表すiノードについて話していることに注意してください。ディレクトリ自体は親ディレクトリのdirentです。初期ディレクトリの内容は、ディレントまたはリンクです.および..


約0

Ext4ファイルシステムは、デフォルトで(空の場合でも)4096バイトが割り当てられたディレクトリを作成します。それが鍵です。 ServerFault および Arch Linux forum によると、ディレクトリのサイズが0と表示される場合、ディレクトリが存在するか、ext4以外のファイルシステムをホストしていることを意味します。

これは仮想ファイルシステムにも当てはまります(これは事実上、物理的なディスク上のファイルシステムではなく、カーネルによって公開され、メモリに含まれているインターフェイスです)。

$ ls -ld /proc /sys 
dr-xr-xr-x 243 root root 0 Feb 24 13:57 /proc
dr-xr-xr-x  13 root root 0 Feb 26 14:42 /sys
3