ext4 中的嵌套目录深度限制

ext4 中的嵌套目录深度限制

ext4 文件系统中嵌套目录的最大数量是否有限制?例如,据我所知,ISO-9660文件系统不能有超过7级子目录。

答案1

文件系统设计本身和实验没有任何固有的限制(感谢伊尔卡丘)表明目录的嵌套深度可以超出人们天真的预期的限制(PATH_MAXLinux 上的 4096,尽管这限制了传递给系统调用的路径长度,并且可以使用相对路径来解决)。

部分实现显然假设给定文件系统内的总路径长度永远不会超过PATH_MAX;参见目录散列函数分配PATH_MAX字节。

唯一与目录相关的限制似乎是检查过在文件系统实现中是单个路径分量的长度,限制为 255 字节;但这对嵌套深度没有任何影响。

答案2

根据分机(4)手册页,关于部分dir_nlink

通常,ext4 允许一个 inode 的硬链接数不超过 65,000 个。这适用于常规文件和目录,这意味着一个目录中的子目录不能超过 64,998 个(因为每个“.”和“..”条目,以及该目录在其父目录中的目录条目)目录算作硬链接)。此功能通过使 ext4 使用链接计数 1 来指示当链接计数可能超过最大计数限制时未知目录的硬链接数量,从而解除了此限制。

换句话说,如果dir_nlink启用该功能 - 则没有限制,否则 - 64k 子目录。您可以检查此功能是否已启用sudo dumpe2fs /dev/sda1 | grep --color=always dir_nlink。它可以被禁用,可能是为了通过tune2fs.

其他来源:

相关内容