Centos7NFS(网络文件系统的搭建)

一、NFS简介

NFS(Network File System,网络文件系统)是历史最为悠久的文件共享协议之一,其目的是允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

理解就是一个网络磁盘,你需要把它挂载到你的磁盘上使用而已;
NFS网络文件系统;不同操作系统的机器实现数据的共享;RPC协议远程调用;
只要用的NFS的地方都要启动RPC服务;NFS是一个文件系统,RPC负责文件的传输;
nfs和rpc的关系:nfs是一个文件系统,负责管理分享的目录;rpc负责文件的传递
nfs启动时至少有rpc.nfsd和rpc.mountd2个daemon
rpc.nfsd主要是管理客户机登陆nfs服务器时,判断该客户机是否能登陆,和客户机ID信息。
Rpc.mountd主要是管理nfs的文件系统。当客户机顺利登录nfs服务器时,会去读/etc/exports文件中的配置,然后去对比客户机的权限。
协议端口:
RPC:111 tcp/udp
nfsd: 2049 tcp/udp
mountd:RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768–65535)来进行通讯 ,可以在/etc/nfsmount.conf文件中指定mountd的端口

二、服务器端NFS安装

1,首先在服务端上安装nfs-utils和rpcbind。
NFS 默认端口是:2049

查看端口是否开放/被占用:
netstat -antpu | grep 2049

yum -y install  rpcbind   支持安全NFS RPC服务的连接
yum -y install  nfs-utils   包括基本的NFS命令与监控程序

其他:查看共享磁盘空间

df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df -hl:查看磁盘剩余空间
df -h:查看每个根路径的分区大小
du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)
例如,我们使用df -h命令来查看磁盘信息, -h 选项为根据大小适当显示:

2.编辑nfs配置文件。

mkdir -p /data ###创建共享目录
vim /etc/exports
/data/  192.168.153.162 (rw,sync,no_root_squash)    
/data/表示要共享的目录   192.168.153.162 共享给谁,这里也可以写网段。  
  (rw,sync,no_root_squash)  读写、同步、不限制root用户。

这里有个地方要注意:在ip和权限之间是不能有空格的,否则会有报错提示。
当服务端修改配置文件后,我们可以不用重启服务,使用exportfs -arv即可生效
要不会出现错误:
在这里插入图片描述

其他:

 1)exportfs命令

 一般格式:  exportfs + 参数

具体参数详解:
 -a           # 全部挂载(或卸载)/etc/exports文件内的设定。
 -r           # 重新加载/etc/exports中的设置
 -u           # 卸载某一目录。
 -v           # 在export时将共享的目录显示在屏幕上。
2)关于NFS共享的常用参数
 ro                     只读访问
 rw                    读写访问
 sync                所有数据在请求时写入共享
 async              NFS在写入数据前可以相应请求
 secure             NFS通过1024以下的安全TCP/IP端口发送
 insecure          NFS通过1024以上的端口发送
 wdelay            如果多个用户要写入NFS目录,则归组写入(默认)
 no_wdelay      如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
 Hide                在NFS共享目录中不共享其子目录
 no_hide           共享NFS目录的子目录
 subtree_check   如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
 no_subtree_check   和上面相对,不检查父目录权限
 all_squash               共享文件的UID和GID映射匿名用户anonymous,适合公用目录。不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份; 
 no_all_squash         保留共享文件的UID和GID(默认)
 root_squash              加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;root用户的所有请求映射成如anonymous用户一样的权限(默认)
 no_root_squas         和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;
 root用户具有根目录的完全管理访问权限;
 anonuid=xxx            指定NFS服务器/etc/passwd文件中匿名用户的UID;要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。

3,启动rpcbind nfs服务。

nfs是网络文件系统,rpc服务用于远程过程的调用,要使用nfs服务前,需要先在服务器端先开启rpc服务,通过rpc服务告诉nfs进程传输文件数据时的端口信息,进行程序控制;所以必须成功启动rpcbind后再启动nfs-utils

systemctl start rpcbind

systemctl enable nfs  #设置开机启动
systemctl enable rpcbind #设置开机启动
systemctl start rpcbind (先启动) #启动rpcbind;必须在启动nfs-utils之前启动rpcbind!!!
systemctl start nfs #启动nfs-utils

再次查看端口2049:
netstat -antpu | grep 2049
在这里插入图片描述
**

4.修改NFS默认端口

协议端口:
RPC:111 tcp/udp
nfsd: 2049 tcp/udp
mountd:RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768–65535)来进行通讯 ,可以在/etc/nfsmount.conf文件中指定mountd的端口;
1.NFS server 端口修改
NFS server启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS sever 端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口
先看一下目前所使用的的端口情况

 rpcinfo -p localhost

在这里插入图片描述

# 在配置文件中添加以下5行内容,其他的保持不动
# vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004

备注:nfs客户端防火墙:

iptables -A INPUT -s 10.46.121.240 -p tcp -m multiport --dport 111,2049,30001:30004 -j ACCEPT
iptables -A INPUT -s 10.46.121.240 -p udp -m multiport --dport 111,2049,30001:30004 -j ACCEPT

firewall白名单

1.添加白名单
firewall-cmd --zone=public --add-port=111/tcp  --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=30001/tcp --permanent
firewall-cmd --zone=public --add-port=30002/tcp --permanent
firewall-cmd --zone=public --add-port=30003/tcp --permanent
firewall-cmd --zone=public --add-port=30004/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=30001/udp --permanent
firewall-cmd --zone=public --add-port=30002/udp --permanent
firewall-cmd --zone=public --add-port=30003/udp --permanent
firewall-cmd --zone=public --add-port=30004/udp --permanent
2.重启防火墙:
systemctl restart firewalld.service
3.查看防火墙端口
firewall-cmd --list-ports

在这里插入图片描述

重启:

systemctl restart rpcbind  &&  systemctl restart nfs

在这里插入图片描述

2.nfsd 端口修改

**
1).停止NFS

 service nfs stop

在这里插入图片描述

2).在ROOT用户下修改文件 >vim /etc/services
在这里插入图片描述

三,Lunix客户端挂载目录。

1,在挂载目录之前,需要用到showmount命令,所以要安装nfs-utils. yum install -y nfs-utils。

2,查看服务器端都共享了哪些目录。 showmount -e 192.168.153.162 可以看到
在这里插入图片描述
备注:如果出现如下错误:
在这里插入图片描述
查看服务端防火墙是否开启:

systemctl start firewalld.service  开启防火墙
systemctl stop firewalld.service  停止防火墙
systemctl restart firewalld.service  重启防火墙
systemctl disable firewalld.service 重启生效(禁用防火墙)
systemctl status  firewalld  查看防火墙状态

firewall-cmd --state 查看状态
查看端口开放情况
firewall-cmd --list-ports
netstat -ntlp 查看端口    
添加端口到防火墙
firewall-cmd --zone=public --add-port=10022/tcp --permanent
删除端口到防火墙
firewall-cmd --zone=public --remove-port=9050/tcp --permanent

在这里插入图片描述
3.创建客服端:创建共享目录

  mkdir -p /data/es

4.挂载

mount -t nfs 主机名或IP:/共享目录 /挂载点

mount -t nfs -onolock,nfsvers=3 192.168.153.162:/data/ /data/es

如果不加 -onolock,nfsvers=3 ,挂载的时候会出现各种问题,所以我们要指定nfs版本为3。
:访问本地的/data/es相当于访问192.168.153.162的共享目录/data/
注意!该方式是临时挂载,如需永久挂载请将挂载目录添加至/etc/fstab

编辑fstab

vim/etc/fstab
添加一行保存退出:
内网/外网ip:/共享的目录 /共享的目录 nfs defaults 0 0

192.168.153.162:/data/  /data/es  nfs defaults 0 0 
192.168.153.162:/data/ /data/es nfs nolock,nfsvers=3 0 0

在这里插入图片描述

5.其他: 自动挂载目录/etc/fstab详解
案例:192.168.153.162:/data/ /data/es nfs defaults 0 0
1 2 3 4 5 6 7

  1. (第1列) 需要挂载或访问的设备路径
  2. (第2列) 挂载点目录,即访问点
  3. (第3列) 系统格式(文件系统类型)
blkid 查看文件格式

在这里插入图片描述

常见的有
vfat,ntfs,fat32等windows系统格式,
xfs,ext2/3/4 ,等Linux的系统格式,
swap 是指交换分区,
auto 是指让系统自动识别文件的系统类型,一般是用于频繁格式化系统类型的光驱或者是软驱,
udf 刻录光驱,
iso9660 一般为系统镜像光盘
4. (第4列) 对配置挂载点的配置
ro: 以只读来挂载文件系统(read only)
rw: 以可读可写的属性来挂载系统
sync 和 async:对于该文件系统的输入输出应该以什么方式完成。sync的意思就是同步完成,通俗点讲,就是当你拷贝一个东西到设备或者分区中时,所有的写入变化将在你输入cp命令后立即生效,这个东西应该立马就开始往设备或者分区里面拷贝了。而如果是async,也就是输入输出异步完成的话,当你拷贝一个东西到设备或者分区中时,可能在你敲击cp命令后很久,实际的写入操作才会执行,换句话说,就是进行了缓冲处理。
虽然async是默认属性,但是对于u盘,移动硬盘这种可移动存储设备,最好还是让他们使用sync选项。
defaults: 所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser, 和 async。
一般用户没有特殊需求,直接使用defaults就可以了
5. (第5,6列: dump 和 fsck 选项 )
dump是一个备份工具,而fsck是一个文件系统扫描检查工具。
可以用man或者google获得更加详细的信息。
第5列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,一般上dump很多设置为0。
第6列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统 / 对应该字段的值应该为1,其他文件系统应该为2。若文件系统在启动时不需要扫描检查,则设置该字段为0。

以上配置则完成了自动挂载文件的配置
末行wq,保存退出后
执行mount -a , 即可完成挂载。 df -h 对挂载操作进行检查
swapon -a , 是对交换分区的启用挂载。 swapon -s 检查交换分区的情况

6.查看挂载情况
df -h 查看挂载情况。
在这里插入图片描述
7.测试NFS能否正常使用
服务器端:192.168.153.159
1.客户端:挂载点上传文件
服务器端:192.168.153.162
2.共享目录查看是否有挂载点上传的文件,有表示NFS可正常使用

二,当服务端修改配置文件后,我们可以不用重启服务,使用exportfs -arv即可生效,当然你也可以重启服务。此时,客户端需要重新挂载一下。

exportfs 命令的使用
-a :全部挂载或者卸载;
-r :重新挂载;
-u :卸载某一个目录;
-v :显示共享的目录
在使用nfs时,常用一个选项就是 -o nolock

我们还可以把要挂载的nfs目录写到client上的/etc/fstab文件中 192.168.153.162:/data/ /data/es nfs nolock,nfsvers=3 0 0 然后 mount -a 即可。

四、在windows客户端挂载

① 打开-控制面板-程序-打开或关闭windows功能-勾选NFS客户端
在这里插入图片描述
② 创建挂载点,打开dos命令行进行挂载
方法1:
1).挂载命令

挂载方法: mount  IP:/共享目录位置 + 挂载点
卸载方法: umount + 挂载点

2).打开dos窗口Win键+R 输入cmd打开控制台
在这里插入图片描述

**如果网络错误85:**更换盘符,盘符被其他硬盘占用了在这里插入图片描述

在这里插入图片描述
方法2:
打开我的电脑—》映射磁盘驱动器
我的电脑–>鼠标右键–》映射磁盘驱动器

格式:  \\ip\\共享目录

在这里插入图片描述
成功如下图
在这里插入图片描述

卸载挂载:
在这里插入图片描述

五centos7停止NFS相关服务

centos7-关闭 rpcbind 服务
1、关闭 rpcbind 服务
sudo systemctl disable rpcbind
2、关闭开机自启动
sudo  systemctl disable rpcbind
3、立即执行关闭
systemctl stop rpcbind.socket
4、 验证是否监听
netstat -anup
关闭NFS
systemctl stop nfs

六.centos7挂载出错故障排除思路:

出错故障排除思路:
① 检查共享目录的配置文件,权限、目录等
② 是否开启了防火墙,如开启了请添加规则放行相应的端口号
③ 如果是云主机,要检查安全组里的规则是否放行端口等
④ 尽量在配置文件中定义使用固定的端口号,便于添加规则
⑤ 错误如下图(原因是windows端经常会使用大的端口号导致的)
案例1:
① windows端常出现的问题:提示网络错误-53
在这里插入图片描述
解决方法:
NFS服务器有一个”在非安全模式工作(允许更高的端口号)“的选项。Windows NFS客户端经常使用的是大的端口号。你可以在你的共享项设置中添加insecure选项
例如:/data/xxx *(insecure,rw)
重启服务再次挂载就可以了
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/q908544703/article/details/124801050