跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 管理:网络服务 Oracle Solaris 11 Information Library (简体中文) |
Autofs 是一项可自动挂载相应文件系统的客户端服务。以下是协同工作以完成自动挂载的组件:
automount 命令
autofs 文件系统
automountd 守护进程
自动挂载服务 svc:/system/filesystem/autofs 是在系统启动时调用的,它可读取主映射文件 auto_master 以创建最初的一组 autofs 挂载。这些 autofs 挂载在启动时不会自动挂载。这些挂载是一些点,以后将会在这些点之下挂载文件系统。这些点也称为触发节点。
设置 autofs 挂载后,这些挂载可以触发在其下挂载文件系统。例如,当 autofs 收到对当前尚未挂载的文件系统的访问请求时,autofs 会调用 automountd,实际上由该命令挂载请求的文件系统。
初始挂载 autofs 挂载后,必要时会使用 automount 命令更新 autofs 挂载。该命令将比较 auto_master 映射中的挂载列表和挂载表文件 /etc/mnttab(以前为 /etc/mtab)中的已挂载文件系统的列表。然后,automount 会做出相应更改。该进程允许系统管理员更改 auto_master 中的挂载信息,并使 autofs 进程可以使用这些更改,而无需停止并重新启动 autofs 守护进程。挂载文件系统后,在自动取消挂载文件系统之前,进一步进行访问不需要 automountd 执行任何操作。
与 mount 不同,automount 并不会从 /etc/vfstab 文件(该文件特定于每台计算机)中读取要挂载的文件系统列表。在域中或在计算机上,automount 命令是通过名称空间或本地文件进行控制的。
以下是有关 autofs 工作方式的简要概述。
自动挂载守护进程 automountd 是在引导时由服务 svc:/system/filesystem/autofs 启动的。请参见图 6-3。此服务还运行 automount 命令,该命令读取主映射并安装 autofs 挂载点。有关更多信息,请参见Autofs 如何启动导航进程(主映射)。
图 6-3 svc:/system/filesystem/autofs 服务启动 automount
Autofs 是支持自动挂载和取消挂载的内核文件系统。
请求访问 autofs 挂载点处的文件系统时,将发生下列情况:
Autofs 拦截请求。
Autofs 将消息发送到 automountd,以便挂载请求的文件系统。
automountd 在映射中查找文件系统信息,创建触发节点并执行挂载。
Autofs 允许继续处理被拦截的请求。
当文件系统在一段时间内没有活动后,Autofs 将取消挂载该文件系统。
注 - 不应手动挂载或取消挂载通过 autofs 服务管理的挂载。即使手动操作成功,autofs 服务也不会检查是否已取消挂载该对象,从而可能导致不一致。重新引导时将清除所有 autofs 挂载点。
Autofs 将搜索一系列映射以在网络中进行导航。映射是包含诸如网络中的所有用户的口令项或网络中的所有主机名称等信息的文件。实际上,这些映射包含网络范围内与 UNIX 管理文件等效的文件。可以在本地使用映射,也可以通过网络名称服务(如 NIS)使用映射。请参见修改 Autofs 导航网络的方式(修改映射)。
automount 命令在系统启动时读取主映射。主映射中的项包括直接映射名或间接映射名、映射路径和映射的挂载选项,如图 6-4 所示。项的具体顺序并不重要。automount 会将主映射中的项与挂载表中的项进行比较,以生成最新列表。
图 6-4 在主映射中进行导航
触发挂载请求时,autofs 服务执行的具体操作取决于自动挂载程序映射的配置方式。一般情况下,挂载过程对于所有挂载都是相同的。然而,最终结果会随指定的挂载点和映射复杂性的不同而不同。挂载过程包括创建触发器节点。
为帮助说明 autofs 挂载过程,假设已安装了以下文件。
$ cat /etc/auto_master # Master map for automounter # +auto_master /net -hosts -nosuid,nobrowse /home auto_home -nobrowse /share auto_share $ cat /etc/auto_share # share directory map for automounter # ws gumbo:/export/share/ws
访问 /share 目录时,autofs 服务将为 /share/ws 创建一个触发节点,/share/ws 是 /etc/mnttab 中类似于以下项的项:
-hosts /share/ws autofs nosuid,nobrowse,ignore,nest,dev=###
访问 /share/ws 目录时,autofs 服务将通过以下步骤完成该过程:
检查服务器的挂载服务的可用性。
在 /share 下挂载请求的文件系统。此时,/etc/mnttab 文件包含以下项。
-hosts /share/ws autofs nosuid,nobrowse,ignore,nest,dev=### gumbo:/export/share/ws /share/ws nfs nosuid,dev=#### #####
在自动挂载程序文件中定义了多层后,挂载过程将变得更加复杂。假设您对上一个示例中的 /etc/auto_shared 文件进行了扩展,使其包含以下内容:
# share directory map for automounter # ws / gumbo:/export/share/ws /usr gumbo:/export/share/ws/usr
该挂载过程基本上与上一个示例中访问 /share/ws 挂载点时的情况相同。此外,下一层 (/usr) 的触发节点是在 /share/ws 文件系统中创建的,因此可以挂载下一层(如果可以对其进行访问)。在本示例中,/export/share/ws/usr 必须存在于 NFS 服务器上,才能创建触发节点。
一段空闲时间后将按相反的顺序(与挂载顺序相反)执行取消挂载过程。如果分层结构中较高级别的某个目录处于繁忙状态,则只取消挂载该目录下面的文件系统。在取消挂载过程中,将先删除所有触发节点,然后再取消挂载文件系统。如果文件系统处于繁忙状态,则取消挂载将失败并将重新安装触发节点。
![]() | 注意 - 指定有层次的层时,请勿使用 -soft 选项。如果使用 -soft 选项,则重新安装触发节点的请求可能会超时。如果重新安装触发节点失败,将不能再访问下一级别的挂载。解决此问题的唯一方法是让自动挂载程序取消挂载分层结构中的所有组件。自动挂载程序通过等待文件系统自动取消挂载或重新引导系统来完成取消挂载。 |
/usr/local -ro \ /bin ivy:/export/local/sun4\ /share ivy:/export/local/share\ /src ivy:/export/local/src /usr/man -ro oak:/usr/man \ rose:/usr/man \ willow:/usr/man /usr/games -ro peach:/usr/games /usr/spool/news -ro pine:/usr/spool/news \ willow:/var/spool/news
挂载点 /usr/man 和 /usr/spool/news 列出了多个位置,第一个挂载点有三个位置,第二个挂载点有两个位置。任何复制的位置都可以向任何用户提供相同的服务。只有在挂载只读文件系统时此过程才有意义,因为您必须对要写入或修改的文件的位置进行某些控制。您需要避免在某个时候修改某个服务器上的文件,然后在几分钟后又去修改其他服务器上的“同一个”文件。这样做的优点是,将自动使用可用性最佳的服务器,而无需执行用户所需的任何工作。
如果已将文件系统配置为副本(请参见什么是复制的文件系统?),则客户机可以利用故障转移。这样,不仅可以自动确定最佳的服务器,而且在该服务器不可用时,客户机还会自动使用下一个最佳服务器。
将好的文件系统配置为副本的一个示例是手册页。在大型网络中,多台服务器可以导出当前的一组手册页。如果服务器正在运行且正在导出其文件系统,则从哪个服务器挂载手册页并不重要。在前面的示例中,多个挂载位置在映射项中被表示为挂载位置的列表。
/usr/man -ro oak:/usr/man rose:/usr/man willow:/usr/man
在本示例中,可以从服务器 oak、rose 或 willow 挂载手册页。哪个服务器最佳取决于很多因素,其中包括:
支持特定 NFS 协议级别的服务器的数目
服务器的邻近度
加权
排序期间,将对支持各版本 NFS 协议的服务器进行计数。大多数服务器支持的协议版本将成为要使用的缺省协议。此选择为客户机提供最多的可依赖的服务器。
找到使用同一版本协议的服务器的最大子集后,会按邻近度对该服务器列表进行排序。为确定临近度,将检查 IPv4 地址。IPv4 地址会显示每个子网中包含哪些服务器。本地子网中的服务器优先于远程子网中的服务器。首选最近的服务器可以减少延迟时间和网络通信流量。
注 - 不能确定使用 IPv6 地址的副本的邻近度。
图 6-5 说明了服务器的邻近度。
图 6-5 服务器邻近度
如果支持同一协议的多台服务器位于本地子网中,则系统将确定连接每台服务器的时间并使用最快的服务器。使用加权也会影响排序(请参见Autofs 和加权)。
例如,如果版本 4 服务器比较多,则版本 4 将成为要使用的缺省协议。但是,现在排序过程更加复杂了。以下是如何进行排序的一些示例:
本地子网中的服务器优先于远程子网中的服务器。因此,如果版本 3 服务器位于本地子网中,而最近的版本 4 服务器位于远程子网中,则版本 3 服务器优先级更高。同样,如果本地子网包含版本 2 服务器,则它们优先于包含版本 3 和版本 4 服务器的远程子网。
如果本地子网包含数目不同的版本 2、版本 3 和版本 4 服务器,则需要进行更多排序。自动挂载程序将优先使用本地子网上的最高版本。在这种情况下,版本 4 是最高版本。但是,如果本地子网具有的版本 3 或版本 2 服务器比版本 4 服务器多,则自动挂载程序将从本地子网上的最高版本“向下移动”一个版本。例如,如果本地子网有三台版本 4 服务器、三台版本 3 服务器和十台版本 2 服务器,则会选择版本 3 服务器。
同样,如果本地子网包含数目不同的版本 2 和版本 3 服务器,则自动挂载程序将首先查看哪个版本代表本地子网上的最高版本。接下来,自动挂载程序将对运行每个版本的服务器进行计数。如果本地子网中的最高版本同时代表最多的服务器,则选择最高版本。如果较低版本具有更多服务器,则自动挂载程序将从本地子网上的最高版本向下移动一个版本。例如,如果本地子网上的版本 2 服务器比版本 3 服务器更多,则选择版本 2 服务器。
注 - 加权还受 SMF 系统信息库中存储的参数影响。具体来说,server_versmin、client_versmin、server_versmax 和 client_versmax 的值可以将某些版本从排序过程中排除。有关这些参数的更多信息,请参见mountd 守护进程和nfsd 守护进程。
选择服务器之后,可以在挂载时使用故障转移检查排序方式。在单个服务器可能无法临时导出其文件系统的环境中,多个位置非常有用。
在具有许多子网的大型网络中,故障转移特别有用。Autofs 将选择适当的服务器,并且能够将 NFS 网络通信流量限制在本地网络段。如果服务器具有多个网络接口,则可以列出与每个网络接口关联的主机名,就像接口是单独的服务器一样。Autofs 将选择离客户机最近的接口。
注 - 对于手动挂载,不会执行任何加权和邻近度检查。mount 命令将对从左到右列出的服务器设置优先级。
有关更多信息,请参见 automount(1M) 手册页。
对 autofs 映射增加加权值可影响对处于同一邻近度级别的服务器的选择。例如:
/usr/man -ro oak,rose(1),willow(2):/usr/man
括号中的数字表示加权。不含加权的服务器的值为零,因此最有可能被选中。加权值越高,服务器被选中的几率越低。
注 - 所有其他的服务器选择因素都比加权重要。只有在网络邻近度相同的服务器之间进行选择时,才需考虑加权。
通过在客户机名称前加一个美元符号 ($) 前缀可以创建特定于该客户机的变量。该变量有助于了解正在访问同一个文件系统位置的不同体系结构类型。还可以使用花括号将变量名与附加字母或数字分隔开。表 6-3 显示了预定义的映射变量。
表 6-3 预定义的映射变量
|
可以在项所在行的任何位置使用变量,但不能使用关键字。例如,假设您的文件服务器分别从 /usr/local/bin/sparc 和 /usr/local/bin/x86 中导出 SPARC 和 x86 体系结构的二进制文件。客户机可以通过如下映射项进行挂载:
/usr/local/bin -ro server:/usr/local/bin/$CPU
注 - 针对任何 sun4 体系结构编写的大多数应用程序可以在所有 sun4 平台上运行。-ARCH 变量硬编码为 sun4。
文件映射中使用的映射项 +mapname 将导致自动挂载读取指定的映射,就好像该映射包含在当前文件中一样。如果 mapname 前面没有斜杠,则 autofs 会将映射名视为字符串,并使用名称服务转换器策略查找映射名。如果路径名是绝对路径名,则 automount 将检查该名称的本地映射。如果映射名以破折号 (-) 开头,则 automount 将访问相应的内置映射,如 hosts。
svc:system/name-service/switch 服务包含对命名服务的搜索顺序。config 属性组中的 automount 属性指定了查找自动挂载项时对名称服务数据库的搜索顺序。如果未指定特定的 config/automount 属性,则会使用 config/default 属性中定义的顺序。例如:
# svcprop -p config svc:/system/name-service/switch config/value_authorization astring solaris.smf.value.name-service.switch config/printer astring user\ files config/default astring files\ nis config/automount astring files\ nis
在本示例中,在搜索 NIS 映射之前将先搜索本地文件中的映射。如果未指定 config/automount 属性,也会发生上述情况,因为将使用 config/default 项。因此,可以在本地 /etc/auto_home 映射中为最常访问的起始目录添加几个项。然后,可以使用转换器回退到 NIS 映射以查找其他项。
bill cs.csc.edu:/export/home/bill bonny cs.csc.edu:/export/home/bonny
搜索已包含的映射后,如果找不到匹配项,automount 将继续扫描当前映射。因此,可以在 + 项之后添加更多项。
bill cs.csc.edu:/export/home/bill bonny cs.csc.edu:/export/home/bonny +auto_home
包含的映射可以是本地文件,也可以是内置映射。请记住,只有本地文件可以包含 + 项。
+/etc/auto_mystuff # local map +auto_home # NIS map +-hosts # built-in hosts map
可以创建能够执行某些命令以生成 autofs 挂载点的 autofs 映射。如果需要能够根据数据库或平面文件创建 autofs 结构,则使用 autofs 可执行映射将非常有用。使用可执行映射的缺点是,需要在每台主机上安装该映射。可执行映射不能包含在 NIS 名称服务中。
可执行映射必须在 auto_master 文件中有一个对应项。
/execute auto_execute
以下是可执行映射的示例:
#!/bin/ksh # # executable map for autofs # case $1 in src) echo '-nosuid,hard bee:/export1' ;; esac
为使本示例正常工作,该文件必须作为 /etc/auto_execute 进行安装,且必须设置可执行位。将权限设置为 744。在上述情况下,运行以下命令将导致从 bee 挂载 /export1 文件系统:
% ls /execute/src
可以在映射中修改、删除或添加项,以满足环境的需要。当用户所需的应用程序和其他文件系统更改其位置时,映射必须反映这些更改。可以随时修改 autofs 映射。所做修改在 automountd 下次挂载文件系统时是否生效取决于修改的映射和修改类型。
引导时服务 svc:/system/filesystem/autofs 将调用 autofs,然后 autofs 将查找 auto_master 主映射。Autofs 遵循下文讨论的规则。
Autofs 使用在 svc:/system/name-service/switch 服务的 config/automount 属性中指定的名称服务顺序。如果未定义 config/automount 属性,则会使用 config/default 属性。如果选择了 NIS,且 autofs 找不到其所需的映射,但找到包含一个或多个下划线的映射名,则会将下划线改为点。这种更改允许旧的 NIS 文件名仍然有效。然后,autofs 将再次检查映射,如图 6-6 所示。
图 6-6 Autofs 使用名称服务的方式
此会话的屏幕活动将与以下示例类似。
$ grep /home /etc/auto_master /home auto_home $ ypmatch brent auto_home Can't match key brent in map auto_home. Reason: no such map in server's domain. $ ypmatch brent auto.home diskus:/export/home/diskus1/&
如果选择 "files" 作为名称服务,则所有的映射都被假定为 /etc 目录中的本地文件。Autofs 会将以斜杠 (/) 开头的映射名解释为本地文件,无论 autofs 使用哪种名称服务。