# Linux NFS

### NFS安装

```shell
$ yum install nfs-utils rpcbind
```

### NFS服务配置

* 启动NFS和RPC服务

  ```shell
  $ systemctl enable rpcbind
  $ systemctl enable nfs-server
  $ systemctl start rpcbind
  $ systemctl start nfs-server
  ```

* 防火墙放通NFS

  ```shell
  $ firewall-cmd --permanent --add-service=nfs
  $ firewall-cmd --permanent --add-service=rpc-bind
  $ firewall-cmd --permanent --add-service=mountd
  $ firewall-cmd --reload
  ```

* 共享目录配置

  * 创建共享目录

    ```shell
    # 创建共享目录，分配权限为nfsnobody用户和组
    ```

  * 配置exports文件

    ```shell
    $ vim /etc/exports
    # 格式如下
    # 目录	允许访问主机(参数)
    ```

### 配置文件参数

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

### 远程挂载

```shell
$ showmount -e "NFS服务器IP"	# 查看远程NFS节点
$ mount -t nfs "NFS服务器IP":"服务器路径" "本机路径"
```





