UNIXでディレクトリのサイズが常に4096バイトになるのはなぜですか?


26

ディレクトリファイルの情報は、4096バイトよりはるかに少ないと確信しています。セクターサイズが4096バイトであることは知っています。しかし、それより小さい通常のファイルは存在します。

Unixが各フォルダーに4096バイトを予約するのはなぜですか?

回答:


30

そのディレクトリに含まれるファイルに関するメタデータ(名前を含む)を保存するために必要な初期サイズです。初期割り当ては1セクターのサイズに等しくなりますが、必要に応じてそれを超えることができます。一度割り当てられると、断片化を減らすために、ファイルが削除されてもスペースは解放されません。

例えば:

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

ソース


3
「ファイルが削除されるとスペースが解放されない」部分に感謝します。バックアップを復元しましたが、同じディレクトリが2つあり、サイズが異なる理由がわかりませんでした。
トマスツィエリスキ

11

ファイルシステムによっては、4096バイトが最小の割り当て単位になる場合があります。そのため、ディレクトリには4096があります。

同じことがファイルにも当てはまります。一部のファイルが4096未満を報告する場合でも、実際にはディスクから少なくとも4096のストレージを使用しています。


4
うん、パブロが言ったように。ファイルで見ているサイズは、ディスク上のファイルのサイズではなく、ファイルのコンテンツサイズです。これらの小さなファイルのディスク上のサイズはちょうどそれが唯一のそのサイズのブロック単位でディスク容量を割り当てることができますよう、ディレクトリのように、実際には4096
ダン・マクグラス

1
これは質問とは関係ありません。
harrymc

これは間違っています。受け入れられた答えを参照してください。
ダンカンXシンプソン14年

間違っていますか?それは両方の答えの組み合わせではありませんか?4096はページのサイズです。詳細については、メモリページングシステムを参照してください。
ハリケール

5

多くの場合、含まれるメタデータの実際のサイズはディレクトリの内容に基づいて変動するため、4096は断片化を減らすために予約されています。時間の経過とともに絶えず拡大および縮小している場合(ログファイルや動的コンテンツが含まれている場合など)、パフォーマンスが低下する可能性があります。これはおそらく1つのフォルダーでは発生しませんが、ファイルシステム全体ですぐに追加されます。


3

ファイルシステムに依存します。ext2 / 3/4では4096です。reiserfsでは9608(my $HOME)1032(/tmp)または48(一部のdir /tmp)になります。

ext2 / 3/4ブロックのデフォルトでは4096であり、ファイルはそれより小さくすることはできません。ファイルが小さい場合は、とにかくブロック全体がかかります。ディレクトリの論理サイズについて尋ねるのは無意味であり、この情報はおそらくディスク上にないため、ブロックのサイズにブロックの数を乗じたもの、つまり使用された物理スペースを報告する必要があります。


ファイルサイズもファイルと一緒に保存されないことは確かです。必要なときに計算されます。ただし、ファイルの場合は、actualファイルサイズを報告します。
レーザー

1
ファイルサイズはiノードに保存されます。ext2 inodeには、その中にバイト単位のサイズが含まれていることを確認してください。そうしないと\0、バイナリファイルの正当な文字であるファイルの終了位置を見つけることができません。PS。FSを保存しないFSを作成することは可能ですが、extを使い慣れていない(そしておそらく他の人気のない)可能性があります。
マチェイピエチョトカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.