来自文章Linux 文件系统剖析作者:M. Tim Jones,我读到 Linux 从一组公共对象的角度看待所有文件系统,这些对象是超级块,索引节点,目录项和文件。尽管本段的其余部分解释了上述内容,但我对这种解释不太满意。
有人可以向我解释这些术语吗?
答案1
首先,我意识到这不是您问题中的术语之一,您必须理解元数据。简而言之,元数据是从维基百科窃取的,是关于数据的数据。也就是说元数据包含了一条数据的信息。例如,如果我拥有一辆汽车,那么我就有一组关于汽车的信息,但这些信息不是汽车本身的一部分。注册号、制造商、型号、制造年份、保险信息等信息。所有这些信息统称为元数据。正如您将看到的,在 Linux 和 UNIX 文件系统中,元数据存在于多个组织级别。
这超级块本质上是文件系统元数据,定义文件系统类型、大小、状态以及其他元数据结构的信息(元数据的元数据)。超级块对于文件系统非常关键,因此为每个文件系统存储在多个冗余副本中。超级块是文件系统的一个非常“高级”的元数据结构。例如,如果分区的超级块 /var 损坏,则操作系统无法安装有问题的文件系统 (/var)。通常在这种情况下,您需要运行fsck
它将自动选择超级块的备用备份副本并尝试恢复文件系统。备份副本本身存储在分布在文件系统中的块组中,第一个存储在距分区开头 1 个块偏移处。如果需要手动恢复,这一点很重要。您可以使用以下命令查看有关 ext2/ext3/ext4 超级块备份的信息,dumpe2fs /dev/foo | grep -i superblock
该命令在尝试手动恢复时很有用。让我们假设 dumpe2fs 命令输出该行Backup superblock at 163840, Group descriptors at 163841-163841
。我们可以使用此信息以及有关文件系统结构的其他知识来尝试使用此超级块备份:/sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo
。请注意,我假设本示例的块大小为 1024 字节。
一个索引节点存在于文件系统中或文件系统上,表示有关文件的元数据。为了清楚起见,Linux 或 UNIX 系统中的所有对象都是文件;实际的文件、目录、设备等。请注意,在索引节点包含的元数据中,没有人类所认为的文件名,这在后面会很重要。索引节点本质上包含有关所有权(用户、组)、访问模式(读、写、执行权限)、文件类型以及包含文件内容的数据块的信息。
A目录项是通过将索引节点号与文件名关联起来将索引节点和文件粘合在一起的粘合剂。目录项还在目录缓存中发挥作用,理想情况下,目录缓存可以保留最常用的文件以便更快地访问。文件系统遍历是 dentry 的另一个方面,因为它维护目录及其文件之间的关系。
A文件,除了是人类在看到这个词时通常想到的之外,实际上只是一个逻辑相关的任意数据块。考虑到(上面)为跟踪它们而完成的所有工作,相对来说非常乏味。
我完全意识到几句话并不能提供对任何这些概念的完整解释,因此请随时在必要时询问更多详细信息。
答案2
文件
文件只是指按一定顺序排列的一堆字节。这就是普通人所说的文件内容。当 Linux 打开文件时,它还会创建一个文件对象,该对象保存有关文件存储位置以及哪些进程正在使用该文件的数据。文件关闭时,文件对象(但不是文件数据本身)将被丢弃。
索引节点
inode(“索引节点”的缩写)是 Linux 存储的文件的一组属性。每个文件都有一个 inode(尽管对于某些文件系统,Linux 必须创建自己的 inode,因为信息分布在文件系统周围)。索引节点存储诸如谁拥有该文件、文件有多大以及允许谁打开该文件等信息。每个索引节点还包含文件系统分区特有的编号;它就像该索引节点描述的文件的序列号。
登特里
dentry(“目录条目”的缩写)是 Linux 内核用来跟踪目录中文件层次结构的东西。每个目录项将一个索引节点号映射到一个文件名和一个父目录。
超级街区
超级块是文件系统中的独特数据结构(尽管存在多个副本以防止损坏)。超级块保存有关文件系统的元数据,例如哪个 inode 是顶级目录以及所使用的文件系统的类型。
答案3
超级块,索引节点(或索引节点)、目录项(或目录项),最后,文件对象是一部分虚拟文件系统 (VFS) 或虚拟文件系统交换机。 VFS 的目的是允许客户端应用程序以统一的方式访问不同类型的具体文件系统。
VFS中主要对象的关系
一个索引节点是Unix/Linux文件系统上的数据结构。索引节点存储有关常规文件、目录或其他文件系统对象的元数据。索引节点充当文件和数据之间的接口。索引节点可以引用文件或目录或指向另一个对象的符号链接。它包含一个唯一的编号(i-number)、文件的属性(包括日期、大小和读/写权限)以及指向文件位置的指针(不是文件名和文件数据)。它与 DOS/Windows 世界中的 FAT 表相对应。
程序、服务、文本、图像等等,都是文件。输入和输出设备,以及通常所有的设备,都被认为是文件,根据系统。
这超级块是有关文件系统的高级元数据的容器。超级块是一种存在于磁盘(实际上,磁盘上多个位置以实现冗余)和内存中的结构。它提供了处理磁盘文件系统的基础,因为它定义了文件系统的管理参数(例如,块总数、空闲块、根索引节点)。
Dentry是文件和Inode之间的接口。目录项还在目录缓存中发挥作用,理想情况下,目录缓存可以保留最常用的文件以便更快地访问。
答案4
请注意,这些术语不是特定于 Linux 的,而是特定于文件系统的。当前 Unix 和类 Unix 系统使用的大多数文件系统要么源自定义超级块和 inode 习惯用法的原始 Unix 文件系统,要么受其启发。 Linux 还可以挂载多个没有超级块和/或索引节点概念的文件系统,最常见的是 FAT。另一种是 ZFS,它不使用超级块,而是使用超级块。