NFS(Network File System)即网络文件系统,它容许网络中的计算机之间经过网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用能够透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件同样。web
RPC,基于C/S模型。程序可使用这个协议请求网络中另外一台计算机上某程序的服务而不需知道网络细节,甚至能够请求对方的系统调用。centos
对于Linux而言,文件系统是在内核空间实现的,即文件系统好比ext三、ext4等是在Kernel启动时,之内核模块的身份加载运行的。安全
NFS自己的服务并无提供数据传递的协议,而是经过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。经过client端和sever端端口的链接来进行数据的传输。在启动nfs以前,首先要确保rpc服务启动。服务器
原理以下:网络
而后client端经过获取的NFS端口来创建和server端的NFS链接并进行数据的传输。app
如下为启动各服务的做用异步
rpc:远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。(中介)async
portmapper:负责分配rpc server的端口,并在client端请求时,负责响应目的rpc server端口返回给client端,工做在tcp与udp的111端口上。tcp
mountd:是nfs服务的认证服务的守护进程,client在收到返回的真正端口时,就会去链接mountd,认证取得令牌。ide
nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并获得调用结果响应给用户,工做在tcp和udp的2049端口。
idmapd:是NFS的一个程序,用来负责远程client端建立文件后的权限问题。
quotad:用用于实现磁盘配额,当client端挂载nfs后能够限制磁盘空间的大小。
I:安装NFS和rpc
yum install -y rpc-bind nfs-utils
【安装nfs服务】
II:安装rpcbind
yum install -y rpcbind
【安装rpc服务】
#### 练习题 ####
/data01/w 10.0.0.41主机挂载(可读可写,数据同步,全部用户都要进行身份转换)
/data01/r 172.16.1.0/24网段主机挂载(只读权限,数据异步传输,全部用户不要进行转换)
当将同一目录共享给多个客户机,但对每一个客户机提供的权限不一样时,能够这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
第一列,能够共享的目录,共享到网络的文件系统
第二列,可访问主机
172.16.1.7 ----指定IP地址的主机
nfsclient.test.com------指定域名的主机
172.16.1.0/24-------指定网段中的全部主机
* ----------表明全部主机
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,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的全部请求映射成如anonymous用户同样的权限(默认)
no_root_squas root用户具备根目录的彻底管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
/data01/w 10.0.0.41(rw,sync,all_squash) /data01/r 172.16.1.0/24/(ro,async,no_all_squash)
mkdir /data01/{r,w} -p ; chown nfsnobody.nfsnobody /data01/{r,w}
注意:先启动rpc服务,再启动nfs服务。
systemctl start rpcbind
systemctl start nfs
systemctl reload nfs --- 平滑重启
相同点:两者都是使配置文件从新生效
不一样点:
reload (从新加载),reload会从新加载配置文件,服务不会中断。并且reload时会测试conf语法等,若是出错会rollback用上一次正确配置文件保持正常运行。也叫平滑重启,不会对已经链接的服务形成影响。
restart (重启)(先stop后start),会重启服务。这个重启会形成服务一瞬间的中断,若是配置文件出错会致使服务启动失败,那就是更长时间的服务中断了。
注意:修改配置文件前必定要先备份!为了保证线上服务高可用,推荐使用reload
I:安装nfs服务
yum install nfs-utils -y
backup服务器(10.0.0.41) mkdir /w -p mount -t nfs 10.0.0.31:/data01/w /w web01服务器(172.16.1.7) mkdir /r -p mount -t nfs 172.16.1.31:/data01/r /r
I:把mount 的命令放到/etc/rc.d/rc.local 里面去,vi /etc/rc.d/rc.local ,而后把mount -t nfs 172.16.1.31:data01/r /r 这个命令塞进去。保存退出就行了
I:172.16.1.31:/data01 /mnt nfs defaults 0 0
第一个历程: 系统启动开机自检
第二个历程: 加载系统挂载文件 /etc/fstab 没法实现网络挂载
第三个历程: 启动系统服务程序 network remote-fs.target(centos7) netfs(centos6)
第四个历程: 特殊服务从新加载 /etc/fstab 实现网络挂载
-a:把/etc/fstab中列出的路径所有挂载。
-t:须要mount的类型,如nfs等。
-r:将mount的路径定为read only
-v mount:过程的每个操做都有message传回到屏幕上
rsize=n:(读取内存空间大小)在NFS服务器读取文件时NFS使用的字节数,默认值是1 024个字节。
wsize=n:(设置存储空间大小)向NFS服务器写文件时NFS使用的字节数,默认值是1 024个字节。
timeo=n:从超时后到第1次从新传送占用的1/7秒的数目,默认值是7/7秒
hard:使用硬挂载的方式挂载系统,该值是默认值,重复请求直到NFS服务器回应。
intr:容许NFS中断文件操做和向调用它的程序返回值,默认不容许文件操做被中断。
umount -lf /mnt --- 强制卸载
-l Lazy unmount --- 懒惰卸载
-f force --- 强制卸载
rpcinfo --- 查看nfs服务是否进行注册
rpcinfo -p localhost/172.16.1.31
showmount --- 查看nfs服务存在哪些能够挂载目录
showmount -e localhost/172.16.1.31
exportfs --- 临时建立存储目录/ nfs服务平滑重启
exportfs -rv
exportfs -o rw,sync,all_squash 172.16.1.0/24:/data100
/var/lib/nfs/etab --- 存储服务默认配置记录文件(日志文件)
/etc/exports --- 存储服务配置文件
/proc/mounts --- 存储客户端默认挂载参数信息
存储服务配置文件参数
存储服务目录权限有关 755
存储服务目录权限继承
存储客户端挂载参数