什么是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)
查看共享资源的指令
客户端查询服务器共享资源的指令:
/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共享。
- 使用
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。