linux下实现文件共享:搭建nfs服务器(网络共享文件系统)

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下实现文件共享:搭建nfs服务器(网络共享文件系统)相关的知识,希望对你有一定的参考价值。

什么是NFS?工作原理

linux之间实现文件共享也可以用NFS。NFS比samba的数据优化做的更好。
NFS(Net File System)网络文件系统。

网络文件系统(NFS)是文件系统之上的一个网络抽象,
来允许远程客户端以与本地文件系统类似的方式,来通过网络进行访问。
虽然 NFS 不是第一个此类系统,但是它已经发展并演变成 UNIX系统中最强大最广泛使用的网络文件系统。
NFS 允许在多个用户之间共享公共文件系统,并提供数据集中的优势,来最小化所需的存储空间。

NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用(RPC)机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。
工作原理:
NFS的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。
服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。
NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器中“输送”出来。
文件通常以块为单位进行传输。其大小是8KB(虽然它可能会将操作分成更小尺寸的分片)。
NFS传输协议用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程地访问保存在存储设备上的数据。

其他博主总结的很好的共享原理

NFS比samba更安全

samba的端口是固定的,139,445,易被攻击
#/etc/services有各种服务信息,可以看到端口,火墙服务文件也可以看到

nfs对外开放端口是2049(目前版本)
#在/lib/firewalld/services/nfs.xml可以看到端口信息
客户端在访问nfs服务器时,
首先访问的是rpc-bind服务,rpc-bind服务给客户端随机分配端口,
#rpc-bind服务:随机分配端口的一个程序
#随机分配端口保证了安全性
然后用这个端口去访问另外一个服务mounted,得知这台主机到底有没有共享
#mounted控管linux下所有关于挂载共享的程序
查到有共享后,告诉客户端去访问2049这个端口
如此才可访问成功!

NFS基本信息

nfs-server			##服务脚本
/etc/exports		##共享配置文件

NFS的安装与启用

安装并开启:
dnf install nfs-utils -y	##安装包,既是客户端也是服务端
systemctl start nfs-server

火墙设置:
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload

测试:
showmount  -e 192.168.187.129

如图访问成功!
在这里插入图片描述

NFS配置

vim /etc/exports		##编辑文件
写入:
共享目录		共享范围(共享参数)
/sharedir		  *(ro)

exportfs -rv	#不重启只刷新!!!

测试:
mount 172.25.254.30:/sharedir  /mnt/

在这里插入图片描述

NFS配置参数

vim /etc/exports		##编辑文件

rw				##读写
ro				##只读
anonuid=1000,anongid=1000	##指定用户,用户组身份
#用的是服务端的身份,如果客户端没有,会显示id 

sync				##更改生成后同步数据到服务器,只有客户端保存后才会移交给服务器
#好处是减缓负载,但突然断电什么的就客户端的数据没了
async				##实时同步数据到服务器,解决sync的问题

no_root_squash		##root用户挂载不转换身份,在当前主机用root身份挂载,那么服务器端也是root身份
#身份默认是nobody

exportfs -rv	#不重启只刷新!!!

192.168.187.0/24网段的可以读写,剩下的只读
在这里插入图片描述
192.168.187.0/24网段的可以读写,且继承客户端的root身份,客户端服务端数据实时同步
在这里插入图片描述
刷新后设置生效
在这里插入图片描述

nfs+autofs实现自动挂载/卸载samba共享

操作类似于samba

autofs:
在客户端实现自动挂载卸载的软件
autofs的主策略文件/etc/auto.master,访问共享时的挂载策略
autofs的主配置文件/etc/autofs.conf

dnf install autofs -y			#安装autofs
systemctl enable autofs.service	#启用autofs

配置方式:
vim /etc/auto.master	#编辑主策略文件
写入:
/test				/etc/auto.nfs	#名字随意,只要是xxx.nfs以nfs结尾就可以
最终挂载点的上层目录	自动以子策略文件进行挂载
!!!最终挂载点的上层目录不需要实际存在!!!
#如果上层目录是/(根)目录,那么最终挂载点的上层目录要写成/-,尽量不要以根目录作为上层目录
#如果上层目录是/(根)目录,下面的子策略文件就的最终挂载点就要写绝对路径

编辑子策略文件(要和上面写的一致/etc/auto.samba):
vim /etc/auto.nfs
最终挂载点	挂载参数										挂载资源
nfs     -rw,vers=4      192.168.187.129:/sharedir
#vers是指定版本号,防止客户端服务器用的版本不一样挂载出现问题,此参数可以不写
#mount可以查看挂载信息,可以看到版本号
#这样自动挂载就会挂载在/test/nfs下,会自动产生这个目录,不需要我们手动创建,不用时自动卸载消失

vim /etc/autofs.conf 
将15行的timeout=300改为3	
##自动卸载时间默认300秒,我们改成3秒

重启使设置生效:
systemctl restart autofs

测试:
我们上面写的配置最终挂载点是/test/nfs
所以直接cd /test/nfs就是自动挂载了!!!
cd /root换到其他目录,过了我们设置的等待时间(上面设置了3秒)即等待资源闲置超时,挂载资源自动卸载
df可以查看挂载情况

编辑主策略文件
在这里插入图片描述
编辑子策略文件

挂载成功!
在这里插入图片描述

不想固定挂载/sharedir到/test/nfs下,想挂载/sharedir下的其他目录
mkdir /sharedir/dir{1..3}
可以在子策略文件中写入:
vim /etc/auto.nfs
*    -rw,vers=4      192.168.187.129:/sharedir/&

重启使设置生效:
systemctl restart autofs
测试和上面一个道理
比如cd /test/dir1就是自动挂载

在这里插入图片描述

以上是关于linux下实现文件共享:搭建nfs服务器(网络共享文件系统)的主要内容,如果未能解决你的问题,请参考以下文章

Win7系统下搭建NFS服务器

Linux 环境下搭建NFS服务

Linux系统开发: 搭建NFS服务器实现文件共享

Linux中详细搭建NFS服务

Linux下搭建NFS服务器

搭建NFS服务 实现Linux与Linux之间的文件共享