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

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

我确信目录文件包含的信息远少于 4096 字节。我知道扇区大小为 4096 字节。但确实存在小于该大小的正常文件。

为什么 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/

来源

答案2

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

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

答案3

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

答案4

这取决于文件系统。在 ext2/3/4 上它“是” 4096。在 reiserfs 上它可以是 9608 (我的$HOME) 1032 ( /tmp) 或 48 ( 中的一些目录/tmp)。

默认情况下,ext2/3/4 上的块为 4096 - 文件占用的空间不能小于此值。如果文件较小,则无论如何都会占用整个块。由于询问目录的逻辑大小毫无意义,而且这些信息可能根本不在磁盘上,并且必须报告某些内容,因此它会报告块大小乘以占用的块数,即已占用的物理空间。

相关内容