Autodir 使用模块来实现特定功能。Autodir 核心实现了通用功能,模块可以利用这些功能并添加特定功能。
任何时候,只能将一个模块添加到 Autodir。如果有两个模块,例如autohome和autogroup,则应创建两个 Autodir 进程,以便每个进程都可以附加一个所需的模块。
为了进一步解释,我选择了autohome模块,该模块处理透明的主目录创建。
![]() | 假设 |
---|---|
|
![]() | KISS |
---|---|
保持简单:一些细微的细节被故意保留,以使解释易于理解。 |
首先,autofs 文件系统挂载在/home目录上,由 Autodir 完成。Linux 内核得知/home现在由用户空间应用程序 Autodir 管理。
![]() | Autofs? |
---|---|
如果您不了解 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 会通知内核整个操作是否成功。相应地,内核允许应用程序进入该目录,或者,如果失败,则报告不存在该目录。