一、什么是NFS网络文件系统?
1、什么是NFS?
NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的文件。可以简单的将他看做是一个文件服务器!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!NFS在文件传送或信息传送过程中依赖于RPC协议。
2、什么是RPC?
RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。NFS 服务器在启动的时候就得要向 RPC 注册,所以 NFS 服务器也是一种 RPC server!
二、Linux环境下,NFS服务器的配置
服务器:
1、下载软件并且启动服务
yum install nfs-utils
systemctl start nfs
2、配置与NFS服务器相关的防火墙策略
firewall-cmd --list-all ##查看防火墙策略
firewall-cmd --permanent --add-service=nfs ##将nfs服务加入火墙白名单
firewall-cmd --permanent --add-service=rpc-bind ##客户端访问时随即分配端口
firewall-cmd --permanent --add-service=mountd ##火墙允许远程挂载
firewall-cmd --reload ##火墙重新加载策略
3、设定nfs共享方式
vim /etc/exports
/redhatlinux *(ro,sync) ##共享目录 所有挂载点同步更新、只读挂载。
4、刷新文件及重启,使设定共享方式生效。
exportfs -rv
5、测试
客户端:
mount 172.25.254.133:/redhatlinux /mnt/nfs
这里因为我们服务器的共享方式设定为只读,因此没有写权限,不能完成创建文件的操作!
三、客户端auto触发式挂载
默认自动挂载:
1、下载服务软件启动服务
yum install autofs.x86_64 -y ##下载软件
systemctl start autofs ##启动服务
2、测试
cd /net/172.25.254.133/redhatlinux ##默认挂载目录,默认300秒不操作,自动卸载
[root@station redhatlinux]# ls
file1 file2 file3 file4 file5 file6 file7 file8 haha
进入路径后,会自动挂载,默认退出目录后300秒,自动卸载!
更改默认卸载目录时间:
1、更改配置文件及重启服务
vim /etc/sysconfig/autofs ##7.0版本,7.0以上为/etc/autofs
TIMEOUT=3 ##默认卸载时间更改为三秒
systemctl restart autofs.service
2、测试
分析:进入目录后,自动挂载,退出目录三秒后查询,已经卸载了。这样会节约服务端和客户端的系统资源!
更改默认挂载目录
我们可以看到默认的挂载目录可能不太方便我们的工作,这个目录可以更改,那么怎么做呢?
1、更改子配置文件auto.master
vim /etc/auto.master
添加:
/opt /etc/auto.redhat ##/opt为最终挂载点的所有父级目录,/etc/auto.redhat为手动创建的子配置文件,名称任意
2、创建子配置文件auto.redhat
vim /etc/auto.redhat
redhat 172.25.254.133:/redhatlinux ##redhat为最终的挂载点的最后一级目录
3、重启服务
systemctl restart autofs
4、测试
[root@station ~]# cd /opt/redhat
[root@station redhat]# ls
file1 file2 file3 file4 file5 file6 file7 file8 haha
四、nfs的有关参数
1、对某个用户特殊权限
服务器:
vim /etc/exports
/redhatlinux *(ro,sync) 172.25.254.233(rw,sync) ##设置所有人只读挂载,233读写挂载
exportfs -rv ##使设定生效
测试:
[root@station ~]# cd /opt/redhat
[root@station redhat]# ls
file1
[root@station redhat]# touch file2
[root@station redhat]# ls
file1 file2
需要注意的是,这里服务器的本地文件系统的权限需要777,否则客户端即使读写挂载也不能创建或者删除文件!
2、设置创建文件保持文件所有者,所有组。
服务器:
vim /etc/exports
/redhatlinux *(ro,sync) 172.25.254.233(rw,sync,no_root_squash)
exportfs -rv
测试:
客户端:
[root@station ~]# cd /opt/redhat
[root@station redhat]# touch file3
[root@station redhat]# ll
total 0
-rw-r--r--. 1 root root 0 Feb 22 09:46 file1
-rw-r--r--. 1 nfsnobody nfsnobody 0 Feb 23 08:29 file2
-rw-r--r--. 1 root root 0 Feb 23 08:37 file3
分析:可以看到没有设置之前,用root用户建立的文件的所有者所有组均为nfsnobody,更改后建立的文件所有者所有组均为root。
3、设置客户端建立文件的所有者所有组
服务器:
vim /etc/exports
/redhatlinux *(ro,sync) 172.25.254.233(rw,sync,anonuid=1000,anongid=1001)
exportfs -rv
客户端测试:
[root@station ~]# cd /opt/redhat
[root@station redhat]# ll
total 0
-rw-r--r--. 1 root root 0 Feb 22 09:46 file1
-rw-r--r--. 1 nfsnobody nfsnobody 0 Feb 23 08:29 file2
-rw-r--r--. 1 root root 0 Feb 23 08:37 file3
[root@station redhat]# touch file4
[root@station redhat]# ll
total 0
-rw-r--r--. 1 root root 0 Feb 22 09:46 file1
-rw-r--r--. 1 nfsnobody nfsnobody 0 Feb 23 08:29 file2
-rw-r--r--. 1 root root 0 Feb 23 08:37 file3
-rw-r--r--. 1 student redhat 0 Feb 23 08:50 file4
4、客户端指定以指定NFS版本挂载
客户端:
[root@station redhat]# vim /etc/auto.redhat
[root@station redhat]# cat /etc/auto.redhat
redhat -vers=3 172.25.254.133:/redhatlinux
[root@station redhat]# systemctl restart autofs.service
结果,可以用mount命令查看挂载的详细信息!
mount
5、在挂载时设定nfs请求超时后,一段时间后返回错误
挂载时:
mount 172.25.254.133:/redhatlinux /mnt/nfs/ -o soft
可以用mount命令查看挂载详细信息:
mount