文件的名称存储在文件系统的哪里?

文件的名称存储在文件系统的哪里?

不确定这是否是提出该问题的正确堆栈站点,但我发现这是最“合乎逻辑”的站点。

我们对文件名在系统中的存储位置存在很大争议。我们中的一个人认为文件名存储在文件的元数据中。其他人不同意,我们认为文件名以某种方式存储在目录或文件系统中。如果这是正确的,那么文件系统如何从文件名指向正确的文件和二进制数据?

它是否存储了某种 ID 或者文件系统是否添加了对硬盘上文件所在点的引用?

我是不是迷路了?我尝试在互联网上搜索,但找不到我想要的东西。

编辑:我看到有些人问我指的是哪种文件系统,但我问的是“一般情况下”。如果某些文件系统不将其存储在系统中,则意味着文件名必须存储在元数据中?文件名还应该存储在哪里?

答案1

从您最初的问题和后续问题来看,您似乎不了解文件系统的工作原理。

“磁盘”只不过是一串非常长的 0 和 1。计算机必须使用一种标准方法来管理这些 0 和 1,这种方法称为“文件系统”。不同类型的计算机上有许多不同类型的文件系统 - FAT32、NTFS、EXTFS、ResierFS 等等。文件系统的选择对于访问磁盘的计算机与磁盘上存储的 0 和 1 之间的关系至关重要。如果文件系统的格式为 EXTFS,但计算机出于某种原因决定使用 ResierFS 来管理磁盘,则最终会导致数据完全损坏。

许多基于 Unix 的文件系统(例如 EXTFS 及其衍生产品)会将磁盘逻辑划分为多个部分。其中一个部分是“inode 表”。此区域包含“inode”。每个 inode 都引用一个特定文件,并将描述文件类型(“普通”文件、目录、设备、套接字等)、所有者、权限以及文件数据所在的磁盘“数据”部分的部分。

然后会有一个“数据”区域。对于“普通”文件,文件的内容将存储在此处。对于目录,这里存储的是文件名列表(该目录内包含的每个文件都有一个名称)以及每个文件名引用的 inode。

当你想查找一个文件时,你通过它的“路径”来指定它。计算机从路径的根目录(“/”)开始,找到路径中第一个对象的名称(“usr”),然后

  • 定位其 inode
  • 注意到它是一个目录
  • 获取路径中下一个对象的名称
  • 在目录中找到该对象
  • 重复

直到最后找到一个 inode 指示“不是目录”的对象。

所以

我们其中一人认为文件名存储在文件的元数据中。

在大多数经典 Unix 文件系统中都不是。在 FAT32 和 NTFS 中,我不知道。

其他人不同意,我们认为文件名以某种方式存储在目录中

在大多数经典的 Unix 文件系统中,是的。

或文件系统。

所有内容都存储在文件系统中。

答案2

如果不指定操作系统或文件系统类型,几乎不可能回答这个问题。

在大多数基于 Unix 的文件系统中,文件名作为名称/inode 查找表存储在包含该文件的目录的“数据”部分(即,普通文件存储其数据的磁盘空间)。

答案3

首先技术上取决于文件系统。

然而,可以肯定地说,文件的“元数据”(名称、属性、磁盘上的位置等)存储在不用于文件的保留空间中内容称为 inode。

POSIX 标准至少规定了 UNIX 文件系统中应存储什么内容。

文件与磁盘上的“目录”没有任何关系。文件系统负责使文件出现存在包含文件的目录的组织结构,但在其之下除了元数据和地址之外没有真正的结构。

答案4

格式化硬盘分区时,这取决于分区类型/文件系统,但通常分区上的部分空间会保留用于文件名和目录结构等内容。这就是名称所在的位置。

相关内容