7. 工作原理

Autodir 使用模块来实现特定功能。Autodir 核心实现了通用功能,模块可以利用这些功能并添加特定功能。

任何时候,只能将一个模块添加到 Autodir。如果有两个模块,例如autohomeautogroup,则应创建两个 Autodir 进程,以便每个进程都可以附加一个所需的模块。

为了进一步解释,我选择了autohome模块,该模块处理透明的主目录创建。

Note假设
 

  • autohome模块按需创建用户主目录(如果这些目录尚不存在)。

  • 假设用户帐户存在,但随附的主目录不存在 - 要么是因为这些帐户是使用 useradd 命令的-M选项创建的,要么是因为这些帐户是从 LDAP、NIS 或其他外部数据库导入的,而这些帐户的主目录尚未创建。

  • 仅出于此解释的目的,还假设所有用户主目录都应位于/home目录中。

NoteKISS
 

保持简单:一些细微的细节被故意保留,以使解释易于理解。

首先,autofs 文件系统挂载在/home目录上,由 Autodir 完成。Linux 内核得知/home现在由用户空间应用程序 Autodir 管理。

NoteAutofs?
 

如果您不了解 autofs 文件系统,请不要过于担心。只需将其视为一种特殊的文件系统,类似于基于内存的文件系统,但具有一些额外的特殊属性。

                                +----------------+
                                |  Linux Kernel  |
                                +----------------+
                                  /        \
                                 /          \
                                /            \
                               /              \
   +-------------+       +--------+       +------------+        +-----------------+
   | Application |------>| /home  |<----->|  Autodir   |<------>| autohome module |
   +-------------+       +--------+       +------------+        +-----------------+
                              \                                          /
                               \  +----------------+                    /
                                +-|   /autohome    |<------------------+
                                  +----------------+

每当应用程序或守护程序需要访问用户的主目录时,例如/home/userhome1,它们会直接进入/home/userhome1以访问它。内核注意到这一点,会通知 Autodir 如果userhome1目录尚未存在于/home.

Autodir 中。然后,Autodir 将此请求传递给autohome模块。该autohome模块不触摸/home目录。相反,它在其他地方管理真正的主目录,例如在/autohome,如上图所示。

autohome如果/autohome目录中不存在真正的 home 目录,模块会创建一个。无论创建成功还是失败,autohome都会向 Autodir 报告。当目录创建任务成功完成时,真实主目录的路径将提供给 Autodir

如果autohome模块报告成功,Autodir 会在userhome1目录下创建/home目录,并将来自/autohome真实主目录挂载到该目录下。在此过程结束时,Autodir 会通知内核整个操作是否成功。相应地,内核允许应用程序进入该目录,或者,如果失败,则报告不存在该目录。