官网文档:http://nfs.sourceforge.net/nfs-howto/index.html,官方表示此文档并不是全部信息的文档

配置服务端 NFS

1 yum 安装 nfs-utils

yum -y install nfs-utils
#安装 nfs-utils 时,会自动安装依赖 rpcbind 和 mount 相关包。

2 编辑配置文件 /etc/exports

格式如下:

directory machine(option)
#directory:共享的目录。
#machine:可以访问目录的客户端地址。支持 DNS 和 IP,使用 IP 地址更可靠一些。
#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 对系统文件的访问级别。这可能会带来严重的安全隐患。

示例:

/data   192.168.10.0/24(rw,insecure,async,all_squash,anonuid=10000,anongid=10000)

3 启动 NFS

注意一: NFS 依赖于端口映射器(portmapper)守护程序,一般的 Linux 系统都会默认启动它。可以使用 rpcinfo 查看:

[root@nfs ~]# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

注意二: 需要确保先启动 rpcbind 服务,再启动 nfs,不然使用 showmount 时会报错 “clnt_create: RPC: Program not registered”,不过一般启动 nfs 时会自动先启动 rpcbind。

验证 NFS 是否正常运行:

[root@nfs ~]# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  45066  status
    100024    1   tcp  39085  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  46568  nlockmgr
    100021    3   udp  46568  nlockmgr
    100021    4   udp  46568  nlockmgr
    100021    1   tcp  36807  nlockmgr
    100021    3   tcp  36807  nlockmgr
    100021    4   tcp  36807  nlockmgr

NFS 服务包含五个守护程序:(包含在 nfs-utils 软件包中)

  • rpc.nfsd:完成大部分工作。
  • rpc.lockd 和 rpc.statd:处理文件锁定。从 2.2.18 开始,nfsd 会根据需要调用 lockd。
  • rpc.mountd:它处理初始安装请求。
  • rpc.rquotad:处理导出的卷上的用户文件配额。

附加: 重新加载配置文件 /etc/exports 可以使用 exportfs -ra 命令,或者使用 kill -HUP

4 查看共享信息

[root@nfs ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/data 192.168.10.0/24

附加: showmount命令的用法

  • -e:显示NFS服务器的共享列表
  • -a:显示本机挂载的文件资源的情况NFS资源的情况
  • -v:显示版本号

客户端挂在使用

1 yum 安装 nfs-utils

yum -y install nfs-utils

2 查看共享信息

[root@nfs_client ~]# showmount -e 192.168.10.148
Export list for 192.168.10.148:
/data 192.168.10.0/24

3 挂载共享目录

使用 mount 选项来控制 NFS 客户端处理当服务端崩溃或网络中断时的反应:

  • soft:如果文件请求失败,则 NFS 客户端将向请求端报告错误。不建议使用此设置。
  • hard:当服务器崩溃时,访问 NFS 挂载的文件系统上的文件的程序将挂起。同时指定 intr,可以中断或终止该进程;当 NFS
    服务器重新启动时,程序将从原来的位置不受干扰地继续运行。建议在所有 NFS 挂载的文件系统上使用 hard,intr。

示例:

vim /etc/fstab
...
192.168.10.148:/data    /mnt                 nfs     rw,hard,intr    0 0
...