it-swarm.cn

什么是超级块,索引节点,牙科和文件?

从M. Tim Jones的文章 Linux文件系统的解剖 中,我读到Linux从一组通用对象的角度查看所有文件系统,而这些对象是- 超级块inode牙科文件。即使该段的其余部分解释了上述内容,我也不满意该解释。

有人可以向我解释这些术语吗?

132
Sen

首先,我意识到这不是您提出的问题之一,您必须了解metadata。简而言之,元数据是关于数据的数据,并且从Wikipedia窃取。也就是说,元数据包含有关一条数据的信息。例如,如果我拥有一辆汽车,那么我会获得一组有关汽车的信息,但是这并不是汽车本身的一部分。诸如注册号,制造商,型号,制造年份,保险信息等信息。所有这些信息统称为元数据。如您所见,在Linux和UNIX文件系统中,元数据存在于多个组织级别。

superblock本质上是文件系统元数据,它定义了文件系统的类型,大小,状态以及有关其他元数据结构(元数据的元数据)的信息。超级块对文件系统非常重要,因此对于每个文件系统,超级块都存储在多个冗余副本中。超级块是文件系统的非常“高级”的元数据结构。例如,如果分区的超级块/ var损坏,则操作系统无法挂载有问题的文件系统(/ var)。通常,在这种情况下,您需要运行fsck,它将自动选择超级块的备用备份副本并尝试恢复文件系统。备份副本本身存储在通过文件系统分布的块组中,第一个副本存储在与分区开始位置相距1个块的位置。如果需要手动恢复,这一点很重要。您可以使用命令dumpe2fs /dev/foo | grep -i superblock查看有关ext2/ext3/ext4超级块备份的信息,这在尝试手动恢复时很有用。让我们假设dumpe2fs命令输出Backup superblock at 163840, Group descriptors at 163841-163841行。我们可以使用此信息以及有关文件系统结构的其他知识来尝试使用此超级块备份:/sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo。请注意,在此示例中,我假设块大小为1024字节。

inode存在于文件系统中或文件系统上,并表示有关文件的元数据。为了清楚起见,Linux或UNIX系统中的所有对象都是文件;实际文件,目录,设备等。请注意,在索引节点中包含的元数据中,没有人认为的文件名,这在以后很重要。索引节点实质上包含有关所有权(用户,组),访问模式(读取,写入,执行权限)和文件类型的信息。

dentry是通过将索引节点编号与文件名相关联来将索引节点和文件保持在一起的胶水。登齿在目录缓存中也起着重要作用,理想情况下,登齿可将最常用的文件保留在手边,以加快访问速度。文件系统遍历是Dentry的另一个方面,因为它维护目录与其文件之间的关系。

文件,除了是人类在与Word一起出现时通常会想到的以外,实际上只是逻辑上相关的任意数据块。考虑到所有已完成的工作(上面)以跟踪它们,这比较呆板。

我完全意识到,有几句话不能完全解释这些概念,因此请随时在必要时询问其他详细信息。

144
Tok

文件

文件只是意味着以一定顺序排列的一堆字节。这就是普通人所说的文件内容。当Linux打开文件时,它还会创建一个文件对象,该对象保存有关文件存储位置和正在使用的进程的数据。关闭文件时,将丢弃文件对象(而不是文件数据本身)。

Inode

索引节点(“索引节点”的缩写)是有关Linux存储的文件的一堆属性。每个文件都有一个索引节点(尽管对于某些文件系统,Linux必须创建自己的索引节点,因为信息分散在文件系统中)。索引节点存储信息,例如谁拥有文件,文件大小以及允许谁打开文件。每个索引节点还包含一个文件系统分区唯一的编号。就像该索引节点描述的文件的序列号一样。

牙科

Dentry(“目录条目”的缩写)是Linux内核用来跟踪目录中文件层次结构的工具。每个Dentry都将一个索引节点号映射到一个文件名和一个父目录。

超级块

超级块是文件系统中的唯一数据结构(尽管存在多个副本以防止损坏)。超级块保存有关文件系统的元数据,例如哪个inode是顶级目录以及所使用的文件系统的类型。

50
pingswept

superblock,索引节点(或inode),目录条目(或牙科),最后,file对象是虚拟文件系统(VFS)或虚拟文件系统开关。 VFS的目的是允许客户端应用程序以统一的方式访问不同类型的具体文件系统。

VFS中主要对象的关系

enter image description here


Inode是Unix/Linux文件系统上的数据结构。索引节点存储有关常规文件,目录或其他文件系统对象的元数据。 Inode充当文件和数据之间的接口。索引节点可以引用文件或目录或指向另一个对象的符号链接。它包含一个唯一的编号(i编号),文件的属性(包括名称,日期,大小和读/写权限)以及指向文件位置的指针。它与DOS/Windows世界中的FAT表相对应。

程序,服务,文本,图像等都是文件。根据系统,输入和输出设备(通常是所有设备)被视为文件

superblock是有关文件系统的高级元数据的容器。超级块是一种存在于磁盘(实际上,磁盘上有多个位置用于冗余)以及内存中的结构。它定义了文件系统的管理参数(例如,块总数,空闲块,根索引节点),为处理磁盘文件系统提供了基础。

Dentry是文件和Inode之间的接口。登齿在目录缓存中也起着重要作用,理想情况下,登齿可将最常用的文件保留在手边,以加快访问速度。

来源

14
Premraj

简单来说,dentry和inode是同一件事,是文件或目录的抽象。 dentry和inode之间的区别在于dentry用于促进特定于目录的操作,inode只是有关文件或目录的元数据的集合。 Superblock是文件系统的抽象。

在Linux内核中,struct file被错误命名为其他名称(例如struct address_space),并且不是真实“文件”的抽象(例如/ etc/passwd)。它代表打开的“文件”或目录。 struct file是由内核中的sys_open创建的,因此一个进程对于同一文件可能有很多struct files。

为什么我们需要牙科?它用于加速从路径名(例如/ etc/passwd)到inode的转换。 Linux内核使用inode来操纵“文件”或目录,而不是它们的名称。

5
firo

请注意,这些术语并非特定于Linux,而是特定于文件系统。当前的Unix和类似Unix的系统使用的大多数文件系统都是由原始Unix文件系统派生或受其启发的,该原始Unix文件系统定义了超级块和inode习惯用语。 Linux还可以挂载多个没有超级块和/或inode概念的文件系统,最常见的是FAT。另一个ZFS不使用超级块,而使用überblock。

4
jlliagre