NFS全称network file system,它属于sun公司,sun设计它的主要目的是为了让机器访问其他机器的文件时就像访问自己的电脑上的文件,NFS属于unix的表示层协议。

NFS的组件,NFSServer端和Client端组成,client端主要包含vfsnfs的客户端;server端包含rpcbindmountdnfs服务端。

1 NFS的运行逻辑

Client端使用VFS向用户提供文件系统,使得用户可以使用本地命令使用其它主机的数据,并且把本地命令翻译为rpc调用,继而把rpc调用通过网络发送给server端,数据发送到server端的tcp/udp协议2049端口,rpcbind提供2049端口监听和用户认证,通过后server端执行 rpc调用。

2 NFS组件

VFS(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()read()write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层(VFS可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。它除了可以支持传统的ext系列,还支持Minix,FAT,VFAT,NFS,NTFS等等。

NFS它已经被编译进内核,只需要安装nfs的控制组件就可以使用nfs了,在client端它主要实现本地对文件操作命令的翻译rpc调用,并且把rpc调用发送给server端。1Server端的rpc.nfsd这个 daemon 主要的功能就是在管理客户端是否能够使用服务器文件系统挂载信息等, 其中还包含这个登入者的 ID 的判别;2rpc.mountd这个 daemon 主要的功能,则是在管理 NFS 的文件系统哩!当客户端顺利的通过 rpc.nfsd 而登入服务器之后,在他可以使用 NFS 服务器提供的档案之前,还会经过档案权限 (就是那个 -rwxrwxrwx owner, group 那几个权限啦) 的认证程序!他会去读 NFS 的配置文件 /etc/exports 来比对客户端的权限,当通过这一关之后客户端就可以取得使用 NFS 档案的权限。3rpc.lockd主要在多个client同时写数据的时候,锁定文件以保证只有一个client写数据;4rpc.statd可以用来检查档案的一致性,与 rpc.lockd 有关!若发生因为客户端同时使用同一档案造成档案可能有所损毁时, rpc.statd 可以用来检测并尝试回复该档案。与 rpc.lockd 同样的,这个功能必须要在服务器端与客户端都启动才会生效。

Rpcbind提供server端的tcp/udp的端口监听,nfs不具有网络端口的监听能力,所以在运行nfs之前需要运行rpcbind

3 NFS的配置详解

NFS的常用目录

/etc/exportsNFS服务的主要配置文件

/usr/sbin/exportfsNFS服务的管理命令

/usr/sbin/showmount客户端的查看命令

/var/lib/nfs/etab记录NFS分享出来的目录的完整权限设定值

/var/lib/nfs/xtab记录曾经登录过的客户端信息

/etc/exports文件内容格式:

<输出目录> [客户端1 选项&#xff08;访问权限,用户映射,其他&#xff09;] [客户端2 选项&#xff08;访问权限,用户映射,其他&#xff09;]

客户端选项

可以只允许某个ip连接server&#xff0c;比如192.168.1.3

也可以是某个网段&#xff0c;比如192.168.1.0/24或者192.168.1.0/255.255.255.0

也可以是域名&#xff0c;域名可以支持通配符*?

权限选项

Rw可以读写&#xff0c;ro只读

Sync同步的方式&#xff0c;server端写入硬盘后&#xff0c;响应client&#xff0c;async异步方式&#xff0c;server端写到内存中响应。

No-root-squash&#xff0c;clientroot用户的话允许登陆nfs服务器&#xff0c;并且有root权限&#xff0c;root-squash&#xff0c;clientroot用户的话不允许登陆nfs服务器。

Anonuid把文件的属主指定某一用户&#xff0c;anongid把文件的属组指定某一组。

客户端挂在nfs服务器文件命令

mount -t nfs ip:/path /path

例子mount t nfs 192.168.1.1:/pub /mnt