NFS(Network File System),即网络文件系统。NFS版本3(NFSv3)支持安全的异步写入,并且在错误处理方面比之前的NFSv2更强大; 它还支持64位文件大小和偏移量,允许客户端访问超过2 GB的文件数据。NFSv4通过防火墙和互联网上的工作,不再需要rpcbind服务,支持ACL,并利用状态操作。NFSv4.1不再需要用于回调的单独的TCP连接,这允许NFS服务器即使在无法联系客户端时(例如,NAT或防火墙干扰)也可以授予委派。此外,NFSv4.1现在提供真正的一次性语义(重启操作除外),防止以前的问题,如果回复丢失并且操作被发送两次,某些操作可能返回不准确的结果。
所有版本的NFS都可以使用通过IP网络运行的传输控制协议(TCP),NFSv4需要它。NFSv3可以使用通过IP网络运行的用户数据报协议(UDP)来提供客户端和服务器之间的无状态网络连接。 当使用NFSv3与UDP时,无状态UDP连接(在正常情况下)具有比TCP少的协议开销。这可以在非常干净,非拥塞的网络上转化为更好的性能。但是,由于UDP是无状态的,如果服务器意外下降,则UDP客户端会继续使网络饱和以及对服务器的请求。另外,当UDP丢失帧时,必须重传整个RPC请求; 使用TCP,只有丢失的帧需要重新发送。由于这些原因,TCP是连接到NFS服务器时的首选协议。 安装和锁定协议已被并入到NFSv4协议中。服务器监听TCP端口2049,NFSv4的不需要与之交互rpcbind,lockd和rpc.statd守护程序。该rpc.mountd守护程序仍需要在NFS服务器上设置了出口,但不参与任何过度的线操作。
NFSv4需要TCP。TCP是Red Hat Enterprise Linux下的NFS版本2和3的默认传输协议。
systemctl start nfs
启动NFS服务器和适当的RPC进程来为共享NFS文件系统提供服务请求。
systemctl start nfs-lock
激活强制服务,启动适当的RPC进程,允许NFS客户端锁定服务器上的文件。
rpcbind接受来自本地RPC服务的端口预留。然后这些端口可用(或通告),以便对应的远程RPC服务可以访问它们。rpcbind响应对RPC服务的请求,并设置与请求的RPC服务的连接。这不与NFSv4一起使用。
rpc.mountd
此过程由NFS服务器用来处理MOUNTNFSv3客户端的请求。它检查NFS服务器当前是否导出所请求的NFS共享,并允许客户端访问它。如果允许安装请求,则rpc.mountd服务器将回复Success状态,并将File-Handle该NFS共享提供给NFS客户机。
rpc.nfsd
rpc.nfsd允许定义服务器通告的显式NFS版本和协议。它与Linux内核配合使用,以满足NFS客户端的动态需求,例如每次NFS客户端连接时提供服务器线程。此过程对应于nfs服务。
lockd是一个在客户端和服务器上运行的内核线程。它实现了网络锁管理器(NLM)协议,允许NFSv3客户端锁定服务器上的文件。每当运行NFS服务器和挂载NFS文件系统时,它都会自动启动。
rpc.statd
此过程实现网络状态监视器(NSM)RPC协议,当NFS服务器重新启动而不正常关闭时,它将通知NFS客户端。rpc.statd由nfslock服务自动启动,不需要用户配置。这不与NFSv4一起使用。
rpc.rquotad
此过程为远程用户提供用户配额信息。rpc.rquotad由nfs服务自动启动,不需要用户配置。
rpc.idmapd
rpc.idmapd提供了NFSv4客户端和服务器上调功能,它可以在线上的NFSv4名称(以形式表示的字符串)与本地UID和GID 之间进行映射。要使用NFSv4功能,必须配置文件。至少应该指定“域”参数,定义NFSv4映射域。如果NFSv4映射域与DNS域名相同,则可以跳过此参数。客户端和服务器必须同意NFSv4映射域的ID映射才能正常工作。 user@domainidmapd/etc/idmapd.conf
在Red Hat Enterprise Linux 7中,只有NFSv4服务器使用rpc.idmapd。NFSv4客户端使用基于keyring的idmapper nfsidmap。nfsidmap是一个独立程序,由内核按需调用执行ID映射; 它不是一个守护进程。如果有问题,nfsidmap客户端会回退使用rpc.idmapd。
pNFS架构可以提高NFS的可扩展性,并可能改善性能。也就是说,当服务器也实现pNFS时,客户端能够同时通过多个服务器访问数据。它支持三种存储协议或布局:文件,对象和块。
启用pNFS时,给mount命令添加参数:
-o v4.1
服务器启用pNFS后,nfs_layout_nfsv41_files内核将自动加载到第一个安装。输出中的安装条目应包含minorversion=1。使用以下命令验证模块是否已加载:
$ lsmod | grep nfs_layout_nfsv41_files
moreinfo:http://www.pnfs.com
NFS客户端配置:
# mount -t nfs -o options server:/remote/export /local/directory
说明:井号代表root权限,$代表普通权限。
server
导出要安装的文件系统的服务器的主机名,IP地址或完全限定域名
/remote/export
从服务器导出的文件系统或目录,即要安装的目录
/local/directory
安装 / remote / export 的客户端位置
mount -t nfs -o nfsvers=4 host:/remote/export /local/directory
//指定NFS版本挂载
可以修改/etc/fstab 实现NFS挂载
vim /etc/fatab添加:
server:/usr/local/pub /pub nfs defaults 0 0
客户端本地要创建pub目录
NFS服务端配置
修改/etc/exports
需要特别注意
空白行被忽略。除了注释行之外,文件中不应有其他空格字符。
要添加注释,请使用哈希标记(#)开始一行。
您可以用反斜杠(\)包裹长行。
每个导出的文件系统应该是单独的一行。
在导出的文件系统之后放置的授权主机的任何列表必须用空格字符分隔。
每个主机的选项必须直接放在主机标识符之后的括号中,而不用分隔主机和第一个括号的任何空格。
exporthost1(options1) host2(options2) host3(options3)
export
正在导出的目录
host
正在共享导出的主机或网络
/exported/directory example.com
这里没有设置option,默认option包含了:
RO
导出的文件系统是只读的。远程主机无法更改文件系统上共享的数据。要允许主机对文件系统进行更改(即读/写),请指定该rw选项。
sync
在先前请求所做的更改写入磁盘之前,NFS服务器将不会回复请求。要启用异步写入,请指定该选项async
wdelay
如果NFS服务器怀疑另一个写请求即将发生,NFS服务器将延迟写入磁盘。这可以提高性能,因为它减少了通过单独的写命令访问磁盘的次数,从而减少了写入开销。要禁用它,请指定no_wdelay。no_wdelay仅当sync还指定了默认选项时才可用
root_squash
这可以防止远程连接的用户(而不是本地)拥有root权限; 相反,NFS服务器将为它们分配用户ID nfsnobody。这有效地将远程root用户的权力“压缩”到最低本地用户,防止远程服务器上可能的未经授权的写入。要禁用根挤压,请指定no_root_squash。all_squash是对所有用户,包括root进行限制。
要指定NFS服务器应该从特定主机分配给远程用户的用户和组ID ,请分别使用anonuid和anongid选项
exporthost(anonuid=uid,anongid=gid)
uid和gid分别是用户ID号和组ID号
no_acl选项可以禁用默认支持的acl
如果rw未指定该选项,则导出的文件系统将以只读方式共享
例如:
/another/exported/directory 192.168.0.3(rw,async)
服务端也可以用exportfs命令配置。
对NFS的安全保护:
Kerberos参考:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/s1-nfs-security.html
iptables