GNU/Linux >> Linux の 問題 >  >> Linux

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

そのディレクトリに含まれるファイルに関するメタデータ (名前を含む) を格納するために必要な初期サイズです。最初の割り当ては 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/

ソース


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

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


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


Linux
  1. Linux –ルートディレクトリがA /記号で示されているのはなぜですか?

  2. Linux –ツリーとディレクトリサイズを組み合わせる方法は?

  3. パーティションのセクターサイズを見つけますか?

  1. LsとHexdumpがファイルサイズについて意見が一致しないのはなぜですか?

  2. Rsyncが2回目に実行したときに違いがあると主張するのはなぜですか?

  3. long int のサイズが常に 4 バイトであると想定できますか?

  1. スワップ パーティションのサイズを RAM サイズの 2 倍にする必要があるのはなぜですか?

  2. 実際のディレクトリ サイズを (du から) 取得する方法は?

  3. なぜ Linux の人々はいつもマニュアルを読むように言うのですか?