21 使用 Autofs 按需挂载 #
autofs
是一个可根据需要自动挂载指定目录的程序。它基于一个内核模块运行以实现高效率,并且可以同时管理本地目录和网络共享。这些自动挂载点仅会在被访问时挂载,一定时间内不活动后即会被卸载。这种按需行为可节省带宽,并实现比 /etc/fstab
管理的静态挂载更高的性能。虽然 autofs
是控制脚本,但 automount
才是实际执行自动挂载的命令(守护程序)。
21.1 安装 #
SUSE Linux Enterprise Server 上默认未安装 autofs
。要使用它的自动装载功能,请先使用下面的命令安装该程序
>
sudo
zypper install autofs
21.2 配置 #
您需要使用 vim
等文本编辑器编辑 autofs
的配置文件来手动配置它。配置 autofs
有两个基本步骤 — master 映射文件和特定映射文件。
21.2.1 Master 映射文件 #
autofs
的默认 master 配置文件是 /etc/auto.master
。可通过在 /etc/sysconfig/autofs
文件中更改 DEFAULT_MASTER_MAP_NAME
选项的值来更改其位置。以下是 SUSE Linux Enterprise Server 中默认 master 映射文件的内容:
# # Sample auto.master file # This is an automounter map and it has the following format # key [ -mount-options-separated-by-comma ] location # For details of the format look at autofs(5).1 # #/misc /etc/auto.misc2 #/net -hosts # # Include /etc/auto.master.d/*.autofs3 # #+dir:/etc/auto.master.d # # Include central master map if it can be found using # nsswitch sources. # # Note that if there are entries for /net or /misc (as # above) in the included master map any keys that are the # same will not be seen as the first read key seen takes # precedence. # +auto.master4
| |
虽然这些内容默认会被注释掉 (#),但它依然是简单的自动挂载器映射语法示例。 | |
如果您需要将 master 映射分割成几个文件,请将该行取消注释,并将映射(后缀为 | |
|
auto.master
中的项有三个字段,语法如下:
mount point map name options
- mount point
要在其中挂载
autofs
文件系统的基本位置,例如/home
。- map name
挂载时所用映射源的名称。有关映射文件的语法,请参见第 21.2.2 节 “映射文件”。
- options
这些选项(如指定)将作为默认值应用于给定映射中的所有项。
有关选用 map-type
、format
和 options
的特定值的更多详细信息,请参见 手册页 (man 5 auto.master
)。
auto.master
中的下面一项指示 autofs
查看 /etc/auto.smb
,并在 /smb
目录中创建挂载点:
/smb /etc/auto.smb
21.2.1.1 直接挂载 #
直接挂载会在相关映射文件内的指定路径创建挂载点。这种方式不是在 auto.master
中指定挂载点,而是用 /-
替换挂载点字段。例如,下行指示 autofs
在 auto.smb
中指定的位置创建挂载点:
/- /etc/auto.smb
如果指定映射文件时未包含其完整本地或网络路径,系统会使用名称服务转换 (NSS) 配置寻找该映射文件。
/- auto.smb
21.2.2 映射文件 #
虽然文件是使用 autofs
自动挂载的最常见的映射类型,但是还有其他一些类型。映射规范可以是命令的输出,也可以是 LDAP 或数据库中查询的结果。有关映射类型的更多详细信息,请参见 man 5 auto.master
手册页。
映射文件指定(本地或网络)来源位置,以及在本地挂载来源的挂载点。映射的一般格式与 master 映射相似。区别在于 options 位于 mount point 与 location 之间,而不是该项的末尾:
mount point options location
确保映射文件未标记为可执行文件。可通过执行 chmod -x MAP_FILE
去除可执行文件位。
- mount point
指定将来源位置挂载到何处。这可以是要添加到 auto.master 中所指定基础挂载点的单个目录名称(所谓的
间接
挂载),也可以是挂载点的完整路径(直接挂载,请参见第 21.2.1.1 节 “直接挂载”)。- options
为相关项指定可选的挂载选项列表,挂载选项以逗号分隔。如果
auto.master
还包含此映射文件的选项,这些选项会附加在后面。- location
指定要挂载的文件系统来自何处。通常是 NFS 或 SMB 卷,常用表示法是
主机名:路径名称
。如果要挂载的文件系统以“/”开头(例如本地/dev
项或 smbfs 共享),需要在前面加一个冒号“:”,例如:/dev/sda1
。
21.3 操作和调试 #
本节介绍如何控制 autofs
服务操作,以及如何在调整该自动挂载器操作时查看更多调试信息。
21.3.1 控制 autofs
服务 #
autofs
服务的操作由 systemd
控制。autofs
的 systemctl
命令的一般语法为
>
sudo
systemctl SUB_COMMAND autofs
其中,SUB_COMMAND 是下列项目之一:
- enable
在引导时启动该自动挂载器守护程序。
- start
启动该自动挂载器守护程序。
- stop
停止该自动挂载器守护程序。自动挂载点将不再可访问。
- status
打印
autofs
服务的当前状态以及相关日志文件的部分内容。- restart
停止然后启动该自动挂载器,以便终止所有正在运行的守护程序,然后再启动新的守护程序。
- reload
检查当前的
auto.master
映射,重启动项已更改的守护程序,并为新项启动新守护程序。
21.3.2 调试自动挂载器问题 #
如果您在使用 autofs
挂载目录时遇到问题,手动运行 automount
守护程序并查看其输出消息将非常有用:
停止
autofs
。>
sudo
systemctl stop autofs从一个终端的前台手动运行
automount
,生成详细输出。>
sudo
automount -f -v从另一个终端上尝试通过访问挂载点(例如,通过
cd
或ls
)挂载自动挂载文件系统。从第一个终端检查
automount
的输出,以了解有关挂载为何失败或者甚至为何未尝试挂载的更多信息。
21.4 自动挂载 NFS 共享 #
下面的过程说明了如何配置 autofs
以自动挂载网络上可用的 NFS 共享。该过程要用到前面提到的信息,并假设您熟悉 NFS 导出。有关 NFS 的更多信息,请参见第 19 章 “通过 NFS 共享文件系统”。
编辑 master 映射文件
/etc/auto.master
:>
sudo
vim /etc/auto.master在
/etc/auto.master
末尾为新的 NFS 挂载添加一条新项:/nfs /etc/auto.nfs --timeout=10
此指令指示
autofs
基本挂载点是/nfs
,NFS 共享在/etc/auto.nfs
映射中指定,并且此映射中的所有共享在 10 秒不活动后将自动卸载。为 NFS 共享创建新的映射文件:
>
sudo
vim /etc/auto.nfs对每个 NFS 共享,
/etc/auto.nfs
通常都会包含单独的一行。有关其格式,请参见第 21.2.2 节 “映射文件”。添加下行,指出挂载点及 NFS 共享网络地址:export jupiter.com:/home/geeko/doc/export
上面的行表示当收到请求时,系统会将
jupiter.com
主机上的/home/geeko/doc/export
目录自动挂载到本地主机上的/nfs/export
目录(/nfs
取自auto.master
映射)。/nfs/export
目录将由autofs
自动创建。(选择性)如果您先前以静态方式挂载了该 NFS 共享,请将
/etc/fstab
中的相关行注释掉。该行应类似于:#jupiter.com:/home/geeko/doc/export /nfs/export nfs defaults 0 0
重新装载
autofs
并检查它是否正常工作:>
sudo
systemctl restart autofs# ls -l /nfs/export total 20 drwxr-xr-x 5 1001 users 4096 Jan 14 2017 .images/ drwxr-xr-x 10 1001 users 4096 Aug 16 2017 .profiled/ drwxr-xr-x 3 1001 users 4096 Aug 30 2017 .tmp/ drwxr-xr-x 4 1001 users 4096 Apr 25 08:56 manual/
如果您能看到远程共享上的文件列表,则表示
autofs
工作正常。
21.5 高级主题 #
本节讨论的主题超出了 autofs
基本介绍的范畴 — 自动挂载网络上可用的 NFS 共享、在映射文件中使用通配符,以及特定于 CIFS 文件系统的信息。
21.5.1 /net
挂载点 #
如果您使用了许多 NFS 共享,这个助手挂载点将非常有用。/net
会根据需要自动挂载本地网络上的所有 NFS 共享。该项在 auto.master
文件中已经存在,因此,您只需将其取消注释,然后重启动 autofs
即可:
/net -hosts
>
sudo
systemctl restart autofs
例如,如果您有名为 jupiter
的服务器以及名为 /export
的 NFS 共享,您可以在命令行上键入
>
sudo
cd /net/jupiter/export
来挂载它。
21.5.2 使用通配符自动挂载子目录 #
如果您的某个目录含有多个子目录,并且您需要单个自动挂载这些子目录(一般情况下,该目录是包含各个用户主目录的 /home
目录),autofs
提供了便捷的解决方案。
如果这些子目录是主目录,则在 auto.master
中添加下行:
/home /etc/auto.home
现在,您需要在 /etc/auto.home
文件中添加正确的映射,以便自动挂载用户的主目录。一种方法是为每个目录创建单独的项:
wilber jupiter.com:/home/wilber penguin jupiter.com:/home/penguin tux jupiter.com:/home/tux [...]
这种方法非常麻烦,因为您需要在 auto.home
中管理用户列表。您可以使用星号“*”取代挂载点,使用符号“&”取代要挂载的目录。
* jupiter:/home/&
21.5.3 自动挂载 CIFS 文件系统 #
如果想自动挂载 SMB/CIFS 共享(有关 SMB/CIFS 协议的更多信息,请参见第 20 章 “Samba”),需要修改映射文件的语法。在 option 字段中添加 -fstype=cifs
,并在共享位置前面加上一个冒号“:”。
mount point -fstype=cifs ://jupiter.com/export