一、NFS介绍
NFS(网络文件系统)
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
中文名:网络文件系统 外文名:Network File System
用 途:网络上与他人共享目录和文件
优 点:节省磁盘空间
用 途:共享文件
好处:以下是NFS最显而易见的好处
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
组成
NFS体系至少有两个主要部分:
一台NFS服务器和若干台客户机,如上图所示。
客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。
在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。
应用
NFS 有很多实际应用。下面是比较常见的一些: - 多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
- 在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
- 不同客户端可在NFS上观看影视文件,节省本地空间。
- 在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。
NFS是运行在应用层的协议。随着NFS多年的发展和改进,NFS既可以用于局域网也可以用于广域网,且与操作系统和硬件无关,可以在不同的计算机或系统上运行。
配置
NFS的配置过程相对简单。这个过程只需要对/etc/rc.conf文件作一些简单修改。
1 在NFS服务器这端,确认/etc/rc.conf 文件里头以下开关都配上了:
rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"
只要NFS服务被置为enable,mountd 就能自动运行。
2 在客户端一侧,确认下面这个开关出现在 /etc/rc.conf里头:
nfs_client_enable="YES"
/etc/exports文件指定了哪个文件系统 NFS应该输出(有时被称为“共享”)。 /etc/exports里面每行指定一个输出的文件系统和哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项开关也可以被指定。
NFS服务可以实现其中某一台机器更新文件,另外几台也会实时的去更新
NFS原理图
RPC服务在centos5版本和centos5之前的版本叫做portmap,在centos6和centos7中修改服务名称叫做rpcbind
NFS服务虽然它启动了服务,但是它不监听端口,最终监听端口实现tcp/ip通信的这个过程是由rpcbind服务所产生的RPC协议实现的,rpcbind会监听111端口
NFS服务需要借助RPC协议
二、NFS服务端安装配置
安装NFS服务需要在两台机器上分别安装客户端和服务端(说明:linux-01服务端IP:192.168.238.128 linux-02客户端IP:192.168.238.130)
服务端机器上需要安装 nfs-utils 和 rpcbind 两个包
#yum install -y nfs-utils rpcbind
#vim /etc/exports //编辑/etc/exports 文件,在里面加入如下一行内容
/home/nfstestdir #192.168.238.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#mkdir /home/nfstestdir //启动服务之前要先创建分享的目录nfstestdir
#chmod 777 /home/nfstestdir //修改目录权限为777,修改777权限的目的是为了方便做实验
#systemctl start rpcbind //启动rpcbind服务
#ps aux |grep rpc 或者 # netstat -lntp 查看rpcbind服务是否启动或者111端口是否被监听
#systemctl start nfs //启动nfs服务
#ps aux |grep nfs //查看nfs服务是否起来
#ps aux |grep rpc //可以看到rpc.statd [rpciod] rpc.mountd rpc.idmapd 这几个服务都起来了
#systemctl enable nfs //nfs服务开机启动
客户端也需要安装 nfs-utils 包
#yum install -y nfs-utils
#systemctl start rpcbind //启动rpcbind服务
#netstat -lntp //查看111端口是否启动
三、NFS配置选项
#cat /etc/exports //下面是对exports文件进行详细解释
/home/nfstestdir 192.168.238.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
rw 是读写,read和write的意思
ro 是只读,read和only的意思
sync 是同步模式,内存数据实时写入磁盘,但这样会相应的降低磁盘的效率
async 是非同步模式,每隔一段时间会把数据刷到磁盘里去,好处是能够保证磁盘的效率,不好的是如果断电,数据会丢掉一小部分
no_root_squash 是客户端挂载NFS共享目录后,root用户不受约束,权限很大,比如使用root用户去共享目录下读写文件时,它不受限制,相等于root在本地的磁盘上读写
root_squash 与上面的选项相对,客户端上的root用户受到约束,被限定成某个普通用户
all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
#showmount -e 192.168.238.128 //假如知道一台机器做了NFS的服务,想查看有没有权限,可以使用showmount -e 命令来查看
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) //报错
报错原因是 不能和NFS服务端的rpcbind的111端口通信,可能是NFS服务端的rpcbind服务没开,也可能是防火墙导致,需要暂时关闭客户端和服务端的防火墙(防火墙放行111端口不一定客户端和服务端能进行通信,因为它的端口不固定),并且selinux也要关闭
#systemctl stop firewalld //记得是服务端和客户端的防火墙都必须关闭
#getenforce //查看selinux是否关闭
#setenforce 0 //临时关闭selinux
#showmount -e 192.168.238.128
上图可以看到远程服务端192.168.238.128这台机器共享的目录是/home/nfstestdir ,对192.168.238.0/24这个IP段共享
#mount -t nfs 192.168.238.128:/home/nfstestdir /mnt/ //mount -t nfs 服务端IP:服务端共享目录 挂载的目录
#df -h //挂载完之后查看下是否挂载成功
在客户端挂载的目录/mnt下创建随便创建一个文件,验证下这个文件是否实时同步到服务端的共享目录/home/nfstestdir/下面去
客户端操作:随意在挂载点/mnt目录下创建一个test.111文件
服务端验证:可以看到是实时同步的
因为在之前/etc/exports配置文件中定义过anonuid=1000,anongid=1000,意思就是一旦挂载了NFS共享的目录,不管用哪一个用户来操作,它都会以1000uid和1000gid的用户反映过来,属主和属组都是1000
/home/nfstestdir 192.168.238.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#id user1 //可以使用id 用户名在客户端和服务端来进行验证
uid=1000(user1) gid=1000(user1) groups=1000(user1),1005(grp2),1012(grp1)
原文地址:http://blog.51cto.com/13669226/2132326
时间: 2024-10-10 15:35:43