NetApp ONTAP 9.7ファイルサーバを作る時にNFS v3.0/v4.0/v4.1を有効にして、CentOS7からNFSマウントしてみた。
[root@centos7 ~]# mount 172.17.44.108:/ /mnt [root@centos7 ~]# ls -l /mnt 合計 4 drwxr-xr-x. 11 nobody nobody 4096 8月 31 16:07 testvol [root@centos7 ~]# ls -l /mnt/testvol/ 合計 36 drwxrwxrwx. 2 nobody nobody 4096 8月 31 16:07 ntfs-test1 drwxrwxrwx. 4 nobody nobody 4096 7月 17 14:08 test drwxr-xr-x. 3 nobody nobody 4096 8月 28 15:59 test1 drwxr-xr-x. 2 nobody nobody 4096 7月 17 14:08 test2 drwxr-xr-x. 2 nobody nobody 4096 8月 28 15:16 test3 drwxr-xr-x. 2 nobody nobody 4096 8月 28 15:16 test4 drwxr-xr-x. 2 nobody nobody 4096 8月 28 15:16 test5 drwxr-xr-x. 2 nobody nobody 4096 8月 28 15:08 testtere drwxr-xr-x. 2 nobody nobody 4096 7月 31 17:46 testvm [root@centos7 ~]# cat /proc/mounts |grep mnt 172.17.44.108:/ /mnt nfs4 rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.17.44.103,local_lock=none,addr=172.17.44.108 0 0 172.17.44.108:/testvol /mnt/testvol nfs4 rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.17.44.103,local_lock=none,addr=172.17.44.108 0 0 [root@centos7 ~]#
rootユーザで作成したはずの所有者が「nobody / nobody」で表示されている。
この時、/var/log/messages には以下のログが出ていた。
Aug 31 17:13:54 centos7 kernel: FS-Cache: Loaded Aug 31 17:13:54 centos7 kernel: FS-Cache: Netfs 'nfs' registered for caching Aug 31 17:13:54 centos7 kernel: Key type dns_resolver registered Aug 31 17:13:55 centos7 kernel: NFS: Registering the id_resolver key type Aug 31 17:13:55 centos7 kernel: Key type id_resolver registered Aug 31 17:13:55 centos7 kernel: Key type id_legacy registered Aug 31 17:13:55 centos7 nfsidmap[1748]: nss_getpwnam: name 'root@defaultv4iddomain.com' does not map into domain 'adosakana.local' Aug 31 17:13:55 centos7 nfsidmap[1750]: nss_name_to_gid: name 'root@defaultv4iddomain.com' does not map into domain 'adosakana.local' Aug 31 17:13:55 centos7 kernel: nfs4filelayout_init: NFSv4 File Layout Driver Registering...
関連する用語は「idmapd」
RedHat NFSv4 マウントで、すべてのファイルの所有者が nobody:nobody と誤って表示される
SUSE NFS4 mount shows all ownership as “nobody” or 4294967294
Solaris10 nfsmapid デーモン でNFS v4マウント時のいろいろについて詳細解説されている
上記資料だとNFSサーバとして動作させる話も入っている。
CentOS7でNFSクライアントとして使う場合に気にする必要があるのは、/etc/idmapd.conf の「[General]」セクションに「Domain = NFS V4 IDドメイン」の設定を行う、ということのみ。
rpcidmapd.service / nfs-idmapd.service / nfs-idmap.service の起動状態について気にする必要は無く、ただたんに/etc/idmapd.conf を編集してからマウントすればOKだった。
ただし、試した限りでは、一度NFS v4でマウントし、nobodyとして認識されてしまうとキャッシュか何かが残っているようで、OS再起動する必要があった。
Linuxの場合、nfsidmapコマンドを実行すると現状認識しているドメイン名の確認ができ、また、キャッシュの削除を行うことができた。
現状のNFS v4デフォルトドメイン確認が「nfsidmap -d」で、キャシュクリアが「nfsidmap -c」となる。
# nfsidmap -d adosakana.local # nfsidmap -c #
今回は、NetAppのデフォルトNFS V4 IDドメイン「defaultv4iddomain.com」を使用しているので、/etc/idmapd.conf には「Domain = defaultv4iddomain.com」と設定した
この状態でマウントしてみると下記の様になり、期待通りにrootユーザが認識された。
[root@centos7 ~]# mount 172.17.44.108:/ /mnt [root@centos7 ~]# ls -l /mnt/ 合計 4 drwxr-xr-x. 11 root root 4096 8月 31 16:07 testvol [root@centos7 ~]# ls -l /mnt/testvol/ 合計 36 drwxrwxrwx. 2 root root 4096 8月 31 16:07 ntfs-test1 drwxrwxrwx. 4 root root 4096 7月 17 14:08 test drwxr-xr-x. 3 root root 4096 8月 28 15:59 test1 drwxr-xr-x. 2 root root 4096 7月 17 14:08 test2 drwxr-xr-x. 2 root root 4096 8月 28 15:16 test3 drwxr-xr-x. 2 root root 4096 8月 28 15:16 test4 drwxr-xr-x. 2 root root 4096 8月 28 15:16 test5 drwxr-xr-x. 2 root root 4096 8月 28 15:08 testtere drwxr-xr-x. 2 root root 4096 7月 31 17:46 testvm [root@centos7 ~]# tail /var/log/messages Aug 31 17:19:06 centos7 systemd: Created slice User Slice of root. Aug 31 17:19:06 centos7 systemd-logind: New session 1 of user root. Aug 31 17:19:06 centos7 systemd: Started Session 1 of user root. Aug 31 17:19:12 centos7 kernel: FS-Cache: Loaded Aug 31 17:19:12 centos7 kernel: FS-Cache: Netfs 'nfs' registered for caching Aug 31 17:19:12 centos7 kernel: Key type dns_resolver registered Aug 31 17:19:12 centos7 kernel: NFS: Registering the id_resolver key type Aug 31 17:19:12 centos7 kernel: Key type id_resolver registered Aug 31 17:19:12 centos7 kernel: Key type id_legacy registered Aug 31 17:19:12 centos7 kernel: nfs4filelayout_init: NFSv4 File Layout Driver Registering... [root@centos7 ~]# [root@centos7 ~]# cat /proc/mounts |grep mnt 172.17.44.108:/ /mnt nfs4 rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.17.44.103,local_lock=none,addr=172.17.44.108 0 0 172.17.44.108:/testvol /mnt/testvol nfs4 rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.17.44.103,local_lock=none,addr=172.17.44.108 0 0 [root@centos7 ~]#
lsで該当領域を見た後、キャッシュが残っている間であれば「nfsidmap -l」(小文字L」を実行すると、その時点で使ったユーザ名認識を表示してくれる。
# nfsidmap -l 2 .id_resolver keys found: uid:root@adosakana.local gid:root@adosakana.local #
CentOS5をNFSクライアントとしてマウントしてみたところ、CentOS5は「mount -t nfs4 ~」でマウントする必要があること、nfsidmapコマンドは存在しないことがわかりました。
CentOS7環境で、一般ユーザがNFS v3で書くとちゃんとNFSv4側でもユーザが認識されるけど、NFS v4で書くと認識されない、という現象が発生して悩んだ。
# grep /mnt /proc/mounts 172.17.44.82:/sharevol /mnt nfs4 rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=null,clientaddr=172.17.44.103,local_lock=none,addr=172.17.44.82 0 0 172.17.44.82:/sharevol /mnt2 nfs rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.17.44.82,mountvers=3,mountport=635,mountproto=udp,local_lock=none,addr=172.17.44.82 0 0 #
いろいろためした結果、上記の/proc/mounts から失敗が読み取れることが分かった。
NFS v4マウント側で「sec=null」となっている!
CentOS7でマウントオプション指定無しでマウントするとこの設定だった。
このため、「-o sec=sys」オプションを指定してマウントしたところ、期待通りに動作になった。
# mount -o sec=sys 172.17.44.82:/sharevol /mnt # grep /mnt /proc/mounts 172.17.44.82:/sharevol /mnt2 nfs rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.17.44.82,mountvers=3,mountport=635,mountproto=udp,local_lock=none,addr=172.17.44.82 0 0 172.17.44.82:/sharevol /mnt nfs4 rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.17.44.103,local_lock=none,addr=172.17.44.82 0 0 #
標準設定でのマウントには注意が必要なようです