我们配置了自动挂载器,将 image1.iso 挂载到 /mnt/isosrv_auto/。如果一个进程尝试访问 /mnt/isosrv_auto/image1/,自动挂载器将挂载 ISO 9660 镜像。但是如果一个进程访问 /mnt/isosrv_auto/ 目录,自动挂载器将什么也不做。
为了解决这个问题,我们创建了另一个目录,名为 /mnt/isosrv/。在这个目录中,我们可以创建一个从 /mnt/isosrv_auto/image1/ 到 /mnt/isosrv/image1/ 的符号链接。当任何进程访问 /mnt/isosrv/ 时,该符号链接始终可见。当进程尝试访问 /mnt/isosrv/image1 (该符号链接) 时,内核将导致自动挂载器将 image1.iso 挂载到 /mnt/isosrv_auto/。然后,符号链接 (/mnt/isosrv/image1) 将指向新挂载的原始镜像。
仍然存在一个问题:如果一个进程以某种方式访问 /mnt/isosrv/,其中包含指向 ISO 9660 文件的所有符号链接,从而访问所有文件元数据(例如,修改时间、文件类型和访问权限),那么它将强制自动挂载器挂载所有从该目录链接的 ISO 9660 镜像(ls -la就是一个会这样做的进程的例子)。这从根本上破坏了使用自动挂载器的目的。
解决方案是在 /mnt/isosrv 中为每个 ISO 9660 镜像创建一个目录,然后在每个目录中,创建一个指向 /mnt/isosrv_auto/ 中挂载点的符号链接。