文章目录
autofs(自动挂载)
自动挂载介绍
假设系统中存在这样的一条规则:就某个指定的外部设备/dev/xx 和某个挂载点 /yy 关联在一起,此时/dev/xx 是不是挂载到/yy里了,我们不考虑,但是用户只要访问/yy,系统就认为你要访问/dev/xx了,那么系统就会自动把/dev/xx挂载到/yy里去。
运行方式:
当我们访问/iso/dvd这个目录的时候,就会触发autofs,把本机的/dev/cdrom自动的挂载到/ios/dvd里去。
因为在auto.master里我们指定了父目录/iso,所以/iso里原有的东西都会被隐藏。
配置本地挂载autofs
服务安装【autofs】
自动挂载本地文件方法
创建这样的规则,首先要安装autofs:yum -y install autofs
配置文件编辑
编辑文件:vim /etc/auto.master
注:上面中的模版其实可以不要后缀的,只是有个后缀方便一眼看出文件的类型。
然后因为上图中/etc/auto.aa这个模版不存在,所以需要拷贝一份模版:cp /etc/auto.misc /etc/auto.aa
(如果你熟悉,其实可以不需要拷贝模版的,直接编辑该文件即可) ,编辑/etc/auto.aa
文件:
下面的路径设置原则是这样的,如果需要共享的路径划lv了,用lvdisplay
命令查看,把对应目录的路径复制过来即可,如果没有划lv,直接用lsblk
查看就可以了【需要在前面加一个/dev/
】
注:上图中lv文件名错误:正确应该是/dev/cl/lv3,lvdisplay
可以查看:
下面图对上面权限和lv查看的附加说明。
下面放代码展示
[root@centos76_2 ~]# vim /etc/auto.aa
#
# 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这行是默认存在的,可以参考这行添加,摈弃可以不用注释掉
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
file1 -fstype=xfs,rw :/dev/centos/home
#子目录文件名 设置文件格式和权限 这是路径,填写方式上面已经说明了
使用本地挂载
-
创建一个文件用来挂载共享文件 【和上面配置本地挂载同一台服务器】
mkdir /test
-
测试 :先在光盘没有挂载的情况下在父目录中随意创建几个文件,待会访问的时候看父目录中内容是否会被隐藏,创建好文件以后重启服务并设置开机启动:
-
systemctl restart autofs
,systemctl enable autofs
:
-
重新进入父目录【
/etc/auto.master
里面定义的父目录】,并且查看是否有文件挂载:mount |grep -v grep |grep -v auto | grep 设备名
-
虽然现在里面什么都没有,但我们可以直接访问子目录,如果是懵的,看下图【这是第二次做的实验图,和下面实验图没有关系,只是放这解释这个位置关系而已】
-
现在访问
/test/file
目录【能看到定义目录的内容,并且也自动挂载这个文件了】【重启autofs服务,重新进目录这里面的记录又没了】:
上面的是本地挂载的方法。 -
下面是我第二次跟着上面做的实验,这一次使用访问均正常,但是挂载没内容,不知道为啥【问题记录,以后能处理了来记录原因】
[root@centos76_2 test]# systemctl restart autofs
[root@centos76_2 test]# cd -
/root
[root@centos76_2 ~]# cd /test
[root@centos76_2 test]# ls
[root@centos76_2 test]# cd file1
[root@centos76_2 file1]# ls
andy ccx ccx1 ccx2 ccx3 centos CentOS-7.6-x86_64-DVD-1810.iso hero1 hero2 superman1 superman2
[root@centos76_2 file1]# pwd #路径是配置路径
/test/file1
[root@centos76_2 file1]#
[root@centos76_2 file1]# ls /home/ #内容和/home一致没问题
andy ccx ccx1 ccx2 ccx3 centos CentOS-7.6-x86_64-DVD-1810.iso hero1 hero2 superman1 superman2
[root@centos76_2 file1]# df -Th | grep test #就是没有自动挂载,奇了个怪了
[root@centos76_2 file1]#
自动挂载NFS共享方法
nfs服务端配置
nfs的服务端配置我这边博客有详细说明的,去这看:NFS【文件共享】服务端配置和客户端使用详细说明【包含基于kerberos的nfs配置】
下面我只是做一下简单说明。
服务安装
安装nfs服务:yum -y install nfs*
开启并设置开机自启:systemctl start nfs
,systemctl enable nfs
,查看状态是否是active:systemctl status nfs
:
配置文件编辑
编辑分享文件:vi /etc/exports
,在里面定义分享文件:目录*(rw,sync)
注:*是所有ip均可访问 也可以指定ip,如: 目录 0.0.0.0(rw,sync)
重启服务:systemclt restart nfs
查看分享文件:showmount -e 当前ip
【如果出现报错:clnt_create:RPC:Unknown host ,需要添加解析:vi /etc/hosts
, 添加ip地址和主机名即可】
报错后添加解析截图:
新建共享目录:mkdir /bb
,然后把外挂磁盘 挂载到当前目录 mount *** /bb
【比如挂载镜像到这个目录,如果没有挂载的也可以不用挂载】,这里为了方便演示,就在/bb中随意新建几个文件即可:
nfs普通挂载
放这呢,只是让你知道一下nfs的普通挂载方式而已。这个是需要手动卸载的,卸载方法是umount 挂载点
[root@centos76_1 ~]# mkdir /date
[root@centos76_1 ~]# showmount -e 192.168.59.129
Export list for 192.168.59.129:
/bb *
/root/ccx 192.168.59.130,192.168.59.128
[root@centos76_1 ~]# mount 192.168.59.129:/root/ccx /date
[root@centos76_1 ~]# df -Th| grep date
192.168.59.129:/root/ccx nfs4 50G 3.7G 47G 8% /date
[root@centos76_1 ~]#
[root@centos76_1 ~]# umount /date #卸载
[root@centos76_1 ~]# mount 192.168.59.129:/root/ccx /date #挂载已经没了
[root@centos76_1 ~]#
客户端自动挂载配置
安装服务【autofs】
到客户端服务器设置:
先安装autofs:yum -y install autofs
编辑配置文件
-
这里面涉及的父目录和模版同上面的”使用本地挂载“,如果下面看不懂的,上去看“使用本地挂载”里面的说明,这就不做详细说明了
-
编辑:
vi /etc/auto.master
——/-
(意思是不定义父目录)/etc/auto.xx
(也可以不要后缀)
-
后缀名如果不是.misc的,cp一份模版:
cp /etc/auto.misc /etc/auto.xx
(熟悉可以不用cp模版,直接手敲)
然后打开这个模版:vi /etc/auto.xx
:
-
完整代码展示
[root@centos76_1 test]# vim /etc/auto.master
# 下面第二行为我创建的,/-是没有父目录。
/misc /etc/auto.misc
/- /etc/auto.xx
[root@centos76_1 test]# cp /etc/auto.misc /etc/auto.xx #拷贝模版
[root@centos76_1 test]# vim /etc/auto.xx
#添加格式如下第二行,cd行可以不用注释的
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
/xx/ns -fstype=nfs,rw 192.168.59.129:/bb
自动挂载nfs
- 这个其实和本地挂载是一样的,只是类别变成nfs了而已。
- 为了看出区别:先
mkdir /xx
并在里面生成若干文件,然后重启服务:systemctl restart autofs
,就会自动生成定义的文件了,访问的就是分享ip中定义文件中的内容
[root@centos76_1 test]#
[root@centos76_1 test]# mkdir /xx
[root@centos76_1 test]# cd /xx
[root@centos76_1 xx]# touch xx{1..5}
[root@centos76_1 xx]# ls
xx1 xx2 xx3 xx4 xx5
[root@centos76_1 xx]# df -h | grep bb #现在没有bb挂载的挂载点
[root@centos76_1 xx]# systemctl restart autofs
[root@centos76_1 xx]# cd - #如果不重新进入这个目录,可能会看不到共享的目录
/
[root@centos76_1 /]# cd -
/xx
[root@centos76_1 xx]# ls #已经有ns这个文件了【如果没有直接ls ns 就会出现了】
ns xx1 xx2 xx3 xx4 xx5
[root@centos76_1 xx]# cd ns
[root@centos76_1 ns]# ls #文件是共享的没错
bb1 bb2 bb3 bb4 bb5 bb6
[root@centos76_1 ns]# df -h | grep bb #自动挂载了
192.168.59.129:/bb 50G 3.7G 47G 8% /xx/ns
[root@centos76_1 ns]#
自定义自动挂载的卸载时间【客户端上设置】
-
nfs优势
- 使用cifs【samba】方式的多用户挂载,不论所否使用共享资源,共享目录都挂载着的【nfs的手动挂载也是一直挂载的】,这样很占用内存。
- 想要达到使用共享资源时,共享目录自动挂载,而在不使用共享资源时,共享目录便会自动卸载。
- 而 cifs【samba】是无法做到的,此任务可以由nfs文件系统实现【自动挂载支持nfs】。
-
上面的自动挂载配置完毕以后
#默认300秒之后会自动卸载 -
修改默认时间
文件是:/etc/sysconfig/autofs
[root@client ~]# vim /etc/sysconfig/autofs
#最下面新增该行内容
TIMEOUT=5 ##设定自动卸载等待时间,单位默认是 秒
[root@client ~]# systemctl restart autofs.service #重启生效
- 测试该时间
[root@centos76_1 ~]# tail -n 1 /etc/sysconfig/autofs #新增卸载时间5秒
TIMEOUT=5
[root@centos76_1 ~]#
[root@centos76_1 ~]# systemctl restart autofs.service #重启生效
[root@centos76_1 ~]# df -Th | grep bb # 现在未挂载
[root@centos76_1 ~]# cd /xx/ns/ #进入挂载目录【上面配置过】
[root@centos76_1 ns]# ls
bb1 bb2 bb3 bb4 bb5 bb6
[root@centos76_1 ns]# df -Th | grep bb # 已经能看到自动挂载信息了
192.168.59.129:/bb nfs4 50G 3.7G 47G 8% /xx/ns
[root@centos76_1 ns]#
[root@centos76_1 ns]# cd #退出该目录
[root@centos76_1 ~]# # 静待5秒以后
[root@centos76_1 ~]# df -Th | grep bb # 再次查看 挂载已经没了
[root@centos76_1 ~]#
[root@centos76_1 ~]# cd /xx/ns/ #又进来共享目录
[root@centos76_1 ns]# ls
bb1 bb2 bb3 bb4 bb5 bb6
[root@centos76_1 ns]#
[root@centos76_1 ns]# df -Th | grep bb #挂载信息又出来了
192.168.59.129:/bb nfs4 50G 3.7G 47G 8% /xx/ns
[root@centos76_1 ns]#
/etc/auto.master中模版易踩坑说明
父目录和子目录关系如下图。
- 需要注意的是:如果
/etc/auto.master
中如果定义了父目录,后面模版文件中就不能重复/etc/auto.master
的父目录,而且不能有/
【如上图的/test和file1,这样写完整路径就是:/test/file1
了】 ,如果父目录中是/-
模版中才可以有/
开头的详细目录。 - 如:规则是这样的,比如
/etc/autu.master
重定义了一个目录/father
。我们去模版中定义一个son
,其实完整的路径就是/father/son
。
下面以nfs挂载为例:
[root@compute1 ~]# systemctl restart autofs #重启autofs服务
[root@compute1 ~]#
[root@compute1 ~]# grep father /etc/auto.master #配置了/father父目录
/father /etc/nfs
[root@compute1 ~]# cat /etc/nfs #规则中创建了son这个子目录
#开头son并没有加 /
son -fstype=nfs,rw 10.233.3.225:/aa
[root@compute1 ~]# df -h # 现在是没有/aa这个挂载点的
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 50G 4.9G 46G 10% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 3.8G 57M 3.8G 2% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/sda1 1014M 188M 827M 19% /boot
tmpfs 777M 0 777M 0% /run/user/0
[root@compute1 ~]#
[root@compute1 ~]# cd /father/
[root@compute1 /father]#
[root@compute1 /father]# ls # 父目录中也没有文件
[root@compute1 /father]#
[root@compute1 /father]# cd son # 进入子目录
[root@compute1 /father/son]#
[root@compute1 /father/son]# ls #可以看到nfs分享的/aa 文件中的内容了
1test 2test 3test 4test 5test
[root@compute1 /father/son]#
[root@compute1 /father/son]# df -h #也可以看到/aa挂载点
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 50G 4.9G 46G 10% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 3.8G 57M 3.8G 2% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/sda1 1014M 188M 827M 19% /boot
tmpfs 777M 0 777M 0% /run/user/0
10.233.3.225:/aa 50G 6.8G 44G 14% /father/son
[root@compute1 /father/son]#
所以这个挂载方式就很适用于配置网络用户的家目录(为了节约空间,把家目录配置存储服务器上,然后在对应服务器上配置家目录即可)【配置方法参考上面即可】
比如,我们在某台服务器上的/home/guests目录中配置了成百上千个用户的家目录,我们要使用的时候就只需要在对应的用户上配置一个自动挂载即可!
如下配置ldapuser0用户的家目录【这是一个网络用户】
[root@server0 guests]# grep test /etc/auto.master
/home/guests /etc/test # 前面父目录用来指定家目录存放路径
[root@server0 guests]# cat /etc/test
#在这开头指定用户名 即可(这里的目录是客户端本地挂载点)
ldapuser0 -fstype=nfs,rw classroom.example.com:/home/guests/ldapuser0
#classroom是服务端:/home是服务器的挂载点
[root@server0 guests]#