30 使用 Autofs 按需装入 #
autofs
是一个可根据需要自动装入指定目录的程序。它基于一个内核模块运行以实现高效率,并且可以同时管理本地目录和网络共享。这些自动安装点仅会在被访问时装入,一定时间内不活动后即会被卸载。这种按需行为可节省带宽,并实现比 /etc/fstab
管理的静态装入更高的性能。虽然 autofs
是控制脚本,但 automount
才是实际执行自动装入的命令(守护程序)。
30.1 安装 #
SUSE Linux Enterprise Server
上默认未安装 autofs。要使用它的自动装载功能,请先使用下面的命令安装该程序
sudo zypper install autofs
30.2 配置 #
您需要使用 vim
等文本编辑器编辑 autofs
的配置文件来手动配置它。配置 autofs
有两个基本步骤 — master 映射文件和特定映射文件。
30.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
装入时所用映射源的名称。有关映射文件的语法,请参见第 30.2.2 节 “映射文件”。
- options
这些选项(如指定)将作为默认值应用于给定映射中的所有项。
有关选用 map-type
、format
和 options
的特定值的更多详细信息,请参见 手册页 (man 5 auto.master
)。
auto.master
中下面的项指示 autofs
查看 /etc/auto.smb
,并在 /smb
目录中创建安装点。
/smb /etc/auto.smb
30.2.1.1 直接装入 #
直接装入会在相关映射文件内的指定路径创建安装点。这种方式不是在 auto.master
中指定安装点,而是用 /-
替换安装点字段。例如,下行指示 autofs
在 auto.smb
中的指定位置创建安装点:
/- /etc/auto.smb
如果指定映射文件时未包含其完整本地或网络路径,系统会使用名称服务转换 (NSS) 配置寻找该映射文件。
/- auto.smb
30.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 中所指定基础安装点的单个目录名称(所谓的
间接
装入),也可以是安装点的完整路径(直接装入,请参见第 30.2.1.1 节 “直接装入”)。- options
指定相关项的安装点逗号分隔列表(可选)。如果
auto.master
还包含此映射文件的选项,这些选项会附加在后面。- location
指定要装入的文件系统来自何处。通常是 NFS 或 SMB 卷,常用表示法是
主机名:路径名称
。如果要装入的文件系统以“/”开头(例如本地/dev
项或 smbfs 共享),需要在前面加一个冒号“:”,例如:/dev/sda1
。
30.3 操作和调试 #
本节介绍如何控制 autofs
服务操作,以及如何在调整该自动装入器操作时查看更多调试信息。
30.3.1 控制 autofs
服务 #
autofs
服务的操作由 systemd
控制。autofs
的 systemctl
命令的一般语法为
sudo systemctl SUB_COMMAND autofs
其中,SUB_COMMAND 是下列项目之一:
- enable
在引导时启动该自动装入器守护程序。
- start
启动该自动装入器守护程序。
- stop
停止该自动装入器守护程序。自动安装点将不再可访问。
- status
打印
autofs
服务的当前状态以及相关日志文件的部分内容。- restart
停止然后启动该自动装入器,以便终止所有正在运行的守护程序,然后再启动新的守护程序。
- reload
检查当前的
auto.master
映射,重启动项已更改的守护程序,并为新项启动新守护程序。
30.3.2 调试自动装入器问题 #
如果您在使用 autofs
装入目录时遇到问题,手动运行 automount
守护程序并查看其输出讯息将非常有用:
停止
autofs
。sudo systemctl stop autofs
从一个终端的前台手动运行
automount
,生成详细输出。sudo automount -f -v
从另一个终端上尝试通过访问安装点(例如,通过
cd
或ls
)装入自动装入文件系统。从第一个终端上检查
automount
的输出以了解更多信息,例如装入为何失败,或者为何甚至未尝试执行装入。
30.4 自动装入 NFS 共享 #
下面的过程说明了如何配置 autofs
以自动装入网络上可用的 NFS 共享。该过程要用到前面提到的信息,并假设您熟悉 NFS 导出步骤。有关 NFS 的更多信息,请参见第 28 章 “通过 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
通常都会包含单独的一行。有关其格式,请参见第 30.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 6 1001 users 4096 Oct 25 08:56 ./ drwxr-xr-x 3 root root 0 Apr 1 09:47 ../ drwxr-xr-x 5 1001 users 4096 Jan 14 2013 .images/ drwxr-xr-x 10 1001 users 4096 Aug 16 2013 .profiled/ drwxr-xr-x 3 1001 users 4096 Aug 30 2013 .tmp/ drwxr-xr-x 4 1001 users 4096 Oct 25 08:56 SLE-12-manual/
如果您能看到远程共享上的文件列表,则表示
autofs
工作正常。
30.5 高级主题 #
本节讨论的主题超出了 autofs
基本介绍的范畴 — 自动装入网络上可用的 NFS 共享、在映射文件中使用通配符,以及特定于 CIFS 文件系统的信息。
30.5.1 /net
安装点 #
如果您使用了许多 NFS 共享,这个助手安装点将非常有用。/net
会根据需要自动装入本地网络上的所有 NFS 共享。该项在 auto.master
文件中已经存在,因此,您只需将其取消注释,然后重启动 autofs
即可:
/net -hosts
systemctl restart autofs
例如,如果您有名为 jupiter
的服务器以及名为 /export
的 NFS 共享,您可以在命令行上键入
# cd /net/jupiter/export
来装入它。
30.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/&
30.5.3 自动装入 CIFS 文件系统 #
如果想自动装入 SMB/CIFS 共享(有关 SMB/CIFS 协议的更多信息,请参见第 29 章 “Samba”了解),需要修改映射文件的语法。在 option 字段中添加 -fstype=cifs
,并在共享位置前面加上一个冒号“:”。
mount point -fstype=cifs ://jupiter.com/export