NFS 文件系统介绍

本贴最后更新于 1487 天前,其中的信息可能已经东海扬尘

1.简介

network file system
通过局域网络让不同的主机系统之间可以共享文件和目录,主要通过 linux 系统进行共享,NFS 服务可以提供远程存储服务,一般应用于用于内网小型集群架构中,其远程传输基于 RPC(远程过程调用)。其作用为实现多台服务器存储共享以及实现多台服务器之间数据一致性。

2.实现原理:

NFS 守护进程
RPC.nfsd
守护进程,管理 NFS 服务
RPC.mount
管理 nfs 的文件系统
本地文件操作方式
1.当用户执行 mkdir 命令,该命令会通过 shell 解释器翻译给内核,由内核解析完成后驱动硬件,完成相应的操作。
NFS 实现原理
1.用户进程访问 NFS 客户端,使用不同的函数对数据进行处理
2.NFS 客户端通过 TCP/IP 的方式传递给 NFS 服务端
3.NFS 服务器端收到请求后,会先调用 portmap 进程进行端口映射
4.nfsd 进程用于判断 NFS 客户端是否拥有权限连接 NFS 服务器端
5.RPC.mount 进程判断客户端是否有对应的权限进行验证
6.idmap 进程实现用户映射和压缩
7.最后 NFS 服务端会将对应请求的函数转换为本地能识别的命令,传递到内核,由内核驱动硬件。
rpc 是一个远程过程调用,那么使用 nfs 必须有 rpc 服务

3.nfs 组件

安装 NFS 服务,需要安装两个软件,分别是:

  • RPC 主程序:rpcbind
    NFS 其实可以被视为一个 RPC 服务,因为启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。
  • NFS 主程序:nfs-utils
    就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。

NFS 的相关文件:

  • 主要配置文件:/etc/exports
    这是 NFS 的主要配置文件了。该文件是空白的,有的系统可能不存在这个文件,主要手动建立。NFS 的配置一般只在这个文件中配置即可。
  • NFS 文件系统维护指令:/usr/sbin/exportfs
    这个是维护 NFS 分享资源的指令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享。
  • 分享资源的登录档:/var/lib/nfs/*tab
    在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。
  • 客户端查询服务器分享资源的指令:/usr/sbin/showmount
    这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。showmount 可以用来察看 NFS 分享出来的目录资源。

4.服务实践

首先服务器端需要启动 nfs-server 和 rpcbind,客户端也需要启动 rpcbind。

服务器端:

安装 nfs
yum -y install nfs-utils rpcbind

配置
主配置文件/etc/exports,默认空
格式:
共享目录路径 允许访问的 nfs 客户端(共享权限参数)
共享目录路径: 服务器本地目录路径
允许访问的客户端:
ip or 域名
网段: 172.16.1.0/24 主机: 172.16.1.1/32 域名:*.edu.mage.com
权限:
rw 读写权限 ***
ro 只读权限
root_squash 当 nfs 客户端以 root 管理员访问时,映射为 nfs 服务器的匿名用户
no_root_squash 当 nfs 客户端以 root 管理员访问时,映射为 nfs 服务器的 ROOT 管理员用户
all_squash 无论 nfs 客户端使用什么账户访问,均映射为 nfs 服务器的匿名用户 ***
sync 同时将数据写入内存与硬盘中,保证不丢死数据
async 优先将数据保存到内存中,然后再写入硬盘,这样效率更高,但可能会丢失数据。
async 优先将数据保存到内存中,然后再写入硬盘,这样效率更高,但可能会丢失数据。
anonuid 配置 all_aquash 使用,指定 nfs 的用户 uid,必须存在系统 ***
anongid 配置 all_aquash 使用,指定 nfs 的用户 gid,必须存在系统 ***

例子(/etc/exports):
/data 172.16.1.0/24(rw),0.0.0.0/0(ro)
/backup 192.1.1.1/32(rw)
/backuo *.edu.com(rw)

4.创建环境
mkdir /data
chown -R nfsnobody.nfsnobody /data

5.启动服务
systemctl start nfs-server rpcbind
systemctl status nfs-server rpcbind

客户端

客户端挂载
1.安装工具 安装 nfs-utils 并启动 rpcbind
yum -y install rpcbind nfs-utils

2.客户端使用 showmount -e 查看远程服务器 rpc 提供的可挂载 nfs 信息

showmount -e 192.168.1.1
3.在 nfs 创建一个挂载目录,然后使用 mount 命令挂载。
mount -t nfs 192.168.65.131:/backup /mnt

挂载时需注意挂载权限。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...