为什么在 unix 中目录的大小总是 4096 字节?

Laz*_*zer 29 linux unix shell

我确信目录文件的信息比 4096 字节少得多。我知道扇区大小是 4096 字节。但是比那个小的普通文件确实存在。

为什么 Unix 为每个文件夹保留 4096 个字节?

har*_*ymc 32

这是存储该目录中包含的文件(包括名称)的元数据所需的初始大小。初始分配等于一个扇区的大小,但如有必要,可以增长到更高。分配后,如果删除文件,则不会释放空间,以减少碎片。

例如:

$ 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/
Run Code Online (Sandbox Code Playgroud)

来源

  • 感谢“如果删除文件,则不会释放空间”部分。我恢复了备份,但不确定为什么两个完全相同的目录具有不同的大小。 (3认同)

Pab*_*ruz 11

有时 4096 字节是某些文件系统的最小分配单元。这就是目录有 4096 的原因。

同样的事情也适用于文件。尽管某些文件可能报告少于 4096,但它们实际上从磁盘中占用了至少 4096 的存储空间。

  • 是的,正如巴勃罗所说。您正在查看的文件大小是文件内容大小,而不是磁盘上的文件大小。这些小文件在磁盘上的大小实际上是 4096,就像目录一样,因为它只能以该大小的块为单位分配磁盘空间 (4认同)

MDM*_*rra 5

4096 保留用于减少碎片,因为通常包含的元数据的实际大小会根据目录内容而波动。如果它随着时间的推移不断增长和缩小(比如它包含日志文件或动态内容),它可能会损害性能。这可能不会发生在一个文件夹中,但在整个文件系统中它会迅速增加。