NFSv4疑似ルートの使い方

#1 はじめに
NFSv4にfsidというオプションがあります。
このオプションを設定したディレクトリが、サーバの疑似ルートになります。
つまり、クライアントからは、fsidを設定したディレクトリが、NFSサーバの
ルートディレクトリとして見えます。

#2 環境
VMware Workstation 15 Player上の仮想マシン(2台)を使いました。
どちらの仮想マシンも、最小構成+開発環境で作成しました。

```console:ネットワーク構成
                   192.168.3.0/24 
NFS client --------------------------- NFS server
          .20                        .10
```

仮想マシンの版数は、2台とも以下のとおりです。

```console:CentOS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
```

```console:カーネル版数
[root@server ~]# uname -r
3.10.0-957.el7.x86_64
```



#3 パッケージのインストール
サーバ、クライアントにnfs-utilsパッケージをインストールします。

```console:パッケージのインストール
[root@server ~]# yum install nfs-utils
[root@client ~]# yum install nfs-utils
```


#4 事前準備(サーバ側)
NFSv4サーバを起動します。

```console:NFSv4の起動
[root@server ~]# systemctl start nfs-server.service
```

NFSv4で使用するポート番号を開放します。
なお、firewall-cmdの使い方は、[firewall-cmdコマンドの使い方](https://qiita.com/hana_shin/items/bd9ba363ba06882e1fab)を参照ください。

```console:ポート番号の開放
[root@server ~]# firewall-cmd --add-port=2049/tcp
success
```

```console:テスト用ディレクトリの作成
[root@server ~]# mkdir -p /DIR1/DIR2/DIR3/DIR4/DIR5
```


#5 実験1
`/DIR1`を疑似ルート(fsid=0)に設定してみます。
クライアントからは、`/DIR1`がNFSサーバのルートディレクトリ(`/`)として見えます。

```console:exportsファイルの編集
[root@server ~]# vi /etc/exports
[root@server ~]# cat /etc/exports
/DIR1 192.168.3.20(fsid=0,rw,no_root_squash)
```

`/etc/exports`の設定内容をエクスポートします。

```console:エクスポート
[root@server ~]# exportfs -ar
```

エクスポートした内容を確認します。
`/DIR1`が疑似ルートになっていることがわかります。

```console:確認
[root@server ~]# exportfs -v
/DIR1           192.168.3.20(sync,wdelay,hide,no_subtree_check,fsid=0,sec=sys,rw,secure,no_root_squash,no_all_squash)
```

サーバの`/`をクライアントの`/mnt`にマウントします。

```console:マウント実行
[root@client ~]# mount -t nfs4 192.168.3.10:/ /mnt
```

`/mnt`にサーバの`/`がマウントできたことがわかります。

```console:マウントポイントの確認
[root@client ~]# df -hT /mnt
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
192.168.3.10:/ nfs4      20G  8.3G   12G   43% /mnt
```

`/mnt`配下を確認すると、ルートディレクトリとして設定した
`/DIR1`配下の`DIR2`,`DIR3`,`DIR4`,`DIR5`が確認できます。

```console:疑似ルート配下の確認
[root@client ~]# ls -R /mnt
/mnt:
DIR2

/mnt/DIR2:
DIR3

/mnt/DIR2/DIR3:
DIR4

/mnt/DIR2/DIR3/DIR4:
DIR5

/mnt/DIR2/DIR3/DIR4/DIR5:
```

#6 実験2
今度は、`/DIR1/DIR2/DIR3`を疑似ルート(fsid=0)に設定してみます。
クライアントからは、`/DIR1/DIR2/DIR3`がNFSサーバのルートディレクトリ(`/`)として見えます。

```console:exportsファイルの編集
[root@server ~]# vi /etc/exports
[root@server ~]# cat /etc/exports
/DIR1/DIR2/DIR3 192.168.3.20(fsid=0,rw,no_root_squash)
```

`/etc/exports`の設定内容をエクスポートします。

```console:エクスポート
[root@server ~]# exportfs -ar
```

エクスポートした内容を確認します。
`/DIR1/DIR2/DIR3`が疑似ルートになっていることがわかります。

```console:確認
[root@server ~]# exportfs -v
/DIR1/DIR2/DIR3
                192.168.3.20(sync,wdelay,hide,no_subtree_check,fsid=0,sec=sys,rw,secure,no_root_squash,no_all_squash)
```

サーバの`/`をクライアントの`/mnt`にマウントします。

```console:マウント実行
[root@client ~]# mount -t nfs4 192.168.3.10:/ /mnt
```

`/mnt`にサーバの`/`がマウントできたことがわかります。

```console:マウントポイントの確認
[root@client ~]# df -hT /mnt
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
192.168.3.10:/ nfs4      20G  8.3G   12G   43% /mnt
```


`/mnt`配下を確認すると、ルートディレクトリとして設定した
`/DIR1/DIR2/DIR3`配下の`DIR4`,`DIR5`が確認できます。

```console:疑似ルート配下の確認
[root@client ~]# ls -R /mnt
/mnt:
DIR4

/mnt/DIR4:
DIR5

/mnt/DIR4/DIR5:
```



#Z 参考情報
[Ping-t](https://ping-t.com/)
[Linux教科書 LPICレベル2 スピードマスター問題集 Version4.5対応](https://www.amazon.co.jp/Linux%E6%95%99%E7%A7%91%E6%9B%B8-LPIC%E3%83%AC%E3%83%99%E3%83%AB2-%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E5%95%8F%E9%A1%8C%E9%9B%86-Version4-5%E5%AF%BE%E5%BF%9C-%E6%9C%89%E9%99%90%E4%BC%9A%E7%A4%BE%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3/dp/4798151238/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=lpic+%E3%83%AC%E3%83%99%E3%83%AB2&qid=1584167037&sr=8-2)
[Linux教科書 LPICレベル2 Version 4.5対応 (日本語) ](https://www.amazon.co.jp/Linux%E6%95%99%E7%A7%91%E6%9B%B8-LPIC%E3%83%AC%E3%83%99%E3%83%AB2-Version-4-5%E5%AF%BE%E5%BF%9C-%E4%B8%AD%E5%B3%B6/dp/4798151254/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=LPIC&qid=1587548686&s=books&sr=1-3)