【小ネタ】ONTAPにNFSv4でマウントするとファイルの所有者が「nobody」になってしまったときの対処法

# はじめに
- ONTAPのボリュームにNFSv4でアクセスする際、ちょっとしたハマりどころがあったのでまとめました。

# 事象：ONTAPの同一ボリュームにNFSv3とNFSv4でアクセスすると、ファイルの所有者の表示が異なる。
- はじめにこのようなNFS用ボリュームを作成します。
![nfsvol.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523630/27609785-db77-a1e0-ac70-f03cb6dd666d.png)
- NFSクライアントであるLinuxサーバーにてNFSv3マウント用のディレクトリ、NFSv4マウント用のディレクトリをそれぞれ作成します。
```console
# mkdir /mnt/nfsv3
```
```console
# mkdir /mnt/nfsv4
```
- NFSv3でマウントしてみます。
```console
# mount -t nfs -o nfsvers=3 192.168.0.151:/nfsvol /mnt/nfsv3
```
```console
# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   928944       0    928944   0% /dev
tmpfs                      940988       0    940988   0% /dev/shm
tmpfs                      940988    9040    931948   1% /run
tmpfs                      940988       0    940988   0% /sys/fs/cgroup
/dev/mapper/centos-root  57643520 3609952  54033568   7% /
/dev/sda1                 1038336  203396    834940  20% /boot
tmpfs                      188200       0    188200   0% /run/user/0
192.168.0.151:/nfsvol    10485824     384  10485440   1% /mnt/nfsv3
```
- テスト用にファイルを作成してファイルの所有者を確認すると、所有者は`root:root`でした。
```console
# touch /mnt/nfsv3/test.txt
```
```console
# ls -l /mnt/nfsv3
total 0
-rw-r--r-- 1 root root 0 Jan 21 04:24 test.txt
```
- 次に、同じボリュームをNFSv4でマウントしてみます。
```console
# mount -t nfs -o nfsvers=4 192.168.0.151:/nfsvol /mnt/nfsv4
```
```console
# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   928944       0    928944   0% /dev
tmpfs                      940988       0    940988   0% /dev/shm
tmpfs                      940988    9040    931948   1% /run
tmpfs                      940988       0    940988   0% /sys/fs/cgroup
/dev/mapper/centos-root  57643520 3609904  54033616   7% /
/dev/sda1                 1038336  203396    834940  20% /boot
tmpfs                      188200       0    188200   0% /run/user/0
192.168.0.151:/nfsvol    10485824     384  10485440   1% /mnt/nfsv3
192.168.0.151:/nfsvol    10485824     384  10485440   1% /mnt/nfsv4
```
- 作成したファイルを確認すると、所有者は`nobody:nobody`でした。
```console
# ls -l /mnt/nfsv4
total 0
-rw-r--r-- 1 nobody nobody 0 Jan 21 04:24 test.txt
```

# 解決方法：NFSクライアントとONTAPのSVMのドメイン名を一致させる。
- NFSv4で所有者が「nobody」と表示されてしまうのは、NFSクライアントとONTAPでのUIDの名前のマッピングの不一致によるものです。
- マッピングを一致させるには、両者で同一のドメイン名を設定する必要があります。
- ONTAPのSVM側のデフォルトのドメイン名は`defaultv4iddomain.com`です。
```console
::> vserver nfs show -fields v4-id-domain
vserver       v4-id-domain
------------- ---------------------
svm1_cluster1 defaultv4iddomain.com
```
- 特にドメイン名に拘る必要が無ければ、NFSクライアント側をこれに合わせます。
- NFSクライアント側のドメイン名は`/etc/idmapd.conf`で設定します。
- `/etc/idmapd.conf`に以下を追記します。
```console
Domain = defaultv4iddomain.com
```

- 一度、NFSv4のマウントをアンマウントして再度マウントします。
```console
# umount /mnt/nfsv4
```
```console
# mount -t nfs -o nfsvers=4 192.168.0.151:/nfsvol /mnt/nfsv4
```
```console
# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   928944       0    928944   0% /dev
tmpfs                      940988       0    940988   0% /dev/shm
tmpfs                      940988    9040    931948   1% /run
tmpfs                      940988       0    940988   0% /sys/fs/cgroup
/dev/mapper/centos-root  57643520 3609904  54033616   7% /
/dev/sda1                 1038336  203396    834940  20% /boot
tmpfs                      188200       0    188200   0% /run/user/0
192.168.0.151:/nfsvol    10485824     384  10485440   1% /mnt/nfsv3
192.168.0.151:/nfsvol    10485824     384  10485440   1% /mnt/nfsv4
```
- NFSv3、NFSv4ともに所有者が`root:root`になりました。
```console
# ls -l /mnt/nfsv3
total 0
-rw-r--r-- 1 root root 0 Jan 21 04:24 test.txt
```
```console
# ls -l /mnt/nfsv4
total 0
-rw-r--r-- 1 root root 0 Jan 21 04:24 test.txt
```

# まとめ
- ONTAPのボリュームにNFSv4でアクセスする際、ちょっとしたハマりどころがあったのでまとめました。
- ドキュメント上の記載も見つけにくいので注意が必要です。

# 参考
- NetApp テクニカルレポート: [NFS in NetApp ONTAP ベストプラクティスおよび実装ガイド](https://www.netapp.com/ja/media/103282-ja-jp-tr-4067-nfs-best-practice-and-implementation-guide.pdf)
- NetApp Knowledge Base: [How to configure NFSv4 in ONTAP?](https://kb.netapp.com/on-prem/ontap/da/NAS/NAS-KBs/How_to_configure_NFSv4_in_ONTAP#)