NFS 允许 Linux 服务器通过网络与其他 UNIX 客户端共享目录。
NFS 服务器导出一个目录,NFS 客户端挂载这个目录。
RHEL 7 支持 NFS NFSv3 和 NFSv4 两个版本。
配置 NFS 服务器
- 如果服务器上尚未安装所需的 nfs 软件包,请安装:
# rpm -qa | grep nfs-utils
# yum install nfs-utils rpcbind
- 在启动时启用服务:
# systemctl enable nfs-server # systemctl enable rpcbind
# systemctl enable nfs-lock
在 RHEL7.1 (nfs-utils-1.3.0-8.el7) 中,启用 nfs-lock 不起作用(没有这样的文件或者目录)。
由于 rpc-statd.service 是静态的,因此不需要启用它。
# systemctl enable nfs-idmap
在 RHEL7.1 (nfs-utils-1.3.0-8.el7) 中这不起作用(没有这样的文件或者目录)。
由于 nfs-idmapd.service 是静态的,因此不需要启用它。
- 启动 NFS 服务:
# systemctl start rpcbind # systemctl start nfs-server # systemctl start nfs-lock # systemctl start nfs-idmap
- 检查NFS服务的状态:
# systemctl status nfs
- 创建共享目录:
# mkdir /test
- 导出目录。
/etc/exports 文件的格式是:
dir client1 (options) [client2(options)...]
客户端选项包括(首先列出默认值):
ro / rw :
a) ro :允许客户端只读访问共享。
b) rw :允许客户端对共享进行读写访问。
sync / async :
a) sync:NFS 服务器仅在先前请求所做的更改写入磁盘后才回复请求。
b) async :指定服务器不必等待。
wdelay/no_wdelay
a) wdelay :当 NFS 服务器怀疑另一个写请求即将到来时,它会延迟提交写请求。
b) no_wdelay :使用此选项禁用延迟。
no_wdelay 选项只能在启用默认同步选项时启用。
no_all_squash/all_squash :
a) no_all_squash :不改变远程用户的映射。
b) all_squash :压缩包括 root 在内的所有远程用户。
root_squash/no_root_squash :
a) root_squash :防止远程连接的 root 用户拥有 root 访问权限。
有效压缩远程 root 权限。
b) no_root_squash :禁用根挤压。
例子 :
# vi /etc/exports /test *(rw)
- 导出共享:
# exportfs -r
-r 重新导出 /etc/exports 中的条目并将 /var/lib/nfs/etab 与 /etc/exports 同步。
/var/lib/nfs/etab 是主导出表。
可以与 exportfs 命令一起使用的其他选项是:
-a:导出/etc/exports中的条目,但不与/var/lib/nfs/etab同步 -i:忽略/etc/exports中的条目并使用命令行参数。 -u:取消导出一个或者多个目录 -o:在命令行上指定客户端选项
- 重启NFS服务:
# systemctl restart nfs-server
防火墙服务在 NFS 服务器上处于活动状态
要使 NFS 服务器正常工作,请在 firewall-config 应用程序或者使用 firewall-cmd 的相关区域中启用 nfs、mountd 和 rpc-bind 服务:
# firewall-cmd --add-service=nfs --zone=internal --permanent # firewall-cmd --add-service=mountd --zone=internal --permanent # firewall-cmd --add-service=rpc-bind --zone=internal --permanent
NFS 服务器和 RPC 进程
启动 nfs-server 进程会启动 NFS 服务器和其他 RPC 进程。
RPC 过程包括:
rpc.statd : 在 NFS 客户端和 NFS 服务器之间实现监控协议 (NSM)
rpc.mountd :NFS 挂载守护进程,它实现了来自 NFSv3 客户端的挂载请求的服务器端。
rpc.idmapd :映射 NFSv4 名称和本地 UID 和 GID
rpc.rquotad :为远程用户提供用户配额信息。
配置 NFS 客户端
- 如果服务器上尚未安装所需的 nfs 软件包,请安装:
# rpm -qa | grep nfs-utils
# yum install nfs-utils
- 使用 mount 命令挂载导出的文件系统。
命令的语法:
mount -t nfs -o options host:/remote/export /local/directory
示例:
# mount -t nfs -o ro,nosuid remote_host:/home /remote_home
此示例执行以下操作:
它从远程主机 (remote_host) 挂载 /home 到本地挂载点 /remote_home。
文件系统以只读方式安装,并且阻止用户运行 setuid 程序(-o ro,nosuid 选项)。
- 更新 /etc/fstab 以在启动时挂载 NFS 共享。
# vi /etc/fstab remote_host:/home /remote_home nfs ro,nosuid 0 0