Autofs
mount是用来挂载文件系统的,可以在系统启动的时候挂载也可以在系统启动后挂载。对于本地固定设备,如硬盘可以使用mount挂载;而光盘、软盘、NFS、SMB等文件系统具有动态性,即需要的时候才有必要挂载。光驱和软盘我们一般知道什么时候需要挂载,但NFS和SMB共享等就不一定知道了,即我们一般不能及时知道NFS共享和SMB什么时候可以挂载。而Autofs服务就提供这种功能,好像Windows中的光驱自动打开功能,能够及时挂载动态加载的文件系统。免去我们手动挂载的麻烦。要实现光驱,软盘等的动态自动挂载,需要进行相关的配置。
Autofs的简介
Autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。将信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而Autofs服务程序则是在用户需要使用该文件系统时才会动态挂载,从而节约了网络资源和服务器硬件资源的开销。
Autofs的工作原理
Autofs 是一项可自动挂载相应文件系统的客户端服务,以下是协同工作以完成自动挂载的组件:
- automount 命令
- autofs 文件系统
- automountd 守护进程
自动挂载服务 svc:/system/filesystem/autofs 是在系统启动时调用的,它可读取主映射文件 auto_master 以创建最初的一组 autofs 挂载。这些 autofs 挂载在启动时不会自动挂载。这些挂载是一些点,以后将会在这些点之下挂载文件系统。这些点也称为触发节点。
设置 autofs 挂载后,这些挂载可以触发在其下挂载文件系统。例如,当 autofs 收到对当前尚未挂载的文件系统的访问请求时,autofs 会调用 automountd,实际上由该命令挂载请求的文件系统。
初始挂载 autofs 挂载后,必要时会使用 automount 命令更新 autofs 挂载。该命令将比较 auto_master 映射中的挂载列表和挂载表文件 /etc/mnttab中的已挂载文件系统的列表。然后,automount 会做出相应更改。该进程允许系统管理员更改 auto_master 中的挂载信息,并使 autofs 进程可以使用这些更改,而无需停止并重新启动 autofs 守护进程。挂载文件系统后,在自动取消挂载文件系统之前,进一步进行访问不需要 automountd 执行任何操作。与 mount 不同,automount 并不会从 /etc/fstab 文件(该文件特定于每台计算机)中读取要挂载的文件系统列表(在NFS这类网络文件系统中,配置在/etc/fstab 里无法达到开机自启的目的,因为电脑开机会去读/etc/fstab ,但此时网络并未启动,所以无法达到开机挂载的目的)。在域中或在计算机上,automount 命令是通过名称空间或本地文件进行控制的。
Autofs的工作方式
自动挂载守护进程 automountd 是在引导时由服务 svc:/system/filesystem/autofs 启动的。此服务还运行 automount 命令,该命令读取主映射并安装 autofs 挂载点。
Autofs 是支持自动挂载和取消挂载的内核文件系统。
请求访问 autofs 挂载点处的文件系统时,将发生下列情况:
- Autofs 拦截请求。
- Autofs 将消息发送到 automountd,以便挂载请求的文件系统。
- automountd 在映射中查找文件系统信息,创建触发节点并执行挂载。
- Autofs 允许继续处理被拦截的请求。
- 当文件系统在一段时间内没有活动后,Autofs 将取消挂载该文件系统。
注:不应手动挂载或取消挂载通过 autofs 服务管理的挂载。即使手动操作成功,autofs 服务也不会检查是否已取消挂载该对象,从而可能导致不一致。重新引导时将清除所有 autofs 挂载点。
Autofs如何启动导航进程(主映射)
automount 命令在系统启动时读取主映射,主映射中的项包括直接映射名或间接映射名、映射路径和映射的挂载选项。项的具体顺序并不重要,automount 会将主映射中的项与挂载表中的项进行比较,以生成最新列表。
Autofs的挂载过程
触发挂载请求时,autofs 服务执行的具体操作取决于自动挂载程序映射的配置方式。一般情况下,挂载过程对于所有挂载都是相同的。但是,最终结果会因指定的挂载点和映射的复杂性而异。从 Solaris 2.6 发行版开始,也对挂载过程进行了更改,使其包括触发节点的创建。
Autofs的优点
Autofs与Mount/Umount的不同之处在于,它是一种看守程序。如果它检测到用户正试图访问一个尚未挂接的文件系统,它就会自动检测该文件系统,如果存在,那么Autofs会自动将其挂接。另一方面,如果它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动将其卸载。因此一旦运行了Autofs后,用户就不再需要手动完成文件系统的挂接和卸载。
综上所诉,总结了以下两个优点:
-
设置开机不一定要挂载的目录,当用的时候才实现自动挂载。
-
用户不使用自动挂载的目录一段的时间,会自动卸载。(默认时间为5分钟)
Autofs的安装
准备工作:配置yum源,详情可见 yum的配置使用
[root@yqh ~]# yum -y install autofs
[root@yqh ~]# rpm -qa | grep autofs
libsss_autofs-2.2.3-20.el8.x86_64
autofs-5.1.4-43.el8.x86_64
Autofs的启动
[root@yqh ~]# systemctl start autofs
//使用enable --now可以设置为开机自动启动,并且立刻启动
[root@yqh ~]# systemctl enable --now autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.
Autofs的配置
如果把挂载信息都写入到autofs服务的主配置文件中,会使主配置文件臃肿不堪,不利于管理和维护。因此在autofs的主配置文件中按照"挂载目录的上层目录子配置文件"的格式填写,具体的挂载信息写入到子配置文件中,方便日后管理和维护。
主配置文件auto.master
autofs需要从/etc/auto.master
文件读取配置信息,主要用于指定文件系统的挂接点
挂载目录的上层目录 子配置文件
/media /etc/auto.misc
子配置文件auto.misc
主要用于为auto.master提供挂接参数
注:可以任意命名,以.misc结尾即可,需在主配置文件中指定该文件。
挂载目录 挂载文件类型及权限 设备名称
cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/sr0
#注:光盘设备的挂载目录为/media/cdrom,-fstype=ios9660表示以光盘格式挂载,ro、nosuid及nodev是挂载使用的权限,/dev/cdrom是挂载的设备名称。
Autofs的使用
实现光盘自动挂载
//查看光盘是否挂载
[root@yqh cdrom]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 883M 0 883M 0% /dev
tmpfs 901M 0 901M 0% /dev/shm
tmpfs 901M 8.6M 892M 1% /run
tmpfs 901M 0 901M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 1.5G 16G 9% /
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 181M 0 181M 0% /run/user/0
//配置主配置文件
[root@yqh ~]# vim /etc/auto.master
/media /etc/auto.misc
//配置子配置文件
[root@yqh ~]# vim /etc/auto.misc
cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
//重启服务
[root@yqh ~]# systemctl restart autofs
//进入/media查看是否有cdrom文件
[root@yqh ~]# cd /media/
[root@yqh media]# ls
//虽然没有cdrom文件夹,但是仍然可以进入
[root@yqh media]# cd cdrom
[root@yqh cdrom]# ls
AppStream EULA images RPM-GPG-KEY-redhat-beta
BaseOS extra_files.json isolinux RPM-GPG-KEY-redhat-release
EFI GPL media.repo TRANS.TBL
//进入cdrom后发现光盘自动挂载上了
[root@yqh cdrom]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 883M 0 883M 0% /dev
tmpfs 901M 0 901M 0% /dev/shm
tmpfs 901M 8.6M 892M 1% /run
tmpfs 901M 0 901M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 1.5G 16G 9% /
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 181M 0 181M 0% /run/user/0
/dev/sr0 7.9G 7.9G 0 100% /media/cdrom