为什么目录的大小是 0 或 4096?

为什么目录的大小是 0 或 4096?
$ ls -l
total 28
drwxrwxrwx 1 t t 4096 May  8  2018  dir1
drwxrwxrwx 1 t t    0 Mar 12  2015  dir2
drwxrwxrwx 1 t t 4096 Jan 17  2014  dir3
drwxrwxrwx 1 t t 4096 Jun 12  2017  dir4
drwxrwxrwx 1 t t    0 Aug 24  2012  dir5

为什么目录的大小是 0 或 4096?

目录的大小是否为 0,因为其中的条目可以放入其 inode 中?

目录的大小是否不为 0,因为目录中的条目无法放入其索引节点,因此需要一些数据块?

为什么目录的非零大小始终为 4096?

谢谢。

请注意,我的观察结果在 ext4 文件系统和 NTFS 文件系统中是相同的。这是否意味着两种文件系统类型都以类似的方式实现目录?

答案1

某些文件系统的索引节点中有一些空间可用于容纳非常小的目录。但是,一旦目录足够大而无法容纳该区域,操作系统将分配整个文件分配单元,在您的情况下显然是 4096 字节。

在 ext4 上,这是通过 inline_data ext4 选项启用的。

https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inline_Directories

答案2

约4096

去引用王泰瑞的回答:

目录只是一个特殊文件,其中包含文件名和索引节点号的数组。当目录被创建时,文件系统为该目录分配了1个inode,并带有“文件名”(实际上是目录名)。 inode 指向单个数据块(最小开销),大小为 4096 字节。

目录可以增长到大于 4096,并且ext4 特有的“错误”之一文件系统尚未获得太多优先级的是,在目录信息超出 4096 字节后,如果删除文件,该数字不会减少。也许最重要的新闻是,如何为目录分配信息取决于文件系统,甚至取决于启用/禁用的选项(来源),因此在本例中,特殊数字 4096 是 ext4 特有的,但也可能是其他文件系统(例如 UFS)上的其他数字。

但请注意,Terry 谈论的是代表目录的 inode,目录本身是父目录中的 dirent。初始目录内容是 dients 或 links.以及..


约0

ext4 文件系统默认创建分配 4096 字节的目录(即使是空的)。这就是关键。根据服务器故障Arch Linux 论坛当目录大小显示为 0 时,表示该目录位于或托管非 ext4 的文件系统。

对于虚拟文件系统来说也是如此(它实际上不是物理磁盘上的文件系统,而是由内核公开并包含在内存中的接口):

$ ls -ld /proc /sys 
dr-xr-xr-x 243 root root 0 Feb 24 13:57 /proc
dr-xr-xr-x  13 root root 0 Feb 26 14:42 /sys

相关内容