8.3. autofs
使用
/etc/fstab
的一个缺点是,无论用户如何经常访问 NFS 挂载的文件系统,系统都必须指定资源来保持挂载的文件系统。对于一个或两个挂载没有问题,但当系统一次维护多个系统的挂载时,整体的系统性能可能会受到影响。/etc/fstab
的替代方法是使用基于内核的 automount 工具。自动挂载程序由两个组件组成:
- 实现文件系统的内核模块,以及
- 执行所有其他功能的用户空间守护进程。
automount 工具可以自动挂载和卸载 NFS 文件系统(按需挂载),从而节省了系统资源。它可用于挂载其他文件系统,包括 AFS、SMBFS、CIFS、CIFS 和本地文件系统。
重要
nfs-utils 软件包现在是"NFS 文件服务器"和"网络文件系统客户端"组的一部分。因此,默认情况下,它不再与 Base 组一起安装。尝试自动挂载 NFS 共享之前,请先确保系统上已安装 nfs-utils。
autofs 也是"网络文件系统客户端"组的一部分。
autofs 使用
/etc/auto.master
(主映射)作为其默认主配置文件。可以使用 autofs 配置(在 /etc/sysconfig/autofs
中)与名称服务交换机(NSS)机制结合使用其他支持的网络源和名称。为主映射中配置的每个挂载点运行一个 autofs 版本 4 守护进程的实例,因此可以在命令行中针对任何给定挂载点手动运行。autofs 版本 5 无法实现,因为它使用单个守护进程来管理所有配置的挂载点;因此,必须在主映射中配置所有自动挂载。这符合其他行业标准自动挂载程序的常规要求。挂载点、主机名、导出的目录和选项都可以在一组文件(或其他支持的网络源)中指定,而不必为每个主机手动配置它们。
8.3.1. 相对于版本 4 , autofs 版本 5 的改进
autofs 版本 5 与版本 4 相比有以下改进:
- 直接映射支持
- autofs 中的直接映射提供了一种在文件系统层次结构中的任意点自动挂载文件系统的机制。直接映射由主映射中的挂载点
/-
表示。直接映射中的条目包含一个作为键的绝对路径名称(而不是间接映射中使用的相对路径名称)。 - Lazy 挂载和卸载支持
- 多挂载映射条目描述了单个键下的挂载点层次结构。一个很好的例子是
-hosts
映射,通常用于将主机/net/主机中
的所有导出自动挂载为多挂载映射条目。使用-hosts
映射时,/net/主机的 ls 将为每个来自 主机 的导出挂载 autofs 触发器挂载。然后,它们将在被访问时进行挂载并使其过期。这可大幅减少访问具有大量导出的服务器时所需的活动挂载数量。 - 增强的 LDAP 支持
- autofs 配置文件(
/etc/sysconfig/autofs
)提供了一种机制来指定站点实施的 autofs 模式,从而防止在应用程序本身中通过试用和错误来确定这一点。此外,现在支持对 LDAP 服务器进行身份验证的绑定,使用常见 LDAP 服务器实现支持的大多数机制。为此支持添加了一个新的配置文件:/etc/autofs_ldap_auth.conf
。默认的配置文件是自文档文件,使用 XML 格式。 - 正确使用名称服务切换(nsswitch)配置。
- 名称服务切换配置文件的存在是为了提供一种方法来确定特定的配置数据来自哪里。这种配置的原因是让管理员可以灵活地使用选择的后端数据库,同时维护统一的软件接口来访问数据。尽管在处理 NSS 配置时,版本 4 自动挂载程序变得越来越好,但它仍然不完整。另一方面,autofs 版本 5 是一个完整的实现。有关此文件支持的语法的更多信息,请参阅 man nsswitch.conf。并非所有 NSS 数据库都是有效的映射源,解析器将拒绝无效的映射源。有效的源是 file, yp,nis,nisplus,ldap, 和 hesiod。
- 每个 autofs 挂载点都有多个主映射条目
- 经常使用但还没有提及的一件事是处理直接挂载点
/-
的多个主映射条目。每个条目的映射键被合并,并表现为一个映射的形式。例 8.2. 每个 autofs 挂载点都有多个主映射条目
以下是直接挂载的 connectathon 测试映射中的示例:/- /tmp/auto_dcthon /- /tmp/auto_test3_direct /- /tmp/auto_test4_direct
8.3.2. 配置 autofs
自动挂载程序的主要配置文件是
/etc/auto.master
,也称为主映射,如 第 8.3.1 节 “相对于版本 4 , autofs 版本 5 的改进” 所述。主映射列出了系统上 autofs- 控制的挂载点,以及它们相应的配置文件或网络来源,称为自动挂载映射。master 映射的格式如下:
mount-point map-name options
使用这种格式的变量有:
- mount-point
- 例如,autofs 挂载点
/home
。 - map-name
- 包含挂载点列表的映射源的名称,以及挂载这些挂载点的文件系统的位置。
- options
- 如果提供,它们适用于给定映射中的所有条目,只要它们本身没有指定选项。这个行为与 autofs 版本 4 不同,其中选项是累积的。这已被修改来实现混合环境兼容性。
例 8.3. /etc/auto.master
文件
以下是来自
/etc/auto.master
文件的示例行(使用 cat /etc/auto.master显示):
/home /etc/auto.misc
映射的常规格式与主映射类似,但"选项"会出现在挂载点和位置之间,而不是在主映射中的条目末尾:
mount-point [options] location
使用这种格式的变量有:
- mount-point
- 这指的是 autofs 挂载点。这可以是间接挂载的单个目录名称,也可以是直接挂载的挂载点的完整路径。每个直接和间接映射条目键(挂载点)后面可以跟一个以空格分隔的偏移目录列表(每个以
/
开头的子目录名称)使其称为多挂载条目。 - options
- 每当提供时,这些都是未指定其自身选项的映射条目的挂载选项。
- 位置
- 这指的是文件系统位置,如本地文件系统路径(对于以
/
开头的映射名称,前面带有 Sun 映射格式转义字符":")、NFS 文件系统或其他有效的文件系统位置。
以下是映射文件(例如
/etc/auto.misc
)中的内容示例:
payroll -fstype=nfs personnel:/dev/hda3 sales -fstype=ext3 :/dev/hda4
映射文件中的第一列指示 autofs 挂载点(来自名为 personnel 的服务器的
sales
和 payroll
)。第二列显示 autofs 挂载的选项,第三列则指示挂载的来源。在给定配置后,autofs 挂载点将是 /home/payroll
和 /home/sales
。通常省略 -fstype= 选项,通常不需要正确的操作。
如果目录不存在,自动挂载程序会创建它们。如果在自动挂载程序启动之前目录已存在,则自动挂载程序在退出时不会删除它们。
要启动自动挂载守护进程,请使用以下命令:
#
systemctl start autofs
要重启自动挂载守护进程,请使用以下命令:
#
systemctl restart autofs
使用给定配置时,如果进程需要访问 autofs 卸载的目录,如
/home/payroll/2006/July.sxc
,则自动挂载守护进程会自动挂载该目录。如果指定了超时,则如果在超时时间内没有访问该目录,则目录会被自动卸载。
要查看自动挂载守护进程的状态,请使用以下命令:
#
systemctl status autofs
8.3.3. 覆盖或增加站点配置文件
覆盖客户端系统上的特定挂载点的站点默认值会很有用。例如,请考虑以下条件:
- 自动挂载程序映射存储在 NIS 中,
/etc/nsswitch.conf
文件具有以下指令:automount: files nis
auto.master
文件包含:+auto.master
- NIS
auto.master
映射文件包含:/home auto.home
- NIS
auto.home
映射包含:beth fileserver.example.com:/export/home/beth joe fileserver.example.com:/export/home/joe * fileserver.example.com:/export/home/&
- 文件映射
/etc/auto.home
不存在。
鉴于这些条件,我们假设客户端系统需要覆盖 NIS 映射
auto.home
并从其他服务器挂载主目录。在这种情况下,客户端需要使用以下 /etc/auto.master
映射:
/home /etc/auto.home +auto.master
/etc/auto.home
映射包含条目:
* labserver.example.com:/export/home/&
由于自动挂载程序仅处理第一次出现的挂载点,
/home
包含 /etc/auto.home
的内容,而不是 NIS auto.home
映射。
另外,要仅使用几个条目来增加站点范围的
auto.home
映射,请创建一个 /etc/auto.home
文件映射,并在其中放置新条目。在结尾处,包含 NIS auto.home
映射。然后 /etc/auto.home
文件映射类似:
mydir someserver:/export/mydir +auto.home
使用这些 NIS
auto.home
映射条件时,ls /home 命令输出:
beth joe mydir
最后一个示例按预期工作,因为 autofs 不包含与正在读取的文件映射同名的文件映射的内容。因此,autofs 转到 nsswitch 配置中的下一个映射源。
8.3.4. 使用 LDAP 来存储自动挂载程序映射
必须在所有配置的系统中安装 LDAP 客户端程序库,以便从 LDAP 检索自动挂载程序映射。在 Red Hat Enterprise Linux 上,
openldap
软件包应作为 自动挂载程序
的依赖项自动安装。要配置 LDAP 访问,请修改 /etc/openldap/ldap.conf
。确保为您的站点正确设置了 BASE、URI 和 模式。
rfc2307bis
描述了在 LDAP 中存储自动挂载映射的最新建立的模式。要使用此模式,必须通过从架构定义中删除注释字符,在 autofs
配置(/etc/sysconfig/autofs
)中设置它。例如:
例 8.4. 设置 autofs 配置
DEFAULT_MAP_OBJECT_CLASS="automountMap" DEFAULT_ENTRY_OBJECT_CLASS="automount" DEFAULT_MAP_ATTRIBUTE="automountMapName" DEFAULT_ENTRY_ATTRIBUTE="automountKey" DEFAULT_VALUE_ATTRIBUTE="automountInformation"
确保它们是唯一在配置中未注释的模式条目。automountKey 替换
rfc2307bis
模式中的 cn 属性。以下是 LDAP 数据交换格式(LDIF
)配置示例:
例 8.5. LDF 配置
# extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (&(objectclass=automountMap)(automountMapName=auto.master)) # requesting: ALL # # auto.master, example.com dn: automountMapName=auto.master,dc=example,dc=com objectClass: top objectClass: automountMap automountMapName: auto.master # extended LDIF # # LDAPv3 # base <automountMapName=auto.master,dc=example,dc=com> with scope subtree # filter: (objectclass=automount) # requesting: ALL # # /home, auto.master, example.com dn: automountMapName=auto.master,dc=example,dc=com objectClass: automount cn: /home automountKey: /home automountInformation: auto.home # extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (&(objectclass=automountMap)(automountMapName=auto.home)) # requesting: ALL # # auto.home, example.com dn: automountMapName=auto.home,dc=example,dc=com objectClass: automountMap automountMapName: auto.home # extended LDIF # # LDAPv3 # base <automountMapName=auto.home,dc=example,dc=com> with scope subtree # filter: (objectclass=automount) # requesting: ALL # # foo, auto.home, example.com dn: automountKey=foo,automountMapName=auto.home,dc=example,dc=com objectClass: automount automountKey: foo automountInformation: filer.example.com:/export/foo # /, auto.home, example.com dn: automountKey=/,automountMapName=auto.home,dc=example,dc=com objectClass: automount automountKey: / automountInformation: filer.example.com:/export/&