为什么目录的大小在UNIX中始终为4096字节?


26

我敢肯定目录文件比4096字节少得多的信息。我知道扇区大小是4096字节。但是确实存在比该文件小的文件。

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

Answers:


30

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

例如:

$ 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
感谢您的“如果删除文件,则无法释放空间”部分。我还原了一个备份,不确定为什么两个相同的目录具有不同的大小。
TomaszZieliński'13

11

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

这同样适用于文件。即使某些文件的报告数量可能少于4096,但实际上它们实际上从磁盘上获取了至少4096的存储空间。


4
是的,正如Pablo所说。您正在查看的文件大小是文件内容大小,而不是磁盘上的文件大小。这些小文件的磁盘大小实际上是4096,就像目录一样,它只能以该大小的块分配磁盘空间
Dan McGrath,2010年

1
这与问题无关。
哈里奇

这是不正确的。请参阅已接受的答案。
邓肯X辛普森

不正确吗 这不是两个答案的结合吗?页面大小为4096,请参阅内存分页系统以获取更多信息。
Harrichael

5

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


3

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

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


我确定文件大小也不会与文件一起存储。在需要时进行计算。但是对于文件,它报告actual文件大小。
Lazer 2010年

1
文件大小与索引节点一起存储。确保ext2 inode内部包含字节大小。否则,将找不到\0二进制文件中合法字符所在的文件结尾。PS。可以创建不存储它的FS,但是不能扩展(可能没有其他流行的)。
Maciej Piechotka 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.