服务端安装nfs-utils
1 | $ yum -y install nfs-utils |
vim /evtc/exports
1 | directory machine(option) |
option 选项包含如下:
ro:目录为只读共享,这是默认值。
rw:目录为读写共享。
secure:在小于 1024 的端口上发起请求,这是默认值。应使用 insecure 来关闭它。
insecure:在大于 1024 的端口上发起请求。
async:此选项允许 NFS 服务器违反 NFS 协议,并在数据没有完全写入之前回复请求,即异步请求。可以提高性能,但是在 NFS 服务重启时会导致数据丢失或损坏。
sync:与 async 相反,当数据完全写入之后才回复请求,即同步请求。在1.0.0之后的所有版本中,这是默认值。
no_wdelay:允许提交多个写入请求。如果还设置了 async,则此选项无效。
nohide:共享 NFS 目录的子目录。可以使用 hide 禁用此选项。
crossmnt:与 nohide 类似。
no_subtree_check:如果配置了共享子目录,则不检查父目录的权限。如果还设置了 no_root_squash,则此选项没必要;因为 root 具有所有权限。
subtree_check:与 no_subtree_check 相反,强制检查父目录的权限。如果还设置了 no_root_squash,则此选项无效;因为 root 具有所有权限。
root_squash:将请求从 uid/gid 0 映射到 anonymous uid/gid。
all_squash:将所有 uid/gid 都映射到 anonymous uid/gid。
anonuid and anongid:显式设置 anonymous uid/gid。
no_root_squash:默认情况下,客户端用户 root 发出的任何文件请求都被视为服务端 nobody 用户发出的请求。即请求映射到的 UID 取决于服务端的 nobody 用户的 UID,而不取决于客户端。如果选择 no_root_squash,则客户端 root 具有服务端 root 对系统文件的访问级别。这可能会带来严重的安全隐患。
示例
1 | /opt/app/nfs *(rw,insecure,async,all_squash,no_root_squash) |
启动 NFS
注意一: NFS 依赖于端口映射器(portmapper)守护程序,一般的 Linux 系统都会默认启动它。可以使用 rpcinfo
查看:
1 | $ rpcinfo -p |
注意二: 需要确保先启动 rpcbind 服务,再启动 nfs,不然使用 showmount
时会报错 “clnt_create: RPC: Program not registered”,不过一般启动 nfs 时会自动先启动 rpcbind。
NFS 服务包含五个守护程序:(包含在 nfs-utils 软件包中)
rpc.nfsd:完成大部分工作。
rpc.lockd 和 rpc.statd:处理文件锁定。从 2.2.18 开始,nfsd 会根据需要调用 lockd。
rpc.mountd:它处理初始安装请求。
rpc.rquotad:处理导出的卷上的用户文件配额。
附加: 重新加载配置文件 /etc/exports 可以使用 exportfs -ra
命令,或者使用 kill -HUP
。
查看共享信息
- 如果showmount报如下错误,则依次停止服务 rpcbind、nfs。最后再重启rpcbind和nfs,一定要按顺序启动和停止
1 | $ showmount -e 127.0.0.1 |
附加: showmount命令的用法
-e:显示NFS服务器的共享列表
-a:显示本机挂载的文件资源的情况NFS资源的情况
-v:显示版本号
客户端挂载使用
yum 安装 nfs-utils
1 | $ yum -y install nfs-utils |
查看共享信息
1 | $ showmount -e 192.168.10.148 |
挂载目录
- 将服务器端目录挂在到本地
1 | $ mount -t nfs 192.168.10.148:/opt/app/nfs /opt/app/nfs |
- 使用mount指令挂载是临时的,服务器重启后就会失效。如果想要挂载永久生效,则可以选择修改问题
/etc/fstab
使用 mount 选项来控制 NFS 客户端处理当服务端崩溃或网络中断时的反应:
soft:如果文件请求失败,则 NFS 客户端将向请求端报告错误。不建议使用此设置。
hard:当服务器崩溃时,访问 NFS 挂载的文件系统上的文件的程序将挂起。同时指定 intr,可以中断或终止该进程;当 NFS
服务器重新启动时,程序将从原来的位置不受干扰地继续运行。建议在所有 NFS 挂载的文件系统上使用 hard,intr。
示例:
1 | vim /etc/fstab |
修改共享目录的权限
- 一般情况下,nfs客户端会存在无法在共享目录touch文件的权限。此时可以通过检查NFS服务端的共享目录,看属主和组是否为nfsnobody。如果不是,更改之
1 | chown -R nfsnobody.nfsnobody /opt/app/nfs/ |
测试
- 在nfs服务端的共享目录下创建文件,在客户端mount的目录下查看文件是否存在
- 在nfs客户端mount的共享目录下,创建或修改文件。是否修改成功。在服务端的共享目录下查看修改结果