NFS网络文件系统

2019-12-05 作者:计算机教程   |   浏览(72)

Network File System(NFS)网络文件系统是由Sun公司开发的一种通过网络方式共享文件系统的通用共享解决方案。目前NFS有三个版本NFSv2、NFSv3、NFSv4。NFSv2是个古老的版本但却被广大的操作系统所支持,这样它的兼容性会更好,NFSv3拥有更多的特色,包括更快的速度、更大的单个文件大小、更多便于排错的错误及成功信息、对TCP协议的支持等,NFSv4提供了有状态的连接,更容易追踪连接状态、增强了安全特性,CentOS 6.3版本默认使用版本4提供NFS网络文件系统共享服务,NFS监听在TCP的2049端口。

NFS概述

当两台电脑需要通过网络连接时双方主机就一定需要提供一些基本信息,如:IP地址、服务端口号等,当有100台客户端需要访问某台服务器时,服务器就需要记住这些客户端的IP地址以及相应的端口号等信息,而这些信息的管理是需要程序来管理的,在Linux中这样的信息可以有某个特定服务自己来管理,也可以委托给别人来管理,NFS服务就不会自己管理这些信息,这样的信息NFS会委托给Remote Procedure Call(RPC)来帮助自己管理,RPC是远程过程调用协议,RPC协议为通讯程序之间管理通讯所需基本信息的管理工作,这样NFS服务就可以专注于如果共享数据,至于通讯的连接以及连接的基本信息则全权委托给RPC管理,CentOS 6.3系统有rpcbind[1]服务提供RPC协议的支持,目前NFSv4虽然不再需要直接与rpcbind直接交互,但rpc.mountd依然是NFSv4所必须的服务,所以如果在CentOS 6.3平台上实现NFS共享需要同时启动NFS与rpcbind服务。

NFS(Network File System),即网络文件系统,是一款通过网络方式共享文件系统的通用共享解决方案。NFS目前有三个版本:NFSv2、NFSv3、NFSv4。CentOS7.0默认使用的版本是NFSv4提供网络文件系统的共享服务,NFS监听在TCP 2049端口。

所需软件:nfs-utils、rpcbind。

当两台计算机需要通过网络建立连接时,双方需要通过IP、端口号等信息进行通信。当有100台客户端访问服务器时,服务器就需要记住这些计算机的IP、端口号这些信息(实际上就是很多个socket文件),而这些信息需要程序来管理。在Linux中,这样的信息可以由某个特定服务自己来管理,也可以委托给RPC来帮助管理。RPC是远程过程调用协议,RPC协议为远程通信双方提供所需的基本信息。这样NFS服务就可以专注于如何共享数据,至于通信连接以及连接的基本信息,则全权委托给RPC管理。CentOS7系统由rpcbind服务来提供RPC协议的支持(在老版本上是portmap来提供RPC协议的),目前NFSv4虽然不需要与rpcbind直接交互,但是rpc.mountd依然是NFSv4所必须的服务。所以在CentOS7平台上实现NFS共享,需要同时启动NFS服务和rpcbind服务。

4.1.1     NFS服务器配置

所需的软件是:nfs-utils,rpcbind

NFS服务器通过读取/etc/exports配置文件决定哪些客户端可以访问哪些NFS共享文件系统,该文件的语法格式如下:

NFS服务器配置

空白行将被忽略

NFS服务器读取/etc/exports配置文件,该文件可以设置哪些客户端可以访问NFS共享文件系统(作权限精细化管理的)。

以#符号开头的内容为注释

该文件的书写规则如下:

配置文件中可以通过符号转义换行

  • 空白行将被忽略
  • 以#符号开头的内容将被注释
  • 配置文件中可以用符号转义换行
  • 每个共享的文件系统需要独立一行条目
  • 客户端主机列表需要使用空格隔开
  • 配置文件中支持通配符

每个共享的文件系统需要独立一行条目

一条完整的共享条目语法结构如下,其中,客户端主机可以是一个网段、单台主机或主机名。

客户端主机列表需要使用空格隔开

共享路径  客户端主机   (选项)

共享路径  客户端主机1  (选项)  客户端主机2  (选项)

配置文件中支持通配符

不添加选项时,会使用默认配置,默认配置是:ro、sync、wdelay、no_root_squash

一条完整的共享条目结构如下,客户端可以是一个网段、单台主机或主机名:

具体的选项配置如下:

共享路径         客户端主机选项)

  • ro: 共享目录只读
  • rw: 共享目录可读可写
  • all_squash: 所有的访问用户都映射为匿名用户或用户组
  • no_all_squash: 访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
  • root_squash: 将来访的root用户映射为匿名用户或用户组
  • no_root_squash: 来访的root用户保持root账号权限
  • anonuid=<UID>: 指定匿名访问用户的本地用户组UID,默认为nfsnoboday(65534)
  • anongid=<GID>: 指定匿名访问用户的本地用户组GID,默认为nfsnoboday(65534)
  • secure: 限制客户端只能从小于1024的tcp/ip端口连接服务器
  • insecure: 允许客户端从大于1024的tcp/ip端口连接服务器
  • sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但能保证数据的一致性
  • async: 将数据先保存在内存缓冲区中,必要时写入磁盘
  • wdelay: 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
  • no_wdelay: 若有写操作则立即执行,应与rsync配合使用
  • subtree_check: 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
  • no_subtree_check: 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率

我们也可以为多个客户主机设置不同的访问选项,结构如下:

NFS部署实例

共享路径    客户端主机1选项) 客户端主机2 选项) …

图片 1

最简单的NFS配置可以仅给定一个共享路径与一个客户端主机而不指定选项,因为没有选项NFS将使用默认设置,默认属性为ro,sync,wdelay,root_squash。具体NFS属性及其对应含义见表4-1,查看exports的帮助文档可以找到很多服务器配置模版。

nfs01.png

表4-1

服务器的配置操作步骤为:安装软件、添加共享账户、创建共享目录、修改权限、设置NFS共享配置文件、启动共享服务。

NFS选项

功能描述

NFS选项

含义描述

ro

只读共享

rw

可读可写共享

sync

同步写操作

async

异步写操作

wdelay

延迟写操作

root_squash

屏蔽远程root权限

no_root_squash

不屏蔽远程root权限

all_squash

屏蔽所有远程用户权限

服务器的配置如下:

图片 2

nfs02.png

上面就是服务器端的配置,下面是客户端的访问和使用
** 首先在服务器端做好权限管理配置并启动服务:**

图片 3

nfs04.png

  • 配置说明:/home/share/ xx.xx.248.246(rw,async,no_root_squash) *(ro)
    对xx.xx.248.246此客户端授予读写权限,其他所有客户端只读权限

图片 4

nfs05.png

图片 5

nfs06.png

  • showmount -e # 默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错
  • showmount -a # 显示已经与客户端连接上的目录信息

** 然后在客户端上访问和使用 **

图片 6

nfs07.png

至此,我们就可以在客户端上对共享目录进行操作了。最主要的是权限的管理。

** NFS权限分析 ** ,由于共享数据实际是存储在NFS服务器上的,所以所有的操作实际是以服务器本机账户进行的,只是服务器会根据不同的情况将远程客户端的访问账户转换为不同的服务器本地账户。

  • 客户端使用普通用户连接服务器时,默认情况下,如果客户端使用的账户的UID在服务器端上也有相同账号的UID,则服务器将使用本地该UID账户进行读写操作,如果客户端访问服务器所使用的UID不存在于服务器本地,则该服务器自动将客户端来访账户转换为nfsnobody账号。此外,如果服务器端对共享属性配置了all_squash选项,则服务器会根据anonuid选项的值,将所有的账户自动转换为匿名账户。
  • 客户端使用root连接服务器时,默认会将root转换为服务器上的nfsnobody账号,如果服务器对共享属性配置了no_root_squash选项,则服务器会将远程root账户转换为本机root账户进行读写操作。

以上选项中ro与rw比较容易理解,用来定义客户端访问共享时可以获得的权限是只读访问还是可读写访问。计算机对数据进行修改会先将修改的内容写入快速的内存,随后才会慢慢写入慢速的硬盘设备中,async选项允许NFS服务器在没有完全把数据写入硬盘前就返回成功消息会客户端,而此时数据实际还存放在内存中,但客户端显示数据已经写入成功,该选项可以优化NFS性能,但有可能非正常关闭NFS时导致的数据丢失情况,sync选项将确保在数据真正写入存储设备后才会返回成功信息。wdelay延迟写入也就是说先将数据写入内存,这样可以将多个写入请求合并后再写入硬盘,这样可以减少对硬盘IO的次数从而优化性能,与此相反的选项是no_wdelay但该选项与async选项一起使用时不生效,因为async就是基于wdelay对客户端的回应功能。默认情况下NFS会自动屏蔽root用户的权限,root_squash使得客户端使用root帐号访问NFS时默认会而将root映射本地为匿名帐号,通过anonuid可以指定匿名帐号ID,默认anonuid为65534也就是nfsnobody帐号,使用no_root_squash可以防止这种转换而保留root权限,all_squash选项则可以屏蔽所有账户权限,将所用用户对NFS的访问自动映射为匿名账户,默认普通帐号的权限是保留的。

参考:http://www.cnblogs.com/dscode/p/6146409.html

本文由www.2003.com发布于计算机教程,转载请注明出处:NFS网络文件系统

关键词: