什么是NFS
-
NFS(Network File System)简介
- NFS是Network File System的缩写,即网络文件系统。NFS是一种用于分布式文件系统的协议,它允许不同的机器、不同的操作系统能够共享个人数据,使应用程序通过网络可以访问位于服务器磁盘中的数据。NFS在文件传输或信息传递的过程中,依赖于RPC协议。
-
RPC(Remote Procedure Call)简介
- RPC,远程过程调用,是使客户端能够执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,能够实现基于网络的资料共享,就是因为NFS使用了RPC提供的传输协议,可以说NFS就是使用RPC的一个程序。
NFS的工作模式
-
服务器/客户端工作模式
- NFS采用服务器/客户端工作模式。在NFS服务器上将目录设置为输出目录(即共享目录)后,客户端就可以将这个目录挂载到自己系统中的某个目录下。
-
挂载示例
- 例如,在CentOS系统中,NFS服务器共享目录设置为
/nfs/public
,NFS客户端将此目录挂载到/mnt/nfs
。客户端之间通过网络连接到NFS服务器,并访问共享的目录。
- 例如,在CentOS系统中,NFS服务器共享目录设置为
RPC守护进程
-
nfsd
- nfsd是基本的NFS守护进程,主要功能是管理客户端是否能登录NFS服务器。
-
mountd
- mountd是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务器后,在使用NFS服务器提供的文件前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
-
rpcbind
- rpcbind的主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务(如NFS服务)时,rpcbind会将管理的与服务对应的端口提供给客户端,从而使客户端可以通过该端口向服务器请求服务。
NFS工作原理
-
启动RPC服务
- 首先,服务器端启动RPC服务,并开启111端口。
-
启动NFS服务
- 服务器端启动NFS服务,并向RPC注册端口信息。
-
客户端请求NFS端口
- 客户端启动RPC(portmap服务),向服务器的RPC(portmap)服务请求服务器的NFS端口。
-
反馈端口信息
- 服务器端的RPC(portmap)服务反馈NFS端口信息给客户端。
-
数据传输
- 客户端通过获取的NFS端口来建立和服务器端NFS的连接并进行数据的传输。
NFS软件包
-
RPC主程序:rpcbind
- 启动RPC服务之前,需要做好port的对应(mapping)的工作,这就是rpcbind这个服务所负责的。也就是说,在启动任何一个RPC服务之前,我们都需要启动rpcbind才行。
-
NFS主程序:nfs-utils
- 提供rpc.nfsd及rpc.mountd这两个NFS守护进程与其他相关文档与说明文件、执行文件等的软件。这些是NFS服务所需要的主要软件。
NFS服务的配置文件
-
/etc/exports配置
- NFS服务器共享目录时所使用的配置文件为/etc/exports。此文件的语法结构如下:
共享目录的绝对路径 客户端(选项) 例如:/share 172.16.1.0/24(ro)
- NFS服务器共享目录时所使用的配置文件为/etc/exports。此文件的语法结构如下:
-
查看共享资源的指令
- 客户端查询服务器共享资源的指令:
/usr/sbin/showmount
- exportfs 是用在NFS Server端,而showmount则主要用在Client端。showmount可以用来察看NFS分享出来的目录资源。
- 客户端查询服务器共享资源的指令:
配置举例:配置NFS服务器和客户端
在CentOS上配置NFS服务器
-
安装NFS和相关软件包
sudo yum install nfs-utils rpcbind
-
配置共享目录
- 编辑
/etc/exports
文件,添加以下内容:/srv/nfs 192.168.1.0/24(rw,sync,no_root_squash)
- 编辑
-
启动并启用NFS服务
sudo systemctl start rpcbind sudo systemctl start nfs-server sudo systemctl enable rpcbind sudo systemctl enable nfs-server
-
导出共享目录
sudo exportfs -a
在CentOS上配置NFS客户端
-
安装NFS和相关软件包
sudo yum install nfs-utils
-
创建挂载点并挂载NFS共享
sudo mkdir -p /mnt/nfs sudo mount -t nfs 192.168.1.100:/srv/nfs /mnt/nfs
-
验证挂载
- 使用
df -h
命令检查是否成功挂载NFS共享。
- 使用