2.3. NFS共享服务器搭建

2.3.1. 安装NFS服务(Centos7.6)

cp -rf /etc/yum.repos.d/CentOS-Base.repo{,.bak}
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   #更换阿里源国内源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo           #改为aliyun的epel源,先备份epel本身的源
yum clean all
yum makecache
yum -y install nfs*

[root@bogon yum.repos.d]# mkdir /data

[root@bogon yum.repos.d]# cat /etc/exports
/data/ *(rw,no_root_squash,no_all_squash,sync)



第一列/data/表示需要共享的目录。
IP 表示允许哪个客户端访问。
IP 后括号里的设置表示对该共享文件的权限。
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合
公用目录。
no_all_squash 保留共享文件的 UID 和 GID(默认)
root_squash root 用户的所有请求映射成如anonymous 用户一样的权限(默认)
no_root_squash root 用户具有根目录的完全管理访问权限

Linux 客户端,如何想使用这个 NFS 文件系统,需要在客户端挂载,挂载命令为:
# 挂载前需要安装
yum install nfs-utils
mount -t nfs 192.168.1.103:/data/ /mnt

即可。


如果有报错根据错误信息排查。常见问题有 rpc 服务没有启动、防火墙没关闭、selinux
未关闭等问题



[root@bogon yum.repos.d]# service nfs restart
Redirecting to /bin/systemctl restart nfs.service

#查看nfs共享的内容
[root@bogon yum.repos.d]# exportfs
/data           <world>

#或者
[root@bogon ~]# showmount --exports
Export list for bogon:
/data *



[root@bogon yum.repos.d]# setenforce 0
[root@bogon yum.repos.d]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

#关闭防火墙
t@bogon yum.repos.d]# systemctl stop firewalld.service
[root@bogon yum.repos.d]# systemctl disable firewalld

2.3.2. nfs搭建 方式二

NFS:Network File System

功能也就是能把远程网络的文件挂载到NFS Server上,在Server上看来,客户端的挂载的目录就像自己的子目录一样,可以对它操作。所以,对于嵌入式系统的调试是很方便的。

NFS支持的功能很多,所以对应的端口号是不固定的,是随机分配的,但都是小于1024。那么客户机是怎么连接到NFS Server上去的呢?这里有一个RPC的东西来支持。
RPC:(Remote Procedure Call Protocol)

远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

RPC在NFS搭建过程钟的功能就是在Server上分配端口号,可以让客户端能从远程连接上Server。RPC固定采用111端口监听。

所以整个NFS实现的过程就是:

    Client向服务器的RPC(port 111)发出请求
    服务器注册好端口,把端口信息传回客户端
    客户端知道正确的端口后,可以连接NFS daemon


NFS 安装:nfs-utils(主要NFS功能) portmap(RPC 端口分配)

可以先rpm -qa | grep xxx 查看下,若不存在则安装!

vim /etc/exports    # 在这里可以对客户端各种权限的设置

/tmp *(rw,no_root_squash)   # 允许任何IP挂载/tmp目录

NFS 启动
/etc/init.d/portmap start   # portmap启动
/etc/init.d/nfs start       # nfs启动
service nfs reload          # 重新加载exports

netstat -tunl | grep "111"      # 查看portmap有没有启动
chkconfig –list | grep "nfs"    # 查看nfs服务是否启动
showmount -e localhost          # 查看本地共享文件系统


NFS文件挂载
mount -t nfs 127.0.0.1:/tmp /mnt           # 进入/mnt查看
mount -t nfs 10.0.0.3:/tmp  /data/img      # 远程网络挂载



/etc/exports 权限说明

/tmp         192.168.100.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
[分享目路]   [第一部主機(權限)]     [可用主機名]    [可用萬用字元]

rw    ro
sync  async
no_root_squash  root_squash
all_squash
anonuid  anongid


/tmp          *(rw,no_root_squash)
/home/public  192.168.100.0/24(rw)    *(ro)
/home/test    192.168.100.10(rw)
/home/linux   *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)




# 依赖rpc服务通信 portmap 或 rpcbind
yum install nfs-utils portmap    # centos5安装
yum install nfs-utils rpcbind    # centos6安装

vim /etc/exports                 # 配置文件
/data/images 10.10.10.10(rw,sync,no_root_squash)

service  portmap restart         # 重启centos5的nfs依赖的rpc服务
service  rpcbind restart         # 重启centos6的nfs依赖的rpc服务
service  nfs restart             # 重启nfs服务  确保依赖 portmap 或 rpcbind 服务已启动
/etc/init.d/nfs reload           # 重载NFS服务配置文件
showmount -e                     # 服务端查看自己共享的服务
showmount -a                     # 显示已经与客户端连接上的目录信息
showmount -e 110.10.10.3         # 列出服务端可供使用的NFS共享  客户端测试能否访问nfs服务
mount -t nfs 10.10.10.3:/data/images/  /data/img   # 挂载nfs

# 服务端的 portmap 或 rpcbind 被停止后,nfs仍然工作正常,但是umout财会提示: not found / mounted or server not reachable  重启服务器的portmap 或 rpcbind 也无济于事。 nfs也要跟着重启,否则nfs工作仍然是不正常的。会造成NFS客户端挂载不正常,df卡住和挂载目录无法访问。需要强制卸载后,重新挂载
umount -f /data/img/             # 强制卸载挂载目录  如还不可以  umount -l /data/img/

NFS客户端的设定

yum -y install nfs-utils
systemctl start rpcbind
systemctl enable rpcbind

为保证客户端能正常连接,如果NFS服务器上开启了防火墙,最好关闭防火墙服务。执行如下操作,关闭防火墙。

systemctl stop firewalld
systemctl disable firewalld

(1)查看NFS 服务器端提供的服务

要查看NFS服务器提供了哪些NFS服务,可以使用showmount命令,使用方法如下。
showmount  [-ea]


各个选项含义如下。
 -e:此选项后面一般跟NFS服务器的主机地址,显示NFS服务器当前已经导出的目录。
 -a:在NFS服务器上使用时,这个参数后面无须跟参数。如果在NFS客户端使用,后面须跟上NFS服务器的主机地址,用来显示已经挂载到NFS共享目录的客户端主机信息。

(2)挂载共享资源 客户端要使用NFS服务器提供的共享资源,使用mount命令挂载就可以了。

挂载格式如下。

mount -t nfs Hostname(orIP):/directory  /mountpoint
其中,各个选项的含义如下。


Hostname:用来指定NFS服务器的地址,可以是IP地址或主机名。
/directory:表示NFS服务器共享的目录资源。
/mountpoint:表示客户端主机指定的挂载点。通常是一个空目录。