Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




我正在使用Ubuntu 14.04,并使用mkdir命令在/tmp上创建了一个空目录:
cd /tmp
mkdir foo

然后我用ls检查了它的大小:
ls -ldh foo

结果显示目录的大小为4KB,尽管里面什么也没有!

然后我触摸创建了一个空文件:
touch empty

然后我检查了它的大小:
ls -l empty

结果显示空文件的大小为0B,与空目录不同。

我已经读过一些问答,说4KB是目录的元数据。但是,如果它是元数据,那么内部将存储什么类型的信息,为什么存储的信息如此之大,以及为什么一个空文件没有这种元数据?如果不是元数据,那么4KB是什么意思?

最佳答案

我将把这个问题分解为3个部分,其中2个我可以回答...

第1部分:为什么空目录大小不为0?

因为它包含...,所以它并不是真正的空。

第2部分:为什么最低4K?

因为那是文件系统的块大小。创建文件系统时,可以将其设置为较小,但是会产生开销。文件系统必须记住每个块的“正在使用或正在使用”标志,因此,较小的块=更多的块=更多的开销。 (在ext2的早期,默认块大小为1K。磁盘足够小,通过不为每个文件分配4K的倍数节省的空间比用于免费块映射的空间更为重要。)

超过4K的块大小是不可能的,因为4K是大多数处理器上的页面大小(虚拟内存的最小单位),并且Linux并非旨在处理大于内存页面的文件系统块。

第3部分:当您用ls -l一个常规文件时,您将获得实际使用的字节数,但是当您用ls -ld一个目录时,您将获得分配的字节数。为什么?

这部分我不知道。对于常规文件,您可以使用ls -s查看分配大小,这两个大小实际上告诉您不同的内容。但是在目录上,-l大小类似于-s大小的冗余副本。大概内核可以报告一个大小,该大小指示实际使用了4K块的多少,但没有使用。我不知道为什么

关于linux - 为什么Linux中的空目录大小为4KB? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26666642/

10-14 19:46
查看更多