如何在 CentOS 7/Rhel 7 上配置 autofs 守护进程
客观的
了解如何利用 autofs 守护程序自动挂载设备和远程共享。
要求
root权限安装autofs包和编辑配置文件
困难
简单的
介绍
管理计算机时,手动安装和卸载设备(例如外部 USB 驱动器或远程 NFS
或 Samba
共享)可能是一项繁琐的任务。 autofs 守护进程可以帮助我们在需要时自动挂载文件系统,并在指定的时间段后卸载它。在本教程中,我们将了解与自动安装程序相关的基本概念以及如何配置它。
Autofs安装
首先要做的就是安装 autofs
软件包。它可以在 CentOS7 和 Rhel7 官方存储库中找到,因此我们只需使用 yum 包管理器即可获取它:
$ sudo yum install autofs
下一步是启动 autofs
守护进程,并在启动时启用它:
$ sudo systemctl enable --now autofs
autofs 守护进程配置
autofs 守护进程是通过操作一些文件来配置的,每个文件都有其自己的特定用途。我们基本上要做的就是向守护进程提供一些指令,让它知道如何管理挂载点和设备(这就是我们所说的映射),以及一组可选的选项可用于改变其行为。让我们看看这些配置文件是什么以及它们的作用是什么。
/etc/sysconfig/autofs 文件
/etc/sysconfig/autofs
文件是 autofs
守护程序的主配置文件,包含其全局设置。这是 CentOS 7.5 默认安装中的文件内容:
#
# Init syatem options
#
# If the kernel supports using the autofs miscellanous device
# and you wish to use it you must set this configuration option
# to "yes" otherwise it will not be used.
#
USE_MISC_DEVICE="yes"
#
# Use OPTIONS to add automount(8) command line options that
# will be used when the daemon is started.
#
#OPTIONS=""
#
我们可以通过删除 第 13 行 处的注释并以字符串形式传递命令行参数(作为值)来修改守护程序的行为OPTIONS
变量。
让我们举个例子:假设我们想要更改守护进程自动卸载文件系统的默认时间间隔:默认值为 300 秒或 5 分钟。通过阅读 autofs 手册(automount(8)
),我们可以看到要更改此参数,我们应该使用 --timeout
选项,该选项将间隔作为参数以秒表示的时间:
-t , --timeout
Set the global minimum timeout, in seconds, until directories
are unmounted. The default is 10 minutes. Setting the timeout to
zero disables umounts completely. The internal program default
is 10 minutes, but the default installed configuration overrides
this and sets the timeout to 5 minutes to be consistent with
earlier autofs releases.
举例来说,我们想要将默认卸载超时更改为 10 分钟,这就是我们应该如何更改 /etc/sysconfig/autofs
文件:
OPTIONS="--timeout=600"
保存更改后,我们应该重新启动守护进程以使新配置生效。我们可以通过使用 systemctl
检查守护进程状态来了解如何采用新的超时选项:
$ systemctl status autofs
autofs.service - Automounts filesystems on demand
[...]
CGroup: /system.slice/autofs.service
└─6452 /usr/sbin/automount --timeout=600 --foreground --dont-check-daemon
[...]
/etc/auto.master 文件
auto.master
文件非常重要,因为它包含自动安装程序主映射
。每个映射将一个挂载点与一个配置文件相关联,其中描述了要挂载的文件系统,因此基本上描述了另一个映射。使用以下语法创建地图:
<mountpoint> <configuration file> <options>
配置告诉守护进程给定的挂载点由给定配置文件中设置的映射管理,应用提供的选项,这可以覆盖全局选项(这可能很有用) ,例如,为每个安装点提供特定的卸载超时)。让我们看一个具体的例子:如果我们看一下文件的第7行,我们可以看到下面的地图:
/misc /etc/auto.misc
此配置指定 /misc
挂载点对 /etc/auto.misc
文件中描述的映射感兴趣。让我们看看这些地图是如何配置的。
/etc/auto.misc 文件
正如我们在 /etc/auto.master
文件中看到的,/misc
挂载点与 /etc/auto.misc
配置文件关联。现在我们将检查它,以了解如何定义设备的地图。这是文件的默认内容:
#
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
[...]
用于配置的语法如下:
<key> <mount options> <filesystem>
我们必须指定的第一件事是key
。在间接映射
(我们很快就会了解不同类型的映射)的情况下,将使用此参数的值作为子目录的名称,如果该子目录不存在,则将在主挂载点,在本例中为 /misc
。因此,/dev/cdrom
设备将自动安装在 /misc/cd
目录中。
要提供的第二个元素是应应用的挂载选项列表:在此示例中,-fstype
选项与 ro
一起用于指定文件系统类型>、nosuid
和 nodev
。
最后我们必须指定文件系统的位置。在本例中,由于它是本地路径,因此必须以 :
(冒号)字符作为前缀。
对于远程 NFS
共享,我们将编写 192.168.1.39:/srv/nfs_share
,其中 192.168.1.39
是远程机器的地址(也可以使用主机名), /srv/nfs_share
是其上共享目录的路径。
当引用 samba 共享时,我们应该提供 -fstype=cifs
作为选项,以以下格式指定远程计算机 IP 和共享目录的路径:
://192.168.1.39/srv/samba_share
间接、直接和主机映射
我们之前提到过间接映射,现在让我们详细了解不同类型的映射。我们可以使用三种类型的映射:直接
、间接
和主机映射:间接映射
的示例就是我们刚刚在/etc/auto.master 文件,用于 /misc
挂载点。
映射称为间接映射,因为在配置文件(本例中为 /etc/auto.misc
)中指定的 key
参数与挂载点 (/etc /misc
),将用作相对于将安装文件系统(在我们的示例中为 :/dev/cdrom
)的安装点的目录名称。
直接映射
始终在 auto.master 文件中使用以下语法指定:
/- /etc/auto.misc
当 /-
用作地图中的挂载点时,这意味着我们正在使用直接地图。在这种情况下,与挂载点关联的配置文件中使用的语法的 key
元素必须是绝对路径。因此,在上面的例子中,我们应该写:
/cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
最后,我们可以在 /etc/auto.master 文件中的第 13 行找到一个 host map
示例:
/net -hosts
这样的映射是默认定义的;它是如何工作的?指定主机映射后,自动挂载程序会在指定挂载点(本例中为 /net)下为 /etc/hosts
中列出的每台计算机创建一个子目录,该子目录导出NFS
共享。这要归功于 /etc/auto.net
脚本,我们现在将检查该脚本。默认情况下,每个共享目录都会使用 nosuid
和 nodev
选项挂载。
/etc/auto.net 和 /etc/auto.smb 脚本
autofs
安装中包含两个非常有用的脚本:/etc/auto.net
和 /etc/auto.smb
。这些脚本基本上分别是 showmount
和 smbclient
程序的包装器,用于发现可用的 NFS 和 samba 共享。它们将生成自动安装程序可以使用的格式的结果。
/etc/auto.net
脚本可用于概览并读取 NFS 共享。我们可以通过指定要搜索的服务器的主机名或 IP 地址作为参数来调用脚本:
$ sudo /etc/auto.net 192.168.1.39
现在,想象一下找到了一个共享。该命令将返回类似于以下内容的输出:
/shared 192.168.1.39:/shared
这意味着在 ip 192.168.1.39 的机器上,/shared
目录通过 NFS 共享。根据我们在 /etc/auto.master 文件中发现的主机映射
,我们将能够访问 /net/192.168.1.39/shared
处的共享。这是因为,正如我们之前所说,当使用主机映射时,对于 /etc/hosts 文件中导出 NFS 共享的每台计算机,都会在 /net 下创建一个子目录。
/etc/auto.smb
以类似的方式工作。如果我们希望网络中的 samba 共享由自动挂载程序自动挂载,就像 NFS 共享一样,我们要做的第一件事就是将此映射添加到 /etc/auto.master
文件:
/cifs /etc/auto.smb
添加地图后,我们应该重新启动守护进程:
sudo systemctl restart autofs
此时,由于 /etc/auto.smb
脚本,对于我们网络中导出一个或多个 smb 共享的每台计算机,将在 /cifs
下创建一个目录。例如,假设在 IP 为 192.168.122.32 的计算机上,我们有一个通过 samba 共享的 /srv/samba
目录。如果我们想验证它,我们可以针对该机器的 IP 运行 /etc/auto.smb
脚本。这是输出:
$ /etc/auto.smb 192.168.122.32
-fstype=cifs,guest \
"/sambadir" "://192.168.122.32/sambadir"
如前所述,该脚本是 smbclient 的包装器,并生成可供自动挂载程序使用的输出。共享目录将在我们的本地文件系统中自动创建的 /cifs/192.168.122.32/
目录中可用:
$ ls /cifs/192.168.122.32
sambadir
惰性安装和卸载
为了优化创建的挂载点的数量,自动挂载程序使用了一种称为“延迟挂载”的技术。它不会在设备可用或发现时立即安装设备,而是等到用户尝试访问文件系统:然后才执行安装操作。卸载过程也会发生同样的情况:设备在指定的超时后自动卸载。