Contents
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:表示客户端主机指定的挂载点。通常是一个空目录。