本文共 3805 字,大约阅读时间需要 12 分钟。
一、NFS工作原理
VFS:VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性。
1、首先用户访问网站程序,由程序在NFS客户端上发出NFS文件存取功能的询问请求,这时NFS客户端(即执行程序的服务器)RPC服务(portmap 或rpcbind服务)就会通过网络向NFS服务端的RPC服务(即portmap或rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
2、NFS服务端的RPC服务(即portmap或rpcbind服务)找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务(即portmap或rpcbind服务)。 3、此时NFS客户端就可获取到正确的端口,然后就直接与NFS daemon联机存取数据了。 4、NFS客户端把数据存取成功后,返回给前端程序,告诉用户存取结果,作为网站用户,我们就完成了一次存取操作。 最终权限取决于: 访问文件的权限:取决于:运行该进程的用户属主-属组-其他人 但是远程s又不可能获知本地用户的权限 情景1: c:有用户centos(1001) S:用户fedora(1001) centos在本地nfs共享目录中创建的文件,看到的是属主是centos fedora看到的是自己创建的,因为系统根据用户id来进行名称解析 root_squash:压缩root用户权限,以root用户来访问的时候,降级身份为nfsnobody //来宾账号 all_squash:全部都压缩为nfsnobody nfsv2,nfsv3,nfsv4 nfsd:监听在一个套接字端口:tcp/2049,基于RPC工作 nfs不能实现身份认证, rpc.mountd进程:验证用户是否有权限来进行mount rpc.lockd:[施加锁,并将锁状态信息通知给其他主机]加锁,写的时候独占锁,防止同一文件多个用户同时写入,读用的是共享锁,读的时候不允许别人修改,但是允许读 rpc.statd:保存文件的状态信息,应对突发情况 rpc监听的大多数端口都是半随机的,例如rpc.mountd在启动的时候,先向本地的rpc服务注册某一端口,由rpc_server端帮忙挑选一个空闲端口 client请求s的rpc服务端,获取rpc.mount端口信息,然后client再访问s的rpc.mount的端口 rpc服务端的端口是固定的 rpcbind监听端口111 ;lsof -i:111查看 [root@wolf ~]# rpcinfo -p localhost //查看rpcbind服务已经启用了对NFS服务的映射 二、安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@wolf ~] # ps -ef |egrep "rpc|nfs" root 3483 2 0 17:28 ? 00:00:00 [rpciod /0 ] rpc 3590 1 0 17:31 ? 00:00:00 rpcbind root 3635 1 0 17:31 ? 00:00:00 rpc.rquotad // 磁盘配额进程 root 3640 1 0 17:31 ? 00:00:00 rpc.mountd // 权限管理验证 root 3647 2 0 17:31 ? 00:00:00 [nfsd4] root 3648 2 0 17:31 ? 00:00:00 [nfsd4_callbacks] root 3649 2 0 17:31 ? 00:00:00 [nfsd] root 3650 2 0 17:31 ? 00:00:00 [nfsd] root 3651 2 0 17:31 ? 00:00:00 [nfsd] root 3652 2 0 17:31 ? 00:00:00 [nfsd] root 3653 2 0 17:31 ? 00:00:00 [nfsd] root 3654 2 0 17:31 ? 00:00:00 [nfsd] root 3655 2 0 17:31 ? 00:00:00 [nfsd] root 3656 2 0 17:31 ? 00:00:00 [nfsd] root 3687 1 0 17:31 ? 00:00:00 rpc.idmapd // 名称映射 root 3799 2717 0 17:48 pts /0 00:00:00 egrep rpc|nfs |
man exports 最后有示例
注:由于是nfs,因此在挂载的时候可以指定其缓冲区的大小 mount.nfs
本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/2065232,如需转载请自行联系原作者