网络文件系统(NFS)

定义

NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。

特点

(1)提供透明文件访问以及文件传输

(2)容易扩充新的资源或软件,不需要改变现有的工作环境

(3) 高性能,可灵活配置

工作原理

  • NFS的工作原理是使用C/S架构,由一个客户端程序和服务器程序组成。
  • 服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。
  • NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器中“输送”出来。
  • 文件通常以块为单位进行传输。其大小是8KB(虽然它可能会将操作分成更小尺寸的分片)。
  • NFS传输协议用于服务器和客户机之间文件访问和共享的通信,从而使客户机远程地访问保存在存储设备上的数据。

网络文件系统架构

在 Linux中,虚拟文件交换系统交换(VFS)提供在一个主机上支持多个并发文件系统的方法。VFS 确定需求倾向于哪个存储,然后使用哪些文件系统来满足需求。由于这一原因,NFS 是与其他文件系统类似的可插拔文件系统。对于 NFS 来说,唯一的区别是输入/输出(I/O)需求无法在本地满足,而是需要跨越网络来完成

一旦发现了为 NFS 指定的需求,VFS 会将其传递给内核中的 NFS 实例。NFS 解释 I/O 请求并将其翻译为 NFS 程序(OPEN、ACCESS、CREATE、READ、CLOSE、REMOVE 等等)。这些程序,归档在特定 NFS RFC 中,指定了 NFS 协议中的行为。一旦从 I/O 请求中选择了程序,它会在远程程序调用(RPC)层中执行。正如其名称所暗示的,RPC 提供了在系统间执行程序调用的方法。它将封送 NFS 请求,并伴有参数,管理将它们发送到合适的远程对等级,然后管理并追踪响应,提供给合适的请求者

进一步来说,RPC 包括重要的互操作层,称为外部数据表示(XDR),它确保当涉及到数据类型时,所有 NFS 参与者使用相同的语言。当给定架构执行请求时,数据类型表示可能不同于满足需求的目标主机上的数据类型。XDR 负责将类型转换为公共表示(XDR),便于所有架构能够与共享文件系统互操作。XDR 指定类型字节格式(比如 float)和类型的字节排序(比如修复可变长数组)。虽然 XDR 以其在 NFS 中的使用而闻名,当您在公共应用程序设置中处理多个架构时,它是一个有用的规范

一旦 XDR 将数据转换为公共表示,需求就通过网络传输给出传输层协议。早期 NFS 采用 Universal Datagram Protocol(UDP),但是,今天 TCP 因为其优越的可靠性而更加通用。

在服务器端,NFS 以相似的风格运行。需求到达网络协议栈,通过 RPC/XDR(将数据类型转换为服务器架构) 然后到达 NFS 服务器。NFS 服务器负责满足需求。需求向上提交给 NFS守护进程,它为需求标示出目标文件系统树,并且 VFS 再次用于在本地存储中获取文件系统。注意,服务器中的本地文件系统是典型的 Linux 文件系统(比如 ext4fs)。因此,NFS 不是传统意义上的文件系统,而是访问远程文件系统的协议。

对于高延迟网络,NFSv4 实现称为 compound procedure 的程序。这一程序从本质上允许在单个请求中嵌入多个 RPC 调用,来最小化通过网络请求的 transfer tax。它还为响应实现回调模式。

 安装 nfs-utils、rpcbind 软件包

  • 一般来说系统默认已安装好了的
[root@localhost ~]# yum -y install nfs-utils rpcbind        ##安装软件包以来提供NFS共享服务
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 1:nfs-utils-1.3.0-0.48.el7.x86_64 已安装并且是最新版本
软件包 rpcbind-0.2.0-42.el7.x86_64 已安装并且是最新版本
无须任何处理

 设置共享目录

mark

  •  更改 NFS 的配置文件

mark

  • 其他常用选项
all_squash :所有访问用户都映射为匿名用户或用户组。
async :将数据先保存在内存缓冲区中,必要时才写入磁盘。
subtree_check(默认):若输出目录是一个子目录,则nfs服务器将检查其父目录的权限。
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。

启动 NFS 共享服务程序

  • 手动加载 NFS 共享服务的时候,应县启动 rpcbind、再启动 nfs
[root@localhost opt]# systemctl start rpcbind
[root@localhost opt]# systemctl start nfs
[root@localhost opt]# systemctl enable rpcbind
[root@localhost opt]# systemctl enable nfs

查看本机发布的 NFS 共享目录

[root@localhost opt]# exportfs -rv
exporting        ##f发布共享 192.168.126.0/24:/opt/xcf123
[root@localhost opt]# showmount -e        ##查看共享文件
Export list for localhost.localdomain:
/opt/xcf123 192.168.126.0/24

在客户机中访问 NFS 共享资源

安装 nfs-utils,rpcbind 软件包,并启动 rpcbind 服务

[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl enable rpcbind

查看 NFS 服务器端共享了哪些目录

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# showmount -e 192.168.126.11        ##查看NFS服务端共享的目录
Export list for 192.168.126.11:
/opt/xcf123 192.168.126.0/24

手动挂载 NFS 共享目录

  • 在客户机中创建一个资源共享的目录,然后把服务器共享的目录挂载在客户机创建的资源共享目录上

mark

  •  然后即可实现客户机与服务器之间资源的共享

 mark

  •  回到服务器/opt/xcf共享目录下查看一下,确认是否同步

mark

 fstab 自动挂载

mark

 mark

 mark

  强制卸载 NFS

  • 如果服务器端NFS服务突然间停掉了,而客户端正在挂载使用时,在客户端就会出现执行 df -h 命令卡死的现象
  • 这个时候直接使用umount 命令是无法直接卸载的,需要加上 -lf 选项才能卸载
  • 模拟一下,直接把7-1给关了再来7-2试试水

mark

 ctrl+c 切出来再试试mark

猜你喜欢

转载自blog.csdn.net/Arlssaze/article/details/121227920