为什么我不能在多个点挂载同一个文件系统,为什么挂载点 inode 引用计数不能 > 1?

use*_*559 8 unix filesystems

我正在阅读Maurice J Bach 的The Design of the Unix Operating System,并且有两个关于文件系统挂载的问题:

  1. 为什么文件表中挂载点inode的引用计数大于1时文件系统挂载失败?

  2. 为什么 Unix 不允许在多个点挂载文件系统?(如果允许,会发生什么坏事?)

Jon*_*ler 6

HP (HP-UX) 手册页mount(2)说:

如果 mount() 失败,则将 errno 设置为以下值之一。

  • [EACCES] 路径前缀的一个组件拒绝搜索权限。
  • [EBUSY] 路径当前已安装,是某人的当前工作目录,或者正忙。
  • [EBUSY] 与 fs 关联的文件系统当前已挂载。

当您的问题 (1) 适用时,您会得到第一个 EBUSY,因为:

  • 如果该目录已经是挂载点,您将无法访问先前挂载的目录,这使得先前的挂载变得无关紧要。
  • 如果目录(例如/some/where)是某个进程的当前目录,则您的进程对 的内容有不同的看法/some/where;新人看到的是挂载的文件系统上的内容,而旧的进程看到的是挂载目录中的内容。

当文件系统已经安装时,您将获得第二个 EBUSY 来回答您的问题 (2) - 换句话说,您不能安装它两次。这是一件好事 - 如果两个独立的挂载点都在假设它们对超级块等实际上是共享的具有独占访问权,那么就会有一个可怕的混淆危险。如果/some/where/newfile同时创建一个文件也会造成混淆,/opt/other/newfile因为相同的设备安装在/some/where/opt/other.

我还没有检查 AIX、Solaris、Linux、MacOS X、BSD 手册页的mount(2),但我希望行为是相同的。


Dae*_*yth 5

这不是一个直接的答案,但您可以通过使用获得类似于在两个地方安装的行为 mount --bind