一:NFS网络文件系统的简介
概念:
NFS(Network File
System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
文件系统是内核空间的:网络文件系统是在内核上的一个映射
用 途:
网络上与他人共享目录和文件
优 点
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
扩展:
NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote
procedure call
简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。
二:NFS网络文件系统的部署
当我们在nfs服务器设置好一个共享目录/meng(客户端看到的不一定是这个名字,因为我们可以改变客户端看见共享目录的名称)后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。因为挂载在本地的/data目录,其实就是服务器端的/data目录。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。
前提:这个实验需要两个虚拟机
为了实验环境纯净,我们将两个虚拟机reset
配置ip,修改主机名
用ssh连接:
两台虚拟机配置yum源
配置本地解析:
实验步骤如下:
注意事项:
sync代表内存数据与硬盘里的数据的是同步的(可靠性高)
async不实时同步,会使写的效率提高(响应速度快)可靠性低
nfs不需要重启,用参数exportfs -rv更新(重启之后客户端挂载就出问题了,因为重启就有一个空档期,客户端如果在写,就会一直访问,这个时候会出问题,如果客户端不用,可以重启但是不建议。)
在服务端:
yum install nfs-utils -y
systemctl stop firewalld
vim /etc/exports
在里面写入
/mnt 172.25.254.0/24(ro,async) 172.25.254.0/24这个网段都可以映射到,172.25.254.206:/mnt只读挂载,不实时同步,为了实验效果明显,我们采用的是async
关闭防火墙
systemctl start nfs-server
systemctl status nfs-server
exportfs -rv
更新/加载
在客户端:
yum install nfs-utils -y
showmount -e 172.25.254.206
会看到以下内容,映射成功
Export list for 172.25.254.206:
/mnt 172.25.254.0/24
mount 172.25.254.206:/mnt/ /mnt
df (会看到挂载上了)
cd /mnt
ls
touch file (不能建立文件,因为是只读挂载)
touch: cannot touch ‘file’: Read-only file system
cd - 退出共享文件系统
umount /mnt 卸载
进行读写挂载
可以建立文件
注意:如果不关闭防火墙的话,是映射不到的,除非执行以下步骤
firewall-cmd --permanent --add-service=nfs 开启nfs服务
firewall-cmd --permanent --add-service=rpc-bind 给客户端随即分配端口的一个工具
firewall-cmd --permanent --add-service=mountd 在服务端开启,客户主机挂载的时候需要的一个服务
firewall-cmd --reload
三:NFS网络文件系统管理
参数介绍:
anonuid=1001,anongid=1001 指定转换为1001这个用户身份,1001这个是服务端的
no_root_squash 谁管理用谁的身份并且anonuid不生效(沿用客户端自己的用户身份)
all_squash 身份全部转换(这个在的时候no_root_squash不生效,anonuid生效,去使用服务端的客户身份,如果不指定anonuid,就沿用服务端的匿名身份)
anonuid=1001,anongid=1001 参数效果
no_root_squash 参数效果
all_squash 参数效果
在客户端查看
在服务端查看
我们发现,每次看这个共享目录里面的东西,都要我们手动的进行挂载,卸载,这样不仅麻烦,而且在我们一不小心忘记卸载的时候还浪费挂载空间,有没有什么办法,能让它自己进行挂载与卸载呢?为了解决这个问题,我们了解一下autofs服务。
四:autofs服务(可以使NFS系统和存储分离)。
autofs:自动挂载器
自动挂载器是一个监视目录的守护进程,并在目标子目录被引用时,自动执行预定义的NFS挂载 自动挂载器由autofs服务脚本管理
自动挂载器由auto.master配置文件进行配置,该文件引用了一个按惯例称作/etc/auto.misc或其他类似名称的二级配置文件(子策略文件)
<1>自动挂载与卸载
在客户端:
yum install autofs -y (安装完会看到autofs软件包的具体信息)
rpm -qc autofs.x86_64 1:5.0.7-40.el7去查看它的配置文件
7.0以及7.0之前redhat版本/etc/sysconfig/autofs
7.1renhat版本或者autofs软件包5/6以上,以后的文件就是/etc/autofs.conf
vim/etc/sysconfig/autofs
将时间修改为10秒(方便实验) (默认三百秒)
ll -d /net/此时没有这个目录 默认共享文件系统挂载点
systemctl start autofs.service
systemctl enable autofs.service
ll -d /net/ 有了这个目录
cd /net/172.25.254.206/mnt/
ls 查看到了东西
df 发现自动挂载上了
cd - (退出这个目录,相当于不用了)
十秒过后,在去查看
df (发现自动卸载了)
<2>更改共享文件系统挂载点
修改主策略文件:vim /etc/auto.master
在这个加入以下内容
/mnt /etc/auto.nfs (/mnt是挂载目录的上一层目录,子策略文件名称可以自定义,比如/etc/westos.lee,但是为了规范,我们写成/etc/auto.nfs )
vim /etc/auto.nfs 子策略文件(挂载参数在子策略文件指定)
在里面可以写入
westos 172.25.254.206:/mnt
systemctl restart autofs
此时进入cd /mnt/westos
df
发现挂载点变成了/mnt/westos
再退出,十秒之后自动卸载
vim /etc/auto.nfs 也可以在里面写入
westos -ro,vers=3 172.25.254.206:/mnt
此时进入cd /mnt/westos
df
mount
发现是只读挂载,vers=3
再退出,十秒之后自动卸载
<3>不同用户进不同挂载点
因为我们发现,我们建立的文件,大家都可以看,这从保密性来说不合理,也不安全,为了解决这个问题,我们进行以下步骤:
实验步骤如下:
在服务器的/mnt建立目录westos{1…3},并建立各自的文件
在客户端:
vim /etc/auto.nfs
在里面写入
* -ro,vers=3 172.25.254.206:/mnt/&
systemctl restart autofs
cd /mnt/westos1
df
发现172.25.254.206:/mnt/westos1 挂载在/mnt/westos1上
cd /mnt/westos2
df
发现172.25.254.206:/mnt/westos2 挂载在/mnt/westos2上
westos3同理
退出这个目录,十秒之后自动卸载