Anu*_*hne 1 filesystems directory files
这个问题是Unix 文件系统中如何实现目录的扩展?
我的目标是实现基本的文件系统:在读取 inode 编号和名称后,我们知道文件的名称,因此我们可以列出目录内容,但我们无法确定条目的类型:它是另一个目录还是文件。如果目录中有 1000 个条目,那么读取 1000 个 inode 只是为了确定它是文件还是目录看起来太傻了。
我在这里遗漏了什么还是只是这样?
基本上:这是你的决定
如果“UNIX 文件系统”是指 UFS,那么父目录 inode 不会缓存文件类型,它只包含文件和相应的 inode。来源:UFS 文件系统(PDF,请参阅第 15.2.2 章)
这可能不是所有文件系统的情况,这是一种设计选择。对于您的文件系统,它可能是您的设计选择。
对于这个选择的愚蠢,我不同意。想一想系统必须检查目录下的文件类型多少次?您必须平衡ls -l
命令的频率与缓存 inode 中的信息所需的额外空间。
如果您的文件系统是类集群(例如 glusterfs)或类网络(例如 nfs),那么这可能是一个好主意,因为访问所有 inode 可能存在延迟。在本地存储上,这可能不太重要。
另外你的文件系统试图实现什么?如果它被设计为对包含数千个文件的目录有效,那么可能值得考虑缓存文件类型,如果它被设计为精简且占用空间最小,那么缓存是不可避免的。
关于 ext2、3 和 4 以及文件类型功能的注意事项
似乎ext2-4
可以完全按照您的想法行事。它可以缓存目录条目中的文件类型。这仅对filetype
作为文件系统创建时间的功能有效。使用此功能时,ext4 将使用不同的目录条目结构,该结构可以具有文件类型的缓存。这也适用于 ext2 和 ext3。