【问题标题】:Special file in UNIX file system when mounting?挂载时UNIX文件系统中的特殊文件?
【发布时间】:2020-10-03 02:08:11
【问题描述】:

我正在阅读 D. M. Ritchie 和 K. Thompson 的 The UNIX Time-Sharing System,他们在其中简要介绍了 UNIX 操作系统。在文件系统部分,当他们谈论“挂载”时,他们会说以下两段。我对段落中的粗体和斜体内容有一些疑问。

第 1 段:当对 i-node 的文件发出 I/O 请求时 表示它是特殊的,最后 12 个设备地址字是 无关紧要,第一个指定内部设备名称,即 解释为一对数字,分别代表一个 设备类型子设备编号。设备类型指示哪个系统例程将处理该设备上的 I/O;这 子设备号选择,例如,连接到 特定的控制器或几个类似的终端接口之一。

第2段:在这种环境下,mount的执行 系统调用(第 3.4 节)非常简单。安装保持一个 系统表,其参数是在挂载期间指定的 i-number 和 普通文件的设备名称,以及谁的 对应值是指定特殊文件的设备名称。搜索此表以查找每个轮到的 i 编号/设备对 在打开或创建过程中扫描路径名时向上;如果一个 找到匹配项,i-number 被替换为 i-number 根目录,设备名称替换为表值。

  1. 从第一段,我知道设备名称是存在于特殊文件的 > i 节点。但是,为什么第二段说普通文件也有呢?

  2. mount 试图维护的系统表是什么?在第。 2 是不是表明系统表是内部文件系统的一部分,挂载过程做这样一个表,它的条目是特殊文件,指向文件在安装的外部设备中?

【问题讨论】:

标签: file unix operating-system filesystems mount


【解决方案1】:

让我们从 2 个观察开始:

  1. mount /dev/sda2 /mnt/sda2 接受一个特殊文件 /dev/sda2 和一个非特殊文件(普通文件/mnt/sda2
  2. 文件名查找必须知道如何跨入另一个挂载的文件系统。

假设/dev/sda1 是设备100,并安装在/ 上。假设/dev/sda2 是设备200,并安装在/mnt/sda2 上。当您查找 /mnt/sda2/x 时会发生什么?该文件在/dev/sda2 上存储为/x。以下是发生的事情:

  1. 假设每个文件系统上根 inode 的 inode 编号为 1。
  2. 操作系统在设备 100 的 inode 1 中查找 mnt,并找到例如索引节点 5。
  3. 操作系统会检查它的全局系统挂载表,以查看(设备 100,inode 5)是否映射到某个东西 - 它没有。
  4. 操作系统在设备 100 的 inode 5 中查找 sda2,并找到例如索引节点 17。
  5. 操作系统检查它的全局系统挂载表,以查看(设备 100,inode 17)是否映射到某个东西。
  6. 因为/dev/sda2 挂载到/mnt/sda2,表返回/dev/sda2,即设备200 - 我们正在进入另一个挂载的文件系统。
  7. 操作系统在设备 200 的 inode 1 中查找 x,并找到例如索引节点 11。
  8. 查找返回(设备 200,inode 5)。

所以回答你的问题:

  1. 普通文件是挂载点。 “普通”的意思是“不是特殊文件”。请注意,可以挂载常规文件,而不仅仅是目录。 Docker 使用此功能。
  2. 系统表的条目是挂载点,它们指向挂载的设备。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2012-09-09
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多