一、AutoFS简介
Autofs是一个自动挂载文件系统的工具,它可以自动地在需要时挂载文件系统并在不需要时卸载。与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。换句话说,将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。
二、实验环境
2.1 实验平台
- VMware Workstation 17 Pro
- PNETLab 4.2.10
2.2 实验拓扑
如下图,3台主机接入到同一网络下,均可以互通,且可以访问Internet
2.2 资源规划
主机 | 角色 | 主机名 | IP地址 | 操作系统 |
Client | autofs客户端 | client | 172.16.0.100/24 | Rocky Linux 8.9 |
主机 | 用户名/密码 | 共享目录 | IP地址 |
Samba-Server | lisi/redhat | /share/samba | 172.16.0.20/24 |
NFS-Server | N/A | /share/nfs | 172.16.0.30/24 |
前提条件:接下来的实验将直接跳过服务端的配置,可参阅以下内容:
三、安装AutoFS
3.1 安装autofs软件包
[root@client ~]# yum -y install autofs
[root@client ~]# rpm -qc autofs # 查看autofs软件包的配置文件
/etc/auto.master
/etc/auto.misc
/etc/auto.net
/etc/auto.smb
/etc/autofs.conf
/etc/autofs_ldap_auth.conf
/etc/sysconfig/autofs
/usr/lib/systemd/system/autofs.service
3.2 配置文件详解
打开文件 /etc/auto.master
,您将看到类似于以下内容的内容:
root@client ~]# vim /etc/auto.master
/misc /etc/auto.misc
每一行的第一个参数为挂载目录的“基目录”,第二个参数定义要使用的模板
例如:
/mnt /etc/mnt.misc --timeout=5
定义了两个“基目录”,挂载的具体参数分别在/etc/mnt.misc
和/etc/media.misc
模板文件中,可选参数“--timeout
”是设置卸载目录的秒数,挂载目录超时未使用将自动取消挂载,将此值设置为 0
将禁用超时,则目录在第一次自动挂载以后一直处于挂载状态,除非手动取消挂载
模板文件参数:
filename -options :/device/path
第一参数定义挂载的目录,如果基目录为“/mnt”,则自动挂载后的路径为“/mnt/filename”,第二个参数是挂载的参数选项,第三个参数是挂载源
或者,可以在/etc/auto.master
中这样定义“基目录”
/- /etc/mnt.misc --timeout=5
则模板文件中可以直接写挂载路径
/mnt/filename -options :/device/path
处于生产环境中的Linux服务器,一般会同时管理许多设备的挂载操作。如果把这些设备挂载信息都写入/etc/auto.master
文件中,无疑会让主配置文件臃肿不堪,不利于服务执行效率,也不利于日后修改里面的配置内容。建议在/etc/auto.master.d/
目录中新建文件,文件名后缀必须是.autofs
,模板文件的文件名没有严格要求,但后缀建议以.misc结束。
四、参考实例
3.1 自动挂载USB设备
首先,为Client主机准备一块USB设备,因为是VMware虚拟机环境,先把USB设备插入到宿主机上,然后连接至虚拟机
查看新增的块设备
[root@client ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─rl-root 253:0 0 45.1G 0 lvm /
└─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─vgtest-lvtest 253:3 0 10G 0 lvm
sdc 8:32 0 10G 0 disk
└─sdc1 8:33 0 5G 0 part
└─vgtest1-lvtest1 253:4 0 3G 0 lvm
sdd 8:48 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sde 8:64 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sdf 8:80 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sdg 8:96 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sdh 8:112 0 10G 0 disk
sdi 8:128 0 10G 0 disk
sdj 8:144 0 10G 0 disk
sdk 8:160 1 7.5G 0 disk # /dev/sdk即是刚刚连接的USB设备
└─sdk1 8:161 1 7.4G 0 part
sr0 11:0 1 1024M 0 rom
[root@client ~]# parted /dev/sdk print # 查看设备信息
Model: Mass Storage Device (scsi)
Disk /dev/sdk: 7990MB # 容量为8G
Sector size (logical/physical): 512B/512B
Partition Table: msdos # MBR分区表
Disk Flags:
Number Start End Size Type File system Flags
1 4194kB 7990MB 7986MB primary fat32 # 只有一个分区,FAT32文件系统
查看USB设备的UUID
[root@client ~]# blkid /dev/sdk1
/dev/sdk1: UUID="A013-1EE4" BLOCK_SIZE="512" TYPE="vfat"
配置自动挂载,挂载路径为“/mnt/usb”
oot@client ~]# vim /etc/auto.master.d/usb.autofs # 编辑主配置文件
/mnt /etc/auto_usb.misc --timeout=5
[root@client ~]# vim /etc/auto_usb.misc # 编辑模板文件
usb -fstype=auto :UUID="A013-1EE4"
[root@client ~]# systemctl restart autofs.service # 重启服务
[root@client ~]# systemctl enable autofs.service # 设置服务开机自启
自动挂载测试
[root@client ~]# df -Th # 首先查看挂载情况,USB设备未挂载
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 18M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 46G 5.5G 40G 13% /
/dev/mapper/vgtest2-lvtest2 xfs 35G 283M 35G 1% /data
/dev/sda1 xfs 1014M 246M 769M 25% /boot
tmpfs tmpfs 388M 28K 388M 1% /run/user/1000
tmpfs tmpfs 388M 0 388M 0% /run/user/0
[root@client ~]# cd /mnt/usb # 直接切换到/mnt/usb目录
[root@client usb]# df -Th ./ # USB设备自动挂载上来了
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdk1 vfat 7.5G 4.5G 3.0G 61% /mnt/usb
[root@client usb]# ls # 可以看到USB设备里面的文件
'??' '????' '????' Android 'bandzip ????.zip' cache DCIM download LOST.DIR MIUI pictures 'System Volume Information' tencent ucdownloads
[root@client usb]# cd # 返回家目录
[root@client ~]#
[root@client ~]# df -Th /mnt/usb
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdk1 vfat 7.5G 4.5G 3.0G 61% /mnt/usb
##################
等待5秒超时后
##################
[root@client ~]# df -Th # 再次查看挂载情况,USB设备已自动取消挂载
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 18M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 46G 5.5G 40G 13% /
/dev/mapper/vgtest2-lvtest2 xfs 35G 283M 35G 1% /data
/dev/sda1 xfs 1014M 246M 769M 25% /boot
tmpfs tmpfs 388M 28K 388M 1% /run/user/1000
tmpfs tmpfs 388M 0 388M 0% /run/user/0
[root@client ~]# df -Th /mnt/usb # 而df命令后面直接跟/mnt/usb路径也会触发自动挂载
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdk1 vfat 7.5G 4.5G 3.0G 61% /mnt/usb
##################
等待5秒超时后
##################
[root@client ~]# ls /mnt
[root@client ~]# ls /mnt/usb # 可见,只要系统需要用到/mnt/usb这个目录,就会触发自动挂载
'??' '????' '????' Android 'bandzip ????.zip' cache DCIM download LOST.DIR MIUI pictures 'System Volume Information' tencent ucdownloads
3.2 自动挂载CD-ROM设备
Client虚机在系统启动时,已连接光驱,使用系统安装的ISO镜像,相当于已将一张系统安装的光盘放入了光驱设备中
查看块设备
[root@client ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─rl-root 253:0 0 45.1G 0 lvm /
└─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─vgtest-lvtest 253:3 0 10G 0 lvm
sdc 8:32 0 10G 0 disk
└─sdc1 8:33 0 5G 0 part
└─vgtest1-lvtest1 253:4 0 3G 0 lvm
sdd 8:48 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sde 8:64 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sdf 8:80 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sdg 8:96 0 10G 0 disk
└─vgtest2-lvtest2 253:2 0 35G 0 lvm /data
sdh 8:112 0 10G 0 disk
sdi 8:128 0 10G 0 disk
sdj 8:144 0 10G 0 disk
sdk 8:160 1 7.5G 0 disk
└─sdk1 8:161 1 7.4G 0 part
sr0 11:0 1 1024M 0 rom # /dev/sr0即是CD-ROM设备
[root@client ~]# ls -l /dev/sr0
brw-rw----+ 1 root cdrom 11, 0 Jan 1 14:10 /dev/sr0
[root@client ~]# ls -l /dev/cdrom
lrwxrwxrwx. 1 root root 3 Jan 1 14:10 /dev/cdrom -> sr0 # /dev/cdrom是/dev/sr0的软链接
配置自动挂载,挂载路径为"/media",并且希望永久挂载
[root@client ~]# vim /etc/auto.master.d/cdrom.autofs
/- /etc/auto_cdrom.misc --timeout=0
[root@client ~]# vim /etc/auto_cdrom.misc
/media -fstype=iso9660,ro,nosuid,nodev :/dev/sr0
[root@client ~]# systemctl restart autofs
挂载选项 | 作用 |
-fstype=iso9660 | 光盘的文件系统格式为iso9660 |
ro | 只读 |
nosuid | 禁止 suid 操作和设定 sgid 位 |
nodev | 挂载后,不可以打开此目录下的设备文件 |
自动挂载测试
[root@client ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 18M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 46G 5.5G 40G 13% /
/dev/mapper/vgtest2-lvtest2 xfs 35G 283M 35G 1% /data
/dev/sda1 xfs 1014M 246M 769M 25% /boot
tmpfs tmpfs 388M 28K 388M 1% /run/user/1000
tmpfs tmpfs 388M 0 388M 0% /run/user/0
[root@client ~]# cd /media
[root@client media]# ls
BaseOS EFI images isolinux LICENSE media.repo Minimal TRANS.TBL
[root@client media]# df -Th ./
Filesystem Type Size Used Avail Use% Mounted on
/dev/sr0 iso9660 2.4G 2.4G 0 100% /media
3.3 自动挂载NFS共享目录
首先我们先使用showmount
命令来查看NFS服务器的共享目录,需要先安装“nfs-utils”包
[root@client ~]# yum -y install showmount
[root@client ~]# showmount -e 172.16.0.30
Export list for 172.16.0.30:
/share/nfs * # NFS服务端的共享目录为/share/nfs
配置自动挂载,挂载路径为“/mnt/nfsfile”,超时时间为30秒
[root@client ~]# vim /etc/auto.master.d/nfs.autofs
/mnt /etc/auto_nfs.misc --timeout=30
[root@client ~]# vim /etc/auto_nfs.misc
nfsfile -rw 172.16.0.30:/share/nfs
[root@client ~]# systemctl restart autofs
自动挂载测试
[root@client ~]# cd /mnt/
[root@client mnt]# ls
[root@client mnt]# cd /mnt/nfsfile
[root@client nfsfile]# ls
README
[root@client nfsfile]# cat README
This is a shared folder for nfs
[root@client nfsfile]# df -Th ./
Filesystem Type Size Used Avail Use% Mounted on
172.16.0.30:/share/nfs nfs4 37G 2.2G 35G 6% /mnt/nfsfile
################
等待30秒超时后
################
[root@client ~]# df -Th # /mnt/nfsfile已自动取消挂载
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 18M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 46G 5.6G 40G 13% /
/dev/mapper/vgtest2-lvtest2 xfs 35G 283M 35G 1% /data
/dev/sda1 xfs 1014M 246M 769M 25% /boot
tmpfs tmpfs 388M 28K 388M 1% /run/user/1000
tmpfs tmpfs 388M 0 388M 0% /run/user/0
3.4 自动挂载Samba共享目录
首先我们先使用smbclient
命令来查看samba服务器的共享目录,需要先安装“samba-client”包
[root@client ~]# yum -y install samba-client
[root@client ~]# smbclient -L //172.16.0.20 -U lisi --password=redhat
Sharename Type Comment
--------- ---- -------
samba_share Disk share for lisi # 查看到“samba_share”这个目录
IPC$ IPC IPC Service (Samba 4.18.6)
SMB1 disabled -- no workgroup available
为了支持cifs协议挂载,还需要安装cifs-utils包
[root@client ~]# yum -y install cifs-utils
配置自动挂载,挂载路径为“/samba”,超时时间为10秒
[root@client ~]# vim /etc/auto.master.d/samba.autofs
/- /etc/auto_samba.misc --timeout=10
[root@client ~] vim /etc/auto_samba.misc
/samba -fstype:cifs,username=lisi,password=redhat ://172.16.0.20/samba_share
[root@client ~]# systemctl restart autofs.service
自动挂载测试
[root@client ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 18M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 46G 5.6G 40G 13% /
/dev/mapper/vgtest2-lvtest2 xfs 35G 283M 35G 1% /data
/dev/sda1 xfs 1014M 246M 769M 25% /boot
tmpfs tmpfs 388M 28K 388M 1% /run/user/1000
tmpfs tmpfs 388M 0 388M 0% /run/user/0
[root@client ~]# cd /samba
[root@client samba]# df -Th ./
Filesystem Type Size Used Avail Use% Mounted on
//172.16.0.20/samba_share cifs 37G 2.3G 35G 7% /samba
[root@client samba]# cd
[root@client ~]#
################
等待10秒超时后
################
[root@client ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 18M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root xfs 46G 5.6G 40G 13% /
/dev/mapper/vgtest2-lvtest2 xfs 35G 283M 35G 1% /data
/dev/sda1 xfs 1014M 246M 769M 25% /boot
tmpfs tmpfs 388M 28K 388M 1% /run/user/1000
tmpfs tmpfs 388M 0 388M 0% /run/user/0
参阅
第12章 AutoFs自动挂载服务 | 《Linux就该这么学》
文件系统的 nodev 挂载选项有什么用? – 肥叉烧 feichashao.com